分散システム/分散コンピューティングの調査
k8sの技術を追っていたりすると、分散システムの知識を問われる機会が結構ある。
例えば、kubeadm: Use etcd Learner to Join a Control Plane Node Safelyでは、コントロールプレーンのノードを安全に(柔軟性や可用性、メンテナンス性などが高い)追加できるようになったとのことだが、それがどのような原理・仕組みで可能になったのかわからない。
"Quorum"とか、"Leader Election"とか、そのあたりの用語を中心に全体像がわかるように、分散システムの仕組みをまとめていきたい。
英単語としての"Quorum"というのは、「定足数」という意味で法律用語らしい(参考: https://ejje.weblio.jp/content/quorum )。
分散システムにおける"Quorum"の意味は、Wikipediaによると「分散システムにおいて、分散トランザクションが処理を実行するために必要な最低限の票の数である」となっており、上述した英単語としての意味とも合致する。
※ここで言う「分散トランザクション」というのは「分散システムにおけるトランザクション」という意味で使われており、一般的に言う「複数DBにまたがったトランザクション」という意味での「分散トランザクション」とは異なる意味で使われているような気がする…
ただ、より厳密に言うと、Quorumは「処理を実行するために必要なノードの部分集合」を指す用語とのことだ。その「ノードの部分集合」を抽出するための考え方は複数存在するが、代表的な例としては「過半数」が挙げられる(この例だけ見ると上述したWikipediaの記載とも合致する)。
詳細については、5年以上前のものだが、以下の記事が参考になった。