Cluster Communication
Alopex Chirps
ノードをつなぎ、合意まで届ける通信基盤
Chirpsは、アプリケーションに組み込むRust製のライブラリです。ノードの発見と参加、gossipによるメンバーシップ、QUICによるメッセージ送信、Raftによる合意を、別のサーバーを立てずに使えます。
ノード発見、メンバーシップ、メッセージ送信、Raftによる合意をまとめた、Rust製の通信基盤。
Key points
- ノードの発見からメッセージ送信まで1つのライブラリ
- ノードどうしは常に相互TLSで認証
- Raftの部品をそのまま組み込める
Challenge
クラスタの通信を、部品の寄せ集めで作っている
- ノードの発見、生死の監視、メッセージ送信、合意を別々の仕組みで組み合わせる
- ノード間の通信の認証を、あとから足す
- 合意のための専用サーバーを、別に運用する
1つのライブラリで、つなぐ・知る・送る・合意する
アプリケーションに組み込むだけで、クラスタの通信と合意がそろいます。
- シードのリストから参加し、gossipでメンバーを把握する
- 宛先指定の送信、全体への配信、受信の購読
- Raftによる合意と、複数のRaftグループ
Capabilities
2つの層
メッシュの上に、合意の部品が載ります。
メッシュ
ノードをつなぎ、互いの状態を知る
- シードのリストから、DNSなしでクラスタに参加する
- SWIM方式のgossipで、alive・suspect・deadを把握する
- ノードの参加、離脱、状態の変化をイベントで受け取る
- QUICと相互TLSで、宛先指定の送信と全体への配信を行う
合意
クラスタで同じ順序の決定をする
- Raftによる合意。状態機械はアプリケーションが持つ
- 複数のRaftグループを、グループごとの保存領域で動かす
- 単調に増えるタイムスタンプを配るTSO
Features
主要機能
クラスタの通信のために備えている機能。
ノードの発見とメンバーシップ
シードのリストから参加し、SWIM方式のgossipで各ノードの生死を把握します。ノードIDは永続化され、再起動しても変わりません。
メッセージ送信
宛先を指定した送信、全体への配信、受信の購読に対応します。Raftの通信は、制御用の配信方式で優先して運ばれます。
相互TLS
QUICで通信し、ノードどうしを常に相互TLSで認証します。信頼すると設定した証明書だけを受け入れます。
Raftと複数のRaftグループ
Raftによる合意を備え、複数のRaftグループを、グループごとに分けた保存領域で動かします。スナップショットの転送にも対応します。
ファイル転送
ファイルの送信、全体への配信、同期に対応します。受信側でハッシュを検証してから配置します。
Prometheusのメトリクス
メッシュ、gossip、Raftの状態を、認証付きのエンドポイントで出します。
Tech Stack
技術スタック
Rustで書かれ、Alopexファミリーと部品を共有しています。
通信
QUIC + TLS
合意
Raft
Resources
関連情報
ソースコード、パッケージ、関連ページ。
“いま抱えている課題から読み始めてください。この製品が何を減らせるか、すぐにわかります。”
高峰明里
製品案内
“リポジトリを開けば、設計の理由とテストを自分の目で確かめられます。”
アスマティ・辰巳
技術解説
公開リソース
最新の資料・コード・コミュニティ導線をまとめています。
Get Involved
使ってみて、詰まったところを教えてください
ノードの参加や証明書の設定で困った点があれば、Issueに書いてください。