こんにちは、オークション事業部開発部の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!オークションをよろしくお願いします。
Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。