こんにちは、オークション事業部開発部のLiuです。
今回は「ヤフオク」のサービスを支えているオークションシステムについて、 以下3つのテーマに分けて簡単に紹介します。
- システム構成
- データの同期処理
- データ構造
1. システム構成
以前の記事Yahoo!オークションからのご挨拶にも書かれてあるように、ヤフオクは Yahoo! JAPANの中でも最大級のサービスです。これだけ大きな規模のシステム を支えているのが、およそ数千台のFreeBSDサーバーになります。この数千台のサーバーは、 基本的に機能毎に分かれていて、独立性をたもちながら互いに連携し合い、結果的に 一つの大きなオークションシステムを構成しています。
ヤフオクは、お客様向けに有料サービスを提供するので、障害発生からの復旧や アクセスの増加に備えて、可用性と拡張性を十分に考慮しています。
このサーバーの単位を以後機能サーバーと呼びます。 いくつか機能サーバーの例をあげますと
- マスタ
- 商品リスト
- 検索
- 画像
- マイ・オークション
などがあります(もちろん全てではありません)。 中でも一番重要なのは「マスタ」です。このサーバーは出品、入札など主要な 処理を行います。
オークションは競りの性質上、現在価格や入札数などがリアルタイムに変動しています。 ですので、いかにタイムラグを最小限に抑えるかを、システム構成面で非常に苦労しています。 ちなみに、この機能要件を満たすために、オークションシステムでは画像など一部の静的な コンテンツを表示する以外、キャッシュサーバーの仕組みは使っていません。
では、どうやってデータの同期処理を行っているのか、疑問を持っている方もいるかと 思いますので、次に簡単に紹介したいと思います。
2. データの同期処理
ヤフー独自の技術には、非常に効率のよいサーバー間のデータ通信プロトコルがあります。 この技術を使い、1:N, N:1, N:N のサーバー間データ通信を容易に行うことができます。 更新トランザクションが発生した時に、イベント毎にデータを生成しネットワークに流す のですが、そのデータの伝播経路上、データに対し特定なフィルタリング条件をかけ、 必要なデータだけを下流のサーバーにフィードすることも可能です。これにより、 ネットワーク上無駄なトラフィックを発生せず、また受け側サーバーで無駄なデータ処理 をしなくて済むため、高速なデータ同期処理が可能になります。
オークションシステムはこの技術をよく使用しています。トランザクション発生元の マスタから、データ中継サーバーを経由し、末端の機能サーバー(検索など)までに データの同期処理を実現しています。ちょうど、ウォーターフォールに近いイメージ になるでしょうか。
しかし、データ伝播の経路が長すぎたり、フィルタリング条件を設定せずに必要としない データまで流してしまったりすると、データ反映の遅延問題が発生しやすくなります。 そうならないように、システム設計の段階でよくシステム構成を検討しなければなら なりませんし、リリース後の日々のシステム監視やチューニングも当然欠かせずに行って います。
3. データ構造
オークションシステムの中で実にいろんなデータ構造があります。よく使うものには
- ハッシュファイル
- オンメモリデータ
- RDBM(MySQL, Oracleなど)
などの種類があります。 ハッシュファイルは構造がシンプルで、データが拡張・メンテナンスしやすいなどのメリット があり、オークションのマスタでも使っています。しかし出品数が膨大なので、ハッシュファイル の数も膨大になります。当然分散処理をしなければなりません。
また、ハッシュファイルは書き込みには問題がなくても、リストや検索結果表示など、頻度 の高い読み込み処理では、ディスクI/Oがネックになりやすいので、この場合にはオンメモリ のデータ構造を使っています。オンメモリデータは非常に高速にアクセスすることができ ますが、マッピングできるサイズに限界があるために大きなデータを分割して分散処理を しています。
RDBMについては、特にB2CのサブシステムやDM(データマイニング)など、大量データ の履歴管理や集計分析が必要なシステムでよく使っています。
まとめ
今回はオークションシステムについて、3つのテーマに絞って簡単に紹介させていただきました。 説明が足りなくてよく分からないところもあるかと思いますが、今後は機会があればもうちょっと 詳細に紹介できればと思います。
今後とも、Yahoo!オークションをよろしくお願いします。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました