大規模SNSのボトルネックとソリューション大規模サイトの舞台裏(4/4 ページ)

» 2008年08月29日 08時00分 公開
[藤本真樹,ITmedia]
前のページへ 1|2|3|4       

イベントキュー処理システム

 イベントキュー処理システムは、Webサーバとは別のサーバで動作し、随時次のような処理を行っています。

  1. イベントキューを監視する
  2. キューにデータが存在していたら、operationフィールドの値に従って適切なイベントキューハンドラを呼び出す
  3. イベントキューハンドラがそれぞれ処理を行う

 また、実際にGREEで動作しているコードは、

  1. イベントキュープロセッサにイベントリスナーオブジェクトを追加(リスト4)
  2. イベントキューを引数としてイベントキュープロセッサを実行(リスト5)

となっています。

$qp = &new QueueProcessor();

// 友達の新着blog用イベントリスナーオブジェクト

$lsnr = &new Blog_ActionEventListener_RecentFriendEntry($log, $rm, $num_recent_entries_to_fill);

$qp->addListener($lsnr);


リスト4 イベントキュープロセッサにイベントリスナーオブジェクトを追加

$dbq = &new Gree_Queue_DB_BlogEvent($queue_conn, $json, $blog_uri_str);

$err = $qp->process($dbq);


リスト5 イベントキューを引数としてイベントキュープロセッサを実行

 これによって、イベントキューのoperationフィールドに対応する、イベントリスナーオブジェクトのメソッドが呼び出されます。ここで、日記を更新したユーザーの友達全員の新着日記データを更新して回ります(リスト6)

function blogEntryAdded($primary_author_uri_str, $entry_uri_str, $params) {

                :

                :

}


リスト6 新着日記リストにエントリを追加するメソッド

 このように、非同期に新着情報やそのほかのデータを追加、更新する機構を準備することで、友達の新着情報を単純なクエリで取得できるようになります。このほかにも、

  • 先頭数件をキャッシュデータとして保持しておけば、ホーム画面表示時のデータベース負荷を削減できる
  • アクセス許可設定変更時にインデックスを更新できる

といった効果があり、幾つかのボトルネックを解消できています。

おわりに

 本稿では、SNS特有のボトルネックとそのソリューションについて、可能な限り具体的に解説しました。本稿が何かの参考になれば幸いです。

 本稿をお読みになった方の中には、「何の得にもならなそうなのに、なぜこんな技術情報を公開するのだろう」と思われる方も、もしかするといらっしゃるかもしれません。

 こういった情報を公開するモチベーションの1つとして、こういった情報が大げさではありますが「インターネットサービス全体の成長に一役買えれば」という思いがあります。

 本稿で紹介したような情報は、ほかの皆さんが公開されているオープンソースソフトウェアや技術情報なしには成り立ちませんし、現在のインターネットサービスの発展は、安価なハードウェアやオープンソースソフトウェア、そしてそれを利用するためのさまざまな(無償で、あるいは安価に提供される)解説なしには成り立ち得ませんでした。

 ここに記したものが、最良であるとはまったく思っていませんし、改善の余地は大いにあると思います。ですので、本稿がきっかけになってさらに良いノウハウが得られ、それをベースにさらに良いものを……、という循環の一助となればと思います。

 それと、最後に宣伝です:)。GREEでは、こういった問題をさらにエレガントに解決したい方、さらなる未知の問題に対して知恵を絞って挑戦していきたい方、そしてそういった問題を新たに生み出す新しいサービスを一緒に作っていくエンジニアの方を募集しています。ご興味のある方はぜひぜひ、わたしにメール*をいただければと思います。

このページで出てきた専門用語

わたしにメール

fujimoto at gree.co.jp(atの部分は@に置き換えてください)。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ