Clusters
大雑把な意訳、訳しにくい箇所は英文のまま転載します。
http://docs.basho.com/riak/1.3.2/references/appendices/concepts/Clusters/
Overciew
Riak's default mode of operation is in a cluster. Riak Cluster は一般的に互いに接続している物理ホストで構成されます。Cluster の各ホストは、ひとつの Riak ノードとして動作します。各 Riak ノードは複数の仮想ノード (あるいは vnodes と呼ぶ) で構成されます。各仮想ノードはキー空間を区別するパーティションにデータを格納します。
ノードは互いのクローンではありません。また、各ノードは全リクエストの一部の処理にしか関与しません。The extent to which data is replicated, and when, and with what merge strategy and failure model, is configurable at runtime.
The Ring
このセクションの多くは Dynamo の論文で議論されています。しかし、Riak がどのように実装されているかに関する良いサマリーです。
Riak のクライアントインタフェースは、buckets と keys を扱います。内部で、Riak は bucket/key ペアで 160-bit の binary hash を計算します。そして、全ての values を、順序付けられた Ring にマッピングします。Ring はパーティションに分割されます。各仮想ノードは、ひとつのパーティションを担当します。
Riak Cluster の各ノードは、おおよそ等しい数の仮想ノードを持ちます。一般的な場合は、Cluster の各ノードは、"パーティション数/ノード数" 台の仮想ノードを持ちます。例えば、2 台のノードと 16 個のパーティションで構築される Cluster においては、各ノードは 8 台の仮想ノードを持ちます。Nodes attempt to claim their partitions at intervals around the ring such that there is even distribution amongst the member nodes and that no node is responsible for more than one replica of a key.
value が Cluster に格納される時は、どのノードもリクエストのコーディネートに関わる可能性があります。コーディネートするノードは、格納される value の key が属するパーティションを担当している仮想ノードを決める為に、Ring のステートを調べます。次に "put" リクエストをその仮想ノードに送信し、同じように Ring から N-1 のパーティションを担当している仮想ノードに送信します。ここでの N は、bucket の設定パラメータで、value のコピーをどれだけ格納するかの値です。その "put" リクエストは、少なくても W (=<N) 台の仮想ノードが成功したら返答するか、DW (=<W) 台の仮想ノードが永続的に格納できた後に成功したら返答するか、を指定できます。
"fetch" または "get" リクエストも同様に key が属するパーティションを担当している仮想ノードにリクエストを送信し、同じように次の N-1 のパーティションを担当する仮想ノードにリクエストを送信します。"fetch" または "get" リクエストは、R (=<N) 台の仮想ノードの応答が必要かを指定できます。
Gossping
Ring のステートは Gossip Protocol を使用して Cluster 全体に共有されます。ノードが Ring のパーティションを担当する仮想ノードに変更が生じる度に、Gossip Protocol を使用して変更を伝えます。Ring のステートを定期的に再送することによって、前回の最新版を逃したノードでも反映されます。
End
そんなに内容なかったけど、おしまい。