ガールズちゃんねる
  • 3. ガールズちゃんねる管理人 2014/01/30(木) 09:17:05  ID:EiaQgLCED2 

    ※続きです

    ここでもう一つの問題が出てまいります。

    これまでの説明は、マスターのデータベースサーバ1台に限った場合の説明であり、全てのサーバについて説明したものではありません。

    ガールズちゃんねるのデータベースサーバは1台ではなく7台あり、それらは常に同じ内容になるように同期(コピー)されています(念のため全体像を明かしますと、ウェブサーバが30台、データベースサーバが7台、合計37台のサーバによって構成されています)。

    そして、データベースサーバ群は、具体的には下記の条件で動いています。

    ■7台のデータベースサーバは、マスター(原本・オリジナル)が1台、スレーブ(複製・コピー)が6台に分かれており、スレーブはマスターのデータベースを常にコピーしている。

    ■同期するたびにデータベースの中身すべてを丸ごとコピーするのは非効率すぎるため、差分(前回の同期とくらべて追加された箇所)だけをコピーしている。

    ■差分コピーは「最終コメント番号+1に、コメントを追加する」仕様になっている。たとえば、そのスレーブにコメント200番までのデータがあれば、200+1で、201番のコメントとして追加される。

    ■ユーザーがどのデータベースサーバにつながるかは接続するたびに違う。ただし、マスターの1台に直接つながることはなく、スレーブの6台のどれかにランダムでつながる。

    ■ユーザーがコメントを投稿する際には、スレーブを通して間接的にマスターにコメントを投稿することになるため、スレーブのデータが誤っているとそれがマスターに誤ったまま伝わってしまう。

    データベースの動作は以上のようになります。

    こうした条件下で動いているため、コメント206番が上書きされた際のスレーブサーバの動きは、次の【A】【B】のように2パターンに分かれました。

    【A】田中選手の画像を投稿したユーザーが接続していたスレーブサーバでは、(このスレーブサーバでは田中選手の画像が206番に投稿成功したことになっていたため)マスターサーバから差分データとして「206+1=207番に『文字のみのコメント』を追加しなさい」という指示を受けた。

    【B】それ以外の5台のスレーブサーバでは、(すぐに上書きされたせいで田中選手の画像が206番に投稿されたという事実をマスターサーバから受け取っていないため)マスターサーバから差分データとして「205+1=206番に『文字のみのコメント』を追加しなさい」という指示を受けた。

    そのため、【A】「コメント207番まで存在するスレーブサーバ(1台)」と、【B】「コメント206番までしか存在しないスレーブサーバ(5台)」が両方存在することになりました。

    そして、【A】「コメント207番まで存在するスレーブサーバ(1台)」のコメント数のほうが常に1つ多かったため、【B】「コメント206番までしか存在しないスレーブサーバ(5台)」から最新コメントを書き込むと、【A】の最新コメントを後から上書きしてしまうことになりました。【A】は1台、【B】は5台ありますので、1台のコメントを、他の5台のどれかが次々に上書きしてしまう、という状況です。

    これが原因で、6分の1の確率でコメントが上書きされる(消える)という現象が発生しました。

    +49

    -4