6リージョン

同時75万接続の


メッセージ配信基盤を

3日で考えた話
CM re:Growth

Developers.IO Meetup 01
横田聡 (@sato_shi)

2013/12/10
1
classmethod.jp
自己紹介
• 氏名 : 横田聡(よこたさとし)#
• ポジション : 

 代表取締役 兼 

 自称ソリューションアーキテクト#
• 得意分野 : 営業トーク#
• 好きなAWSサービス 

#

AWS SDK

classmethod.jp
月曜日

3
classmethod.jp
案件概要
• ある月の月曜日#
– 顧客「同時に60万人ぐらい参加する、

 メッセージ配信基盤を作れる?」#
– 私「いつ使うんですか?」#
– 顧客「来週、使いたい」#
– ざわざわ#
– 私「やらせていただきます」#
– 社員「・・・・しゃ、しゃちょぅ」
4
classmethod.jp
1台で60万プッシュ"
できればいいよね?
Client

Mobile
Client

5
classmethod.jp
100台で60万プッシュ"
できればいいよね?

Mobile
Client

6
classmethod.jp

・・

・

Client
1000台使えば"
余裕じゃん?
Client

Mobile
Client

7
classmethod.jp
MutiAZで可用性確保?
Az-1
Client

Az-2

Mobile
Client

8
classmethod.jp
俺いけてるかもw

9
これで行こう!(かな)
• 上限緩和申請#
• 暖機申請#
• ゴールデンAMI作成#
• HTML5 + Socket.IO(ナウい)#
• Node + Redis (ヤング)#
• 札束を積んで1000台横に並べる
10
classmethod.jp
火曜日

11
classmethod.jp
AWSチーム向けML
#

• 私「60万人にプッシュするインフラを

設計したんだけど、だれかやらない?」#
• 社員「いつまで?」#
• 私「今週でしょ!・・・」#
• 社員「何いっているかよくわからないw」
12
classmethod.jp
水曜日

13
classmethod.jp
社内から救世主参上!!
• 大瀧「この仕組みじゃダメっすよ」#
• 私「え・・・・」#
• 大瀧「これがダメ1」#
• 大瀧「これがダメ2」#
• 大瀧「これがダメ3」#
• 大瀧「これがダメ4」#
• 私「お、おれも頑張るっ!!」
14
classmethod.jp
木曜日

15
classmethod.jp
課題発生(しそう)
• 季節によってインスタンス数の確保問題#
• 突発的なアクセスへのリミット制限#
• ネットワークキャパシティ#
• 障害発生時のフェイルオーバー待ち#
• AZ障害時に片方に処理が集中して全部落ち?#
• プッシュ配信安定する?#
• 数百台サーバのログはどうする?
16
classmethod.jp
CFnのスタックロールバック
• たくさんインスタンスを立てようとすると、
たまに失敗する。

17
classmethod.jp
CloudFront いじめすぎ
• とりあえず、秒間60万アクセスすればいい
んじゃないかな?www

18
classmethod.jp
上限緩和申請の上限
• ELBのIPが1000個ぐらいあれば

いけるんじゃ。。。

19
classmethod.jp
MultiAZで75万
• ギリギリのスペックでいけたとして、

もし仮に片方のAZに障害が発生したら、#
• ドミノ倒しが発生。。。

20
ElastiCacheのフェイルオーバー
• 1つのメッセージも落としたくないから、
フェイルオーバー時に1秒しか待てな
い。。。

21
classmethod.jp
即座にプッシュ
• でもユーザー体験を損ねたくないんだよね

22
classmethod.jp
DNSリゾルバキャッシュ
• キャリアがIPをキャッシュしたら

困るよね

23
classmethod.jp
プッシュ安定する?
• 実際にやってみようーぜ!#
• でも、Socket.IOのシミュレーションに
JMeterだと同じ条件でできないよ?#
•

(Socket.IOとのハンドシェイクを行うプログラムを5000スレッド/台で

150台のEC2を起動して安定性を検証)

24
classmethod.jp
金曜日

25
classmethod.jp
ソリューション案
• CFnスタックは小分けにして#
• ソースはUser-Dataを使ってS3から同期#
• Route53で複数リージョンのELB分け#
• Cross-Zoneロードバランシング#
• Redisマルチマスターのdual配信#
• 同じ環境を作って負荷試験
26
classmethod.jp
ジョナサン

27
classmethod.jp
28
classmethod.jp
ファミレスをオフィス化する
•
•
•
•

Macbook Air#
Hyper Juice 2#
Bose QuietComfort 20i#
ScanSnap

29
土曜日

30
classmethod.jp
統合テスト

• 動かない・・・俺たちはここまでか

31
classmethod.jp
呼んだ?

32
classmethod.jp
熊本から超絶アーキテクト参戦
• 私「熊本へコードを送る。」#
• 有川「目視して修正コードを返す」#
• 私「サーバで実行して出たエラーはこれ」#
• 有川「エラー対応をする」x30回#
• (彼はコードを1回も実行しませんでした…)

33
ログ
• ログがほしい#
• ログがほしい#
• ログがほしい#
• ログの統計がほしい#
• ログの統計がほしい#
• ログの統計がほしい
34
fluentd

35
Treasure Data

36
負荷試験 "
8億レコードのログ
• 少々複雑なHiveクエリーを投げる#
• 35分で秒単位のアクセス集計#
•

(ここだけの話、その場でCTO太田さんに連絡してHiveの書き方を教えてもらったw。ご対
応頂きましてありがとうございました。この場を借りて厚く御礼を申し上げます。)

37
リアルタイムのログ
• 番組中に把握#
•

(秒間数万の投票受付システムは別の機会にw。

DynamoDBは神々のツールだよっ)

38
日曜日

39
classmethod.jp
システム規模が決まる
• お客様「6リージョン使おうか」#
• 大瀧「かしこまりました」#
• 横田「AWSのサイジングは最後でOK」

40
classmethod.jp
システム概要
バージニア
us-east-1
オレゴン
Client

us-west-2
東京
ap-northeast-1

Mobile
Client

カリフォルニア

×#
750K

アイルランド

us-west-1
eu-west-1
シンガポール

classmethod.jp

ap-southeast-1

Publish app #
on EC2
月曜日

42
classmethod.jp
本番当日
• 23:30帰宅#
#

• 娘の寝顔を見ながら

笑顔で眠ることができました。

43
classmethod.jp
学び
1リージョンを1スタックとして、#
設計して構築すれば、#
AWSのリージョンが増えるたびに、#
同時接続数を増やし続けることができる

44
classmethod.jp
まとめ

• 来年はマルチリージョン推し!

45
classmethod.jp
無茶ぶりに対応ありがとう!

お仕事は突然に#
でも#
計画的に

46
classmethod.jp
最後に
• TwitterやFacebookで感想を述べて頂けま
すと、励みになります。#
• Developers.IOブログを見た方はイイねを
押して頂けると嬉しいです。#
• 会場をお貸しいただいたSAP様大変お世話
になりました。ありがとうございました。
47
Developers.IO MeetUp 01 Massive Messaging Platform Deployment in a Week.

Developers.IO MeetUp 01 Massive Messaging Platform Deployment in a Week.