BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Thrift for HaskellはRPCコードからバグを排除することを目的としている

Thrift for HaskellはRPCコードからバグを排除することを目的としている

ブックマーク

原文(投稿日:2021/02/07)へのリンク

もともとFacebookで作成され、現在はApacheの一部となっているThriftは、複数の言語で記述されたサービス間で大規模で効率的なRPCを実現することを目的としたインターフェイス定義言語(IDL)およびバイナリ通信プロトコルであるFacebookは最近hsthriftをオープンソース化した。これにより、HaskellプロジェクトでThriftを使用し、その依存型を利用して本番環境のバグを排除することができる

Thriftは、クライアントとサーバのRPCコードにコンパイルできる言語に依存しないIDLを提供する。

Haskell Thriftコンパイラは、他のThriftサービスとの通信に必要なHaskellコードを生成します。付属のライブラリを使用すると、HaskellでThriftクライアントとThriftサーバの両方を構築できます。

Thrift for Haskellのオープンソース化により、HaskellプロジェクトがThriftを使用して他の言語で記述されたサービスと通信できるようになった。Haskell Thriftツールチェーンには、標準のThriftツールチェーンにはない追加機能が含まれている。特に、Haskell Thriftコンパイラは、型チェックの前に、生成されたコードを整理して未使用のシンボルを削除できる。そして、exactprintにインスパイアされたライブラリを使用してThrift抽象構文ツリーの変換をサポートする。また、型チェックプラグインを指定して、型チェックルールをターゲット言語に合わせて調整するメカニズムが含まれている。

Thrift for Haskellの主な約束の1つは、Haskellの強力な正確性保証のおかげで、本番システムのバグを排除できる可能性である。具体的には、Facebookは、Haskell依存型を使用することで、実際のコードのバグを見つけて排除できたと主張している。依存型は、Haskellコンパイラがチェックする型レベルで、コードに関する不変条件を表現する手段を提供する。Haskellは実は依存型言語ではないが、Thriftはこのアプローチの有用性を示すための完全なプレイグラウンドを提供している。

Haskell Thriftコンパイラをデプロイすると、既存のC++実装に多くのバグが発生しました。その実施は、Haskell以外の言語向けのThriftコードを生成するために使用されています。そのバグは、不適切な入力、無限のループ、誤った強制、あいまいな動作を受け入れるものです

Thrift for HaskellにはFacebook版のThrift、fbthriftが必要であることを考慮することが重要である。それはApache Thriftのクライアントやサーバと互換性がない。

Thriftは、C/C++、C#、Erlang、Go、Java、JavaScriptなど、多数のターゲット言語をサポートしている。

Thriftインターフェースの簡単な例として、JavaとPythonの単純な乗算サービスを定義する方法は次のとおりである。

namespace java tutorial
namespace py tutorial

typedef i32 int
service MultiplicationService
{
        int multiply(1:int n1, 2:int n2),
}

IDLコンパイラに加えて、Thriftは、いくつかのプロトコルとトランスポート層を実装するランタイムライブラリも提供する。これは、開発者がコードを再コンパイルすることなく使用でき、交換可能である。たとえば、Thriftは、パフォーマンスを向上させるためにバイナリ形式を使用するTBinaryProtocolと、データのエンコードにJSONを使用するTJSONProtocolを提供する。同様に、Thriftはファイルベースのトランスポート、ブロッキングソケット、メモリなどを使用できる。さらに、Thriftには、さまざまなリクエスト処理戦略を使用してサービスを簡単に実装できるように、すぐに使用できるサーバも多数含まれている。戦略としては、シンプルなシリアルサーバ、マルチスレッドのノンブロッキングサーバ、スレッドプールを使用するマルチスレッドサーバなどがある。

言語に依存しないRPCの選択肢は、Thriftだけではない。最も注目すべきは、Googleが同じ目標でProtocol Buffersに基づいてgRPCフレームワークをオープンソース化したことである。gRPCは、Square、Netflixなどを含む多くの組織で使用されている。さまざまなRPCコード生成ソリューションの比較については、CodeGenの再考:IDL、Thrift、gRPC、OhhMyをチェックしてください。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT