The Chubby lock service for loosely-coupled distributed systems

October 16, 2021

Chubbyは、助言ロックをかけられるファイルを作れる低容量のストレージであり、分散システム向けのロックサービスとしてはたらく。 処理性能よりも高可用性と信頼性を重視し、ロックを保持する期間は数時間から数日にわたる長いものを想定する。 ロックされたファイルで実行環境の情報を共有でき、例えばリーダーの選出にも使える。 Chubbyは既存のアルゴリズムを集積であり、表題の論文は、新しいアルゴリズムよりも、Chubbyの設計や想定していた使用方法や実際の使われ方の解説に重点をおく。 Chubbyはロックサービスとして作られたが、ネームサーバとして最もよく使われる。 数千規模の互いに依存するプロセスがあり、プロセスが落ちたら新しいプロセスに置き換えるとする。 このとき、ネームサーバにDNSをつかうと、DNSは時間で失効するキャッシュ方式なので、TTLを短くし、落ちたプロセスにリクエストが届かないようにすると、DNSへの負荷が増える。 一方、Chubbyのキャッシュは時間ではなくファイルに変更されたときに無効になるので、Chubbyをネームサーバに使うことで、名前解決の負荷を減らすことができる。

Chubbyは大きく、クライアントが使うライブラリとサーバー側にあたるreplicasからなる。 replicaは基本5つのサーバから構成され、分散含意プロトコルでその中からmasterを選出する。 masterが落ちたらreplicasは分散含意プロトコルで新しいmasterを選出する。 masterの選出は数秒しかかからない。 replicaは単純なデータベースのコピーを管理し、masterのみが読み書きできる。 master以外のreplicaは分散含意プロトコルでmasterによる更新を複製する。 クライアントは、DNSにあるreplicasにリクエストを送りmasterを探す。 masterでないreplicasはmasterのIDをクライアントに返し、その後クライアントはmasterのみにリクエストを送る。

論文をこちらからダウンロードできます。