Raft
Raftについて 分散システムを勉強するのであれば、必ず必要となる。これだけ覚えておこう。 Replicate And Fault Tolerant Raftの目的 Raftアルゴリズムの目的は、分散システムにおける信頼性の高いリーダー選出とログレプリケーションを通じて、一貫性のある状態を維持することです。具体的には、複数のノードが協調して動作し、一つのノードが故障してもシステム全体としての一貫性と可用性を保つことを目指します。 raft demo site このサイトを見ると、ラフトの動作が詳細までわかることでしょう。 参考文献 youtube 目的を達成する手段 Raftアルゴリズムは、以下の手段を用いて目的を達成します:(これはそのまま、ラフトを開発した研究者のプレゼン(youtubeで見られる)で発表されていたものと同じ) リーダー選出: クラスタ内の一つのノードがリーダーとして選ばれ、他のフォロワーノードに対して命令を発行します。リーダーはクライアントからのリクエストを受け取り、ログにエントリを追加します。 リーダが死んだ際には新たにリーダを選出するようにプロトコルが組まれています ログレプリケーション: リーダーがクライアントからのリクエストを受け取ると、そのリクエストをログに記録し、そのログエントリをフォロワーノードに複製します。フォロワーはリーダーからの指示に従い、同じログを持つことで一貫性を保ちます。 ここは結構大事だけど、クライアントからデータを受け取るのはリーダだけです 安全性の確保: 特定の条件下でのみリーダーが選出されるようにし、ログのコミットが保証されることで、システムの安全性と一貫性を確保します。 例えば、フォロワーの過半数がログエントリを受け取った場合にのみ、そのエントリをコミットと見なします。 また、最新のログ状態を持っているサーバしかリーダになれないようになっています。 リーダーの失敗処理:リーダーが失敗した場合、残りのノードのうち一つが新しいリーダーとして選出されます。この選出プロセスは、タイムアウトと投票を用いて実現されます。 まとめるとこうです。 Leader election Log replication safety では、ここから詳細に写っていこうと思います。 前提知識 エージェント(各サーバの役割) サーバは3つの状態のうちのどれか follower : completely passive. Does no action. But if he doesn’t get heart beat from leader he gets anxious and try to become a leader. He tries to . They expect to get heart beat from leader. candidate: Sends RequestVotes RPCs to get elected as leader. leader: Replicate its log to the followers. Heart beats to maintain its leadershop If candidate or leader discovers higher terms RPC it gets back to follower. ...