PR

 上述の通り,E2Eモードは,Flumeマスタを介したACKメッセージにより,データが目的地(最終到達ノード)に到達したか否かをチェックする.このメカニズムの利点は,ACKメッセージが,最終到達ノードから一律2ホップでオリジナルデータ送信ノードに届くということである.しかし,このE2Eモードをそのまま我々の環境に適用させようとすると,以下のような問題点が発生する.

  • Flumeノード集合が,異なったネットワーク環境に設置され,Flumeマスタ,Flumeエージェント間の通信ができない場合,E2Eシステムは機能しない.この問題は,たとえば海外拠点に設置されたFlumeノードが,Flumeマスタを参照しようとした際に発生するため,非常に重要な問題である.
  • Flumeマスタがクラッシュした場合,FlumeエージェントはACKを取得できなくなる.この場合,当該Flumeエージェントはデータを再送信し続けることになる.Flumeマスタを冗長化させることで,ある程度,この問題を解決することができるが,例えばFlumeマスタのレプリカを作成している途中にFlumeマスタがクラッシュした場合等,ACKが消失してしまう可能性が存在する.
  • 多数のFlumeエージェントがACKを取得しようとした場合,Flumeマスタがシステム全体のボトルネックとなる.Flumeエージェントは,ACKの受信完了するまで,データを送ることができない.

 これらの問題を解決するため,我々は,“Masterless ACK(MA) Flume(*)”を構築した(図6). MA Flumeでは,図6で示す通り,データが送信されたルートとは逆のルートでACKが送信される.つまり,

  • 対象データがストレージ環境に記録された後,Flumeコレクタはデータ送信元Flumeノードに対し,ACKを送信する.
  • ACKを受信したFlumeノードは,自身がACKの宛先でない限り,データ送信元Flumeノードに対し,ACKを送信する.
  • オリジナルデータ送信元のFlumeノードは,データを送信したFlumeノードからACKが返ってくるまで待機する.
  • このスキームを実現するために,MA Flumeでは,収集対象データに対し,通過してきたFlumeノードパスを付与していく.
* 米国特許出願第13/675,352(米国特許出願日2012年11月13日), 特願2012-017514号
図6●楽天のMA Flume
図6●楽天のMA Flume
[画像のクリックで拡大表示]

 我々は,上述のメカニズムを持つMA Flumeを実装し,実験を行った.その結果,Flumeマスターノードがクラッシュし,復旧しない状況下においても,このスキームを用いることでデータの送受信が継続できることを確認した.また,任意のノード間の通信量が多くなることが原因でパフォーマンスの低下が予測されるが,ACKの送受信部分の最適化を施すことで,オリジナルのFlumeのパフォーマンスと遜色ない程度まで,MA Flumeのパフォーマンスを向上することに成功している.現在,MA FlumeモデルはGEAPに正式に採用され,稼動している.