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コード: