これは難しい問題であり、多くの潜在的な解決策があります。考えられる解決策の 1 つは、Facebook が行ったことを調べることです。
TLDR - 読み取り要求は読み取り専用コピーにルーティングされますが、書き込みを行うと、次の 20 秒間、すべての読み取りが書き込み可能なマスターに送られます。
私たちが対処しなければならなかったもう 1 つの主な問題は、カリフォルニアにあるマスター データベースだけが書き込み操作を受け入れることができるということでした。この事実は、バージニア州からデータベースへの書き込みを行ったページを提供することを避ける必要があることを意味しました。これは、各ページが国を越えてカリフォルニア州のマスター データベースに到達する必要があるためです。幸いなことに、最も頻繁にアクセスされるページ (ホームページ、プロフィール、写真ページ) は、通常の操作では書き込みを行いません。この問題は、ユーザーがページを要求したときに、バージニアに送信しても「安全」か、カリフォルニアにルーティングする必要があるかをどのように判断するかという問題に要約されます。
この質問には、比較的簡単な答えがあることがわかりました。Facebook へのユーザー リクエストがヒットする最初のサーバーの 1 つは、ロード バランサーと呼ばれます。このマシンの主な役割は、リクエストを処理する Web サーバーを選択することですが、サービス拒否攻撃からの保護やユーザー接続の多重化など、他の多くの目的にも役立ちます。このロード バランサーには、レイヤー 7 モードで実行する機能があり、ユーザーが要求している URI を調べ、その情報に基づいてルーティングを決定できます。この機能により、ロード バランサーに「安全な」ページを簡単に伝えることができ、ページ名とユーザーの場所に基づいて、リクエストをバージニア州とカリフォルニア州のどちらに送信するかを決定できるようになりました。
ただし、この問題には別の問題があります。出身地を変更するために editprofile.php にアクセスするとします。このページは安全とマークされていないため、カリフォルニアにルーティングされ、変更を行います。次に、プロファイルを表示します。安全なページであるため、バージニアに送信されます。ただし、前述のレプリケーション ラグのため、行った変更が表示されない場合があります。このエクスペリエンスは、ユーザーにとって非常に混乱を招くだけでなく、二重投稿にもつながります。データベースに何かを書き込むたびに、ブラウザーに現在の時刻の Cookie を設定することで、この懸念を回避しました。ロード バランサーもその Cookie を探し、20 秒以内に何かを書き込んだことに気付いた場合、無条件にカリフォルニアに送信します。それから 20 秒が経過すると、