情報共有について、こんな悩みを聞いたことはないでしょうか。「あの人だけ古い情報を見ていて、話がかみ合わなかった」。これを防ごうとして、常に全員に即座に共有しようとすると、今度は共有作業そのものに疲れてしまいます。このページでは、「いつ全員が同じ理解になっていればよいか」を考え直します。
コンピュータの世界での結果整合性
複数の場所にデータのコピーを持つ分散システムでは、1箇所を書き換えた瞬間に、他のすべてのコピーを同時に書き換えるのは、実は簡単ではありません。書き換えを全箇所に伝える間、ほんの一瞬、コピーごとに内容がずれる時間が生まれます。
たとえば、ある商品の在庫数を、世界中の複数の拠点にコピーとして保存しているとします。東京の拠点で在庫が1つ売れて減った直後、大阪の拠点にあるコピーへその変化が届くまでには、わずかな時間がかかります。その一瞬の間、大阪から見ると在庫数はまだ更新前のままであり、正確には食い違っています。このわずかなずれをゼロにしようとすると、更新のたびに全拠点の返事を待つ必要があり、応答が目に見えて遅くなります。拠点の数が増えるほど、待つ相手も増え、遅さはさらに積み重なっていきます。
このずれを許し、代わりに「時間が経てば必ずそろう」ことを保証する考え方を、結果整合性と呼びます。結果整合性とは、更新した瞬間に全員が同じ状態になるのではなく、最終的には必ず同じ状態に収束する、という設計方針のことです。
常に全箇所を瞬時にそろえようとする設計もあります。これは強い整合性と呼ばれ、正確さは増しますが、応答が遅くなりやすいという代償を伴います。どちらが優れているという話ではなく、扱う情報の性質によって使い分けるものです。段階を追って整理すると、強い整合性は「全員の足並みをその場でそろえてから次に進む」やり方であり、結果整合性は「各自が動きながら、最終的にそろう」やり方です。分散システムの設計者は、その情報が「今すぐ全員一致していなければならないか」を見極め、必要な箇所だけに強い整合性を使い、それ以外は結果整合性で済ませます。
仕事の言葉に翻訳する
仕事における結果整合性とは、「関係者全員が、今この瞬間に完全に同じ情報を持っている必要はない」という考え方です。大事なのは、情報がいずれ必ず全員に届き、そろう仕組みがあることです。
多くの職場では、「情報格差はできる限りゼロに近づけるべきだ」という前提が、特に疑われることなく共有されています。この前提そのものは間違っていませんが、「ゼロに近づける」ことと、「常に瞬時にゼロにする」ことの間には、大きな差があります。瞬時にゼロを目指すコストと、多少の時間差を許すコストを比べてから、どちらを選ぶかを決める余地があります。この余地に気づかないままでいると、必要以上に自分たちを疲弊させることになります。
これは、情報共有をサボってよいという意味ではありません。むしろ逆です。「いつまでに、どうやって必ずそろうか」を決めておくことが前提になります。そろうタイミングを決めずに放置すれば、それはただの共有漏れです。結果整合性という言葉は、放置を正当化するための言い訳にはできません。
言い換えると、結果整合性は「締切と手段が決まった、意図的な時間差」のことです。締切も手段も決まっていない時間差は、単なる伝達漏れであり、まったく別の状態です。
さらに言えば、結果整合性を使うかどうかを決める前に、そもそも「その情報は誰にとって重要か」を考える必要があります。関係者全員に同じ精度で届ける必要がある情報もあれば、一部の人にだけ、多少遅れて届けば十分な情報もあります。すべての情報を同じ扱いにしようとすることが、疲弊の入り口です。
具体的な場面
1つめの場面は、部署をまたぐ方針変更の連絡です。決定事項を、全部署の全員に同時に口頭で伝えることは、現実にはできません。社内の掲示や共有文書に決定事項を書き、「今日中に全員が目を通す」という収束の締切を決めておけば、伝える順番に多少の前後があっても問題は起きません。これは、決定事項の結果整合性を設計している状態です。
具体的な手順にすると、次のようになります。方針を決めた担当者が、まず共有文書に決定事項を書き込みます。次に、各部署のリーダーへ「今日17時までに目を通してください」と一斉に連絡します。「誰が」「いつまでに」「どこを見て」そろうかが明確なら、伝える順番は問題になりません。
もし締切を決めずに「追って各部署に展開します」とだけ伝えたら、どうなるでしょうか。ある部署は当日中に把握し、別の部署は1週間後まで気づかない、という差が生まれます。その差の中で誰かが古い方針のまま動いてしまえば、後から手戻りが発生します。締切を1つ決めておくだけで、この手戻りのリスクは大きく下がります。決めるべきは複雑な仕組みではなく、たった1つの締切と、確認する手段だけです。
2つめの場面は、複数人で編集する資料です。同時に触っている資料の内容が、一時的に食い違うことがあります。食い違いが起きても、最終版を1つに定める手順と、定めるタイミングが決まっていれば、途中のずれは問題になりません。問題になるのは、最終的にそろえる手順がない場合です。
たとえば、「金曜17時の時点でファイルにある内容を最終版とし、以降の変更は月曜に回す」と決めておけば、金曜までの間にどれだけ内容が食い違っていても構いません。収束する時点さえ決まっていれば、途中経過のずれは許容できます。
この決め方をしていないチームでは、「誰の版が正しいのか分からない」という会話が、締切のたびに繰り返されます。収束する時点を先に1つ決めておくことは、その場しのぎの確認作業を、丸ごとなくす効果を持っています。
3つめの場面は、現場と本部の案件状況の共有です。現場の最新状況を、本部が常に秒単位で把握するのは現実的ではありません。1日1回、決まった時間に現場から報告を上げるという運用にすれば、その1日のずれは許容範囲として扱えます。どの業務にどれだけのずれを許せるかは、業務ごとに判断が必要です。
たとえば、「毎日18時までにその日の対応件数を共有シートに入力する」というルールを決めておけば、日中の細かい状況は本部からは見えなくても構いません。本部が知りたいのは、その日の終わりに全体としてどう動いたかだからです。知りたい情報の粒度に合わせて、共有の頻度を決めれば十分であり、常に最新の状況を追いかける必要はありません。
「結局は共有をサボる言い訳では」という反論
結果整合性という考え方を紹介すると、「それは結局、後回しにすることの言い訳にすぎないのではないか」という反論が出ることがあります。
この反論はもっともな面があります。実際、「そろえる手順」を決めないまま結果整合性という言葉だけを使うと、ただの先送りと見分けがつかなくなるからです。むしろ、都合の悪い共有を後回しにするための言い訳として、この言葉が使われてしまう場面さえ想像できます。結果整合性と単なる先送りを分けるのは、収束の締切と手段が決まっているかどうかです。締切と手段が決まっていれば結果整合性であり、決まっていなければ先送りです。
見分け方を1つ持っておくと便利です。「今そろっていない情報は、いつ、どうやってそろうことになっていますか」と自分に問いかけてみます。即答できなければ、それは結果整合性ではなく、単なる共有漏れの可能性が高いということです。
会話の場面で使うと、こうなります。部下が「その件は追ってお伝えします」とだけ言って報告を終えたとします。上司が「追ってとは、いつ、どんな形で」と一言添えて聞き返すだけで、あいまいな先送りが、締切と手段の決まった結果整合性に変わります。この一言があるかないかが、放置と設計の分かれ目になります。
落とし穴
結果整合性には、2つのよくある落とし穴があります。
1つめは、「そろえる」の締切や手順を決めないまま、「そのうち伝わるだろう」で済ませてしまうことです。結果整合性は、収束する仕組みがあって初めて成立します。仕組みのない放置は、単なる情報の欠落です。
これは、悪意があって起きるとは限りません。多くの場合、忙しさの中で「言ったつもり」「伝わったつもり」が積み重なって生まれます。誰か1人の注意力の問題ではなく、仕組みの不在として捉える方が、次の手を打ちやすくなります。だからこそ、締切と手段をあらかじめ決めておく仕組みが必要になります。
2つめは、本当は即座にそろっていなければならない情報にまで、結果整合性の考え方を当てはめてしまうことです。たとえば、価格の変更や、安全にかかわる連絡は、遅れが大きな損失につながる可能性があります。どの情報が即時性を必要とし、どの情報が多少のずれを許せるかを、最初に仕分けておく必要があります。仕分けを誤ると、結果整合性は便利な考え方ではなく、危険な言い訳に変わります。
仕分けの目安は、「そろっていない間に、誰かが誤った判断をして実害が出るか」です。実害が出る情報は強い整合性側、出ない情報は結果整合性側に置きます。迷ったときは、まず強い整合性側に寄せておき、様子を見ながら後から緩めるくらいで十分です。
たとえば、ある商品の販売価格を値下げすると決めたとします。店舗ごとに反映するタイミングがずれてしまうと、同じ商品が店舗によって違う価格で売られる事態になり、顧客からの信頼を損ないます。このような情報は、多少の手間をかけてでも、全店舗が同時にそろうよう扱う必要があります。一方、社内の座席表の更新のような情報は、半日ずれても実害はほとんどありません。同じ「情報共有」という言葉でも、扱いを変えるべき情報が混ざっていることに注意します。
ここまで4つのページで、単一障害点・冗長化とフェイルオーバー・負荷分散・結果整合性という4つの視点を見てきました。次のページでは、これらを1本の流れとしてつなぎ直し、章全体を振り返ります。
持ち帰り
- 結果整合性とは、今すぐ全員一致でなくても、最終的にそろえばよいという考え方
- そろえる締切と手順を決めて初めて、結果整合性は機能する
- 即時性が必要な情報と、ずれを許せる情報を、あらかじめ仕分けておく
やってみる
今使っている共有手段を1つ選び、「どのくらいのずれまでなら許せるか」を自分の中で決めてみてください。