DEV Community 日本語
フォロー
実践における分散ロック:保証、障害シナリオ、およびより良い代替手段(3/4)
分散システムは、単純な分散ロックを超えた様々な調整パターンを使用します。当初、分散ロックはリソースへの排他的アクセスを保証しますが、ノード障害の処理のためのリースや、古い操作を防ぐためのフェンシングトークンで改善できます。操作の排他的所有から、単一ノードがクラスターの残りを調整するという目標に移行した場合、リーダー選出が導入されます。短命なロックとは異なり、リーダーシップは長命な役割であり、リーダー選出はジョブスケジューリングやクラスター管理などのタスクに適しています。しかし、リーダーも障害を起こす可能性があり、その可用性のなさを検出し、新しいリーダーを選出するメカニズムが必要となりますが、これは依然としてリースやタイムアウトなどの概念に依存しています。リーダー選出だけではノード間の合意は保証されません。そのタスクは合意形成メカニズムに委ねられます。合意形成は、複数のノードが同じ状態に同意することを保証し、構成やクラスターメンバーシップの一貫性を維持するために不可欠です。ZooKeeperやetcdのような最新の調整プラットフォームは、リース、フェンシング、リーダー選出、合意形成を単一のインフラストラクチャに組み合わせています。それぞれの調整プリミティブが解決する異なる問題(所有権のためのロック、調整のためのリーダー選出、合意のための合意形成)を理解することが鍵となります。分散ロックは基礎的ですが、多くのシステムは楽観的並行処理やキューベースの処理のような代替方法で正しさを実現しています。各調整メカニズムは特定の課題に対処し、信頼性の高い分散システムのための階層化されたツールキットを構築します。