松本克彦 ピグにおけるリアルタイムランキングの導入

21
ピグにおける リアルタイムラインキングの導入 CyberAgent アメーバ事業本部 ピグディブジョン サービスディベロップメントグループ 松本克彦

Upload: matsumotokatsuhiko

Post on 30-Jun-2015

5.019 views

Category:

Documents


1 download

DESCRIPTION

real time ranking system

TRANSCRIPT

ピグにおけるリアルタイムラインキングの導入

CyberAgentアメーバ事業本部ピグディブジョン

サービスディベロップメントグループ松本克彦

背景

ピグでリアルタイムランキングを導入する案が持ち上がった。

• ユーザのサービスモチベーション向上• 継続率向上• コミュニティ活性化

実際に2010年12月~2011年4月にわたって技術調査、開発を行い、サービスに投入された

実現条件

(負荷)

• ・リアルタイムランキングであること• ・ピグの高負荷に耐えうること

→秒間 2000req/secの更新と参照100万レコード規模のランキングが20前後稼動できる性能を想定。

実現条件

(汎用性)

• 同時複数のランキングが稼動できる• 容易にランキングを追加削除できる• デイリー・月間などの集計もできる• 容易にスケールできること

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

ハードウェアアーキテクチャ

サーバスペック

• Webサーバ(4台)機種 :R310CPU :Quad Core(x3430) 2.4GHzメモリ:8GBHDD :250GB * 2 SATAIICentOS release 5.4Apache Tomcat/6.0.20

• DB(マスタ2台、スレーブ4台)機種 :R410CPU :Octal Core(L5520) 2.26GHzメモリ:8GB(Slaveは16GB)HDD :3.5inch SAS 146GB * 4(RAID10)CentOS release 5.4MySQL 5.1

ランキングアルゴリズム

• RDBを使用し、ランキングレコード全体から順位を計算せずに、ランキングレコードをいくつかのパーティションにわけて計算。

(例)

自分より上のパーティションの人数(count数)+同一パーティション内で順位を計算

※アメーバ他サービスでも採用しているアルゴリズム

O/RマッピングにMyBatis3

• 設定ファイルでテーブル名を動的変数にしてO/Rマッピングできる。複数テーブルアクセスで流用すService/Daoを一つ用意するだけで済む。

ランキングの追加、DBの追加

• ランキングクライアントデータベースごとのテーブル情報を持つ

→テーブル追加のときのみ修正

(WAPを修正する必要が無い)

• WAP接続先DBサーバ情報を持つ

→DBサーバ増設の時のみ修正

性能検証

3600 request/sec順位範囲取得

3200 request/sec順位取得

5500 reqeust/sec更新

データ更新、自分の順位取得、順位の範囲取得を同時に実行したときの性能

現状

ピグで各担当エンジニアによりランキングAPIを使用したサービスが実装されている。

・カジノ

・釣り

・イベント機能

負荷状況

10~20万人参加のイベント(釣り、カジノ)ランキング1~2本

ピグイベントランキング(年代別系、月間、週間)6本

→合計でピーク時で約200~300req/secまだ余裕あり

※イベント参加者のみのランキング

※全員無条件参加のランキングは打っていない

今後

• ピグの新ゲームでも採用予定

謝辞

• 過去の研究レポートからインスパイア↓

• 容易に実現できる手段として再構築↓

• サービス投入↓

• (今後)類似システムとして参考

ご協力いただいた皆様ありがとうございました。