blog

Apache Mesosの基盤ライブラリ

Protocal Bufferは、一般的なオブジェクトのシリアライズ/デシリアライズの役割として、一般的に言語間のデータアクセスで使用される、データ交換のためのGoogleのオープンソースライブラリで...

Apr 19, 2014 · 5 min. read
シェア

1.プロトコル・バッファ

Protocal Bufferは、一般的なオブジェクトのシリアライズ/デシリアライズの役割として、一般的に言語間のデータアクセスで使用される、データ交換のためのgoogleのオープンソースライブラリです。 もう一つの同様のオープンソースソフトウェアは、facebookのオープンソースのthriftですが、2つの最大の違いは、thriftはRPC機能の自動生成を提供し、Protocal Bufferは、独自の実装が必要ですが、Protocal Bufferの利点の一つは、そのシリアライズ/デシリアライズは非常に効率的であるということです。

2.リブプロセス

libprocess は C/C++ で書かれた効率的なメッセージパッシング・プログラミング・モデルで、Berkeley によってオープンソース化されています。 その実装全体は、最も基本的なメッセージ送受信などを含む、非常にシンプルなものです。

2.1 Libprocess モデル

2.2 各種共通機能

インストール

void install(void ,P1 ;)

ProtocalBufferメッセージを処理するハンドラをインストールします。メッセージタイプはM、メッセージに対応するハンドラ関数はmethod、関数パラメータはM::*param1です:

install( 
      &Slave::newMasterDetected, 
      &NewMasterDetectedMessage::pid); 
void install(const std::string& name,void (T::*method)(const UPID&, const std::string&)) 

文字列を処理するハンドラをインストールします。つまり、文字列名を受信したら、関数メソッドを呼び出して処理します。mesosにおけるこのAPIの典型的な用途は、マスターとスレーブの間でハートビートを維持し、互いが生きていることを確認することです:

slave/slave.cpp にあります:

install("PING", &Slave::ping); 
  
void Slave::ping(const UPID& from, const string& body) 
{ 
  send(from, "PONG"); 
} 

master/master.cppにあります:

install("PONG", &SlaveObserver::pong); 
  void pong(const UPID& from, const string& body) 
  { 
    timeouts = 0; 
    pinged = false; 
  } 
  void timeout() 
  { 
    if (pinged) { // So we haven't got back a pong yet ... 
      if (++timeouts >= MAX_SLAVE_TIMEOUTS) { 
        deactivate(); 
        return; 
      } 
    } 
    send(slave, "PING"); 
    pinged = true; 
    delay(SLAVE_PONG_TIMEOUT, self(), &SlaveObserver::timeout); 
  } 

送る

void send(const process::UPID& to, const google::protobuf::Message& message) 

あるUPIDにメッセージを送信します。UPIDはipとport情報を含むソケットを表し、メッセージmessageはProtocalBufferで定義されたオブジェクトです。

派遣

void dispatch(const UPID& pid, 
  const std::tr1::shared_ptr >& f) 

プロセスpidで関数fを実行します。効率を上げるため、関数fが実行されるまで待つのではなく、非同期メソッドを使用します。関数fは関数キューに入れられ、別のプロセスがキューから関数を取得し続け、順番に実行します。

遅延

Timer delay(double secs,const PID& pid,void (T::*method)()) 

プロセス pid のメソッドをディスパッチし、ディスパッチをキャンセルするためのカウンタを返す秒数。

mesosでは、次のコードに示すように、この関数を通じて無限ループを巧みに構築し、常に空きリソースを検出して個々のフレームに割り当てています:

void Master::initialize() { 
  
  timerTickTimer = delay(1.0, self(), &Master::timerTick); 
} 
void Master::timerTick() { 
    
  timerTickTimer = delay(1.0, self(), &Master::timerTick); 
} 

上記の関数コード・スニペットは、1秒ごとにtimerTick関数を呼び出す機能を完成させることができます。

3.ブースト

非常に有名なオープンソースC++ベースライブラリで、内部のSTLは非常に効率的で便利で、多くの有名なソフトウェアに採用されています。

4.ズーキーパー

大規模分散システム向けの信頼性の高い調整システムであり、設定メンテナンス、ネームサービス、分散同期、グループサービスなどの機能を提供します。 Mesosは、マスターの単一障害点の問題を解決するためにzookeeperを使用します。zookeeperを使用してマスタークラスタを構築し、マスターが故障したときにスタンバイマスターを選択してマスターになります。

5.グログ

GoogleのオープンソースのC + +ロギングライブラリ、ログを印刷するための主要なC + +プログラムは、次の形式を印刷します:

I0411 17:26:54.150193 20653 main.cpp:111] "process "分離モジュールの作成

I0411 17:26:54.150400 20653 main.cpp:119] ビルド: 2012-04-11 16:50:21 by root

I0411 17:26:54.150658 20653 main.cpp:120] Mesos スレーブの起動

I0411 17:26:54.152981 20669 slave.cpp:191] 123.145.2.2:64394でスレーブが開始されました。

I0411 17:26:54.153024 20669 slave.cpp:192] スレーブのリソース:cpus=2; mem=094

6.グモック

オープンソースのC++ユニットテストフレームワーク

Mesosホームページ:

Mesosコード:

Read next

H3C CloudPackクラウドサービスシステムデビュー

H3Cが新たに発表したCloudPackクラウドビジネスシステムは、Global Cloud Computing Conference Chinaで初披露されました。 CloudPackクラウドビジネスシステムは、クラウドコンピューティングサービスモデルのIaaSレイヤーを統合的に提供し、ユーザーがクラウドコンピューティングデータセンターを構築するために必要なインフラをカスタマイズされたキャビネットに統合することで、ユーザーに優れた「すぐに使える、ワンボックス・イズ・クラウド」体験を提供します。箱がクラウド」サービス体験をユーザーに。

Apr 16, 2014 · 3 min read