InfoQ

News

Protocol Buffers/Thriftに対する動的な代替手段としてのBERT

作者 Werner Schuster , 翻訳者 笹井 崇司 投稿日 2009年11月10日 午後3時0分

コミュニティ
Ruby,
Architecture,
SOA
トピック
動的言語,
パフォーマンス&スケーラビリティ
タグ
Erlang,
github

原文(投稿日:2009/11/02)へのリンク

エンコーディングデータとしてはXMLが有名だが、その効率の悪さが問題となる場合も多い。効率の悪さには、エンコーディング/デコーディングが非効率であることと、使用する空間サイズが大きいことの両面がある。これに対して、人気のあるバイナリシリアライゼーションフォーマットには、広く使われているASN.1や、GoogleのProtocolBuffers、FacebookのThriftといったものがある。

そして今、BERTという新しいフォーマットがGitHubのバックエンドを動かしている。BERTはTom Preston-Werner氏によって作られたフォーマットであり、ノード間通信のためにErlang termのエンコードに使われるErlangのExternal Term Format (ETF)に基づいている。

BERTはETFを拡張して、dictionaryやtime、regexなどの複雑なデータ型が使えるようになっている。

また、BERTはASN.1やProtocol Buffersとは違って、フォーマットのスキーマやIDL仕様を必要としない。つまり、BERTはJSONの背景にある考え方のバイナリ版のようなものだ、とTom Preston-Werner氏は説明する。

私はJSONが好きなんです。言語のサブセットを抜き出して、それを使ってプロセス間通信をしやすくするという考え方が大好きなんです。それで、Erlectricityを使ってやった仕事を思い出しました。2年ほど前、私はErlectricityのためのC拡張を書いていました。ErlangのExternal Term Formatのデシリアライゼーションを高速化するためです。
[..] 私は考えたんです。もし、ErlangのExternal Term Formatの汎用的な部分を抜き出して、それをプロセス間通信の標準にしたらどうなるだろうか? もし、ErlangにJavaScriptのJSONに相当するものがあればどうなるだろうか? そして、もし、そのフォーマット上にRPCプロトコルを構築するとどうなるだろうか? そうすると、何が起こるのだろうか、どれだけシンプルになるだろうか?

BERT-RPCは、BERTを使って呼び出しの引数と戻り値をエンコードすることにより、BERT-RPCサーバにホストされているコードをリモートから呼び出すことができる。Tom氏はBERT-RPCの機能について言及している。

- 同期呼び出しと非同期呼び出し [..]
- ストリーミング(要求と応答)
- ディレクティブのキャッシュ

ErnieといったBERT-RPCサーバを使うと、Rubyコードから利用することも可能だ。

BERTとBERT-RPCには仕様書が存在する。そして、RubyとErlangの実装以外にも、JavascriptPythonといった言語でも、BERTを利用することができる。

あなたはBERTのようなスキーマなしのアプローチの方が好きですか?それとも、ASN.1やProtocol BuffersのようなIDLに基づくアプローチの方が好きですか?

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Agile Japan 2009

2009年4月22日、東京千代田区にある放送会館で「アジャイルジャパン2009」が開催されました。本イベントは「ソフトウェア開発の次世代リーダーをつくる」ことを合い言葉に、200人以上の参加者を集めてスタートしました。

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumboというコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。