6リージョン

同時75万接続の


メッセージ配信基盤を

3日で考えた話
CM re:Growth

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

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

 代表取締役 兼 

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

#

AWS SDK

classmethod.j...
月曜日

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

 メッセージ配信基盤を作れる?」#
– 私「いつ使うんですか?」#
– 顧客「来週、使いたい」#
– ざわざわ#
– 私「やらせていただきます」#
– 社員「・・・・し...
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
classmet...
火曜日

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

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

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

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

15
classmethod.jp
課題発生(しそう)
• 季節によってインスタンス数の確保問題#
• 突発的なアクセスへのリミット制限#
• ネットワークキャパシティ#
• 障害発生時のフェイルオーバー待ち#
• AZ障害時に片方に処理が集中して全部落ち?#
• プッシュ配信安...
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台のE...
金曜日

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

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。ご対
応頂きましてありがとうございました。...
リアルタイムのログ
• 番組中に把握#
•

(秒間数万の投票受付システムは別の機会に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-wes...
月曜日

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様大変お世話
になりました。ありが...
Developers.IO MeetUp 01 Massive Messaging Platform Deployment in a Week.
Upcoming SlideShare
Loading in...5
×

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

5,782

Published on

Published in: Technology

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

  1. 1. 6リージョン
 同時75万接続の
 メッセージ配信基盤を
 3日で考えた話 CM re:Growth
 Developers.IO Meetup 01 横田聡 (@sato_shi) 2013/12/10 1 classmethod.jp
  2. 2. 自己紹介 • 氏名 : 横田聡(よこたさとし)# • ポジション : 
  代表取締役 兼 
  自称ソリューションアーキテクト# • 得意分野 : 営業トーク# • 好きなAWSサービス 
 # AWS SDK classmethod.jp
  3. 3. 月曜日 3 classmethod.jp
  4. 4. 案件概要 • ある月の月曜日# – 顧客「同時に60万人ぐらい参加する、
  メッセージ配信基盤を作れる?」# – 私「いつ使うんですか?」# – 顧客「来週、使いたい」# – ざわざわ# – 私「やらせていただきます」# – 社員「・・・・しゃ、しゃちょぅ」 4 classmethod.jp
  5. 5. 1台で60万プッシュ" できればいいよね? Client Mobile Client 5 classmethod.jp
  6. 6. 100台で60万プッシュ" できればいいよね? Mobile Client 6 classmethod.jp ・・ ・ Client
  7. 7. 1000台使えば" 余裕じゃん? Client Mobile Client 7 classmethod.jp
  8. 8. MutiAZで可用性確保? Az-1 Client Az-2 Mobile Client 8 classmethod.jp
  9. 9. 俺いけてるかもw 9
  10. 10. これで行こう!(かな) • 上限緩和申請# • 暖機申請# • ゴールデンAMI作成# • HTML5 + Socket.IO(ナウい)# • Node + Redis (ヤング)# • 札束を積んで1000台横に並べる 10 classmethod.jp
  11. 11. 火曜日 11 classmethod.jp
  12. 12. AWSチーム向けML # • 私「60万人にプッシュするインフラを
 設計したんだけど、だれかやらない?」# • 社員「いつまで?」# • 私「今週でしょ!・・・」# • 社員「何いっているかよくわからないw」 12 classmethod.jp
  13. 13. 水曜日 13 classmethod.jp
  14. 14. 社内から救世主参上!! • 大瀧「この仕組みじゃダメっすよ」# • 私「え・・・・」# • 大瀧「これがダメ1」# • 大瀧「これがダメ2」# • 大瀧「これがダメ3」# • 大瀧「これがダメ4」# • 私「お、おれも頑張るっ!!」 14 classmethod.jp
  15. 15. 木曜日 15 classmethod.jp
  16. 16. 課題発生(しそう) • 季節によってインスタンス数の確保問題# • 突発的なアクセスへのリミット制限# • ネットワークキャパシティ# • 障害発生時のフェイルオーバー待ち# • AZ障害時に片方に処理が集中して全部落ち?# • プッシュ配信安定する?# • 数百台サーバのログはどうする? 16 classmethod.jp
  17. 17. CFnのスタックロールバック • たくさんインスタンスを立てようとすると、 たまに失敗する。 17 classmethod.jp
  18. 18. CloudFront いじめすぎ • とりあえず、秒間60万アクセスすればいい んじゃないかな?www 18 classmethod.jp
  19. 19. 上限緩和申請の上限 • ELBのIPが1000個ぐらいあれば
 いけるんじゃ。。。 19 classmethod.jp
  20. 20. MultiAZで75万 • ギリギリのスペックでいけたとして、
 もし仮に片方のAZに障害が発生したら、# • ドミノ倒しが発生。。。 20
  21. 21. ElastiCacheのフェイルオーバー • 1つのメッセージも落としたくないから、 フェイルオーバー時に1秒しか待てな い。。。 21 classmethod.jp
  22. 22. 即座にプッシュ • でもユーザー体験を損ねたくないんだよね 22 classmethod.jp
  23. 23. DNSリゾルバキャッシュ • キャリアがIPをキャッシュしたら
 困るよね 23 classmethod.jp
  24. 24. プッシュ安定する? • 実際にやってみようーぜ!# • でも、Socket.IOのシミュレーションに JMeterだと同じ条件でできないよ?# • (Socket.IOとのハンドシェイクを行うプログラムを5000スレッド/台で
 150台のEC2を起動して安定性を検証) 24 classmethod.jp
  25. 25. 金曜日 25 classmethod.jp
  26. 26. ソリューション案 • CFnスタックは小分けにして# • ソースはUser-Dataを使ってS3から同期# • Route53で複数リージョンのELB分け# • Cross-Zoneロードバランシング# • Redisマルチマスターのdual配信# • 同じ環境を作って負荷試験 26 classmethod.jp
  27. 27. ジョナサン 27 classmethod.jp
  28. 28. 28 classmethod.jp
  29. 29. ファミレスをオフィス化する • • • • Macbook Air# Hyper Juice 2# Bose QuietComfort 20i# ScanSnap 29
  30. 30. 土曜日 30 classmethod.jp
  31. 31. 統合テスト • 動かない・・・俺たちはここまでか 31 classmethod.jp
  32. 32. 呼んだ? 32 classmethod.jp
  33. 33. 熊本から超絶アーキテクト参戦 • 私「熊本へコードを送る。」# • 有川「目視して修正コードを返す」# • 私「サーバで実行して出たエラーはこれ」# • 有川「エラー対応をする」x30回# • (彼はコードを1回も実行しませんでした…) 33
  34. 34. ログ • ログがほしい# • ログがほしい# • ログがほしい# • ログの統計がほしい# • ログの統計がほしい# • ログの統計がほしい 34
  35. 35. fluentd 35
  36. 36. Treasure Data 36
  37. 37. 負荷試験 " 8億レコードのログ • 少々複雑なHiveクエリーを投げる# • 35分で秒単位のアクセス集計# • (ここだけの話、その場でCTO太田さんに連絡してHiveの書き方を教えてもらったw。ご対 応頂きましてありがとうございました。この場を借りて厚く御礼を申し上げます。) 37
  38. 38. リアルタイムのログ • 番組中に把握# • (秒間数万の投票受付システムは別の機会にw。
 DynamoDBは神々のツールだよっ) 38
  39. 39. 日曜日 39 classmethod.jp
  40. 40. システム規模が決まる • お客様「6リージョン使おうか」# • 大瀧「かしこまりました」# • 横田「AWSのサイジングは最後でOK」 40 classmethod.jp
  41. 41. システム概要 バージニア 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. 42. 月曜日 42 classmethod.jp
  43. 43. 本番当日 • 23:30帰宅# # • 娘の寝顔を見ながら
 笑顔で眠ることができました。 43 classmethod.jp
  44. 44. 学び 1リージョンを1スタックとして、# 設計して構築すれば、# AWSのリージョンが増えるたびに、# 同時接続数を増やし続けることができる 44 classmethod.jp
  45. 45. まとめ • 来年はマルチリージョン推し! 45 classmethod.jp
  46. 46. 無茶ぶりに対応ありがとう! お仕事は突然に# でも# 計画的に 46 classmethod.jp
  47. 47. 最後に • TwitterやFacebookで感想を述べて頂けま すと、励みになります。# • Developers.IOブログを見た方はイイねを 押して頂けると嬉しいです。# • 会場をお貸しいただいたSAP様大変お世話 になりました。ありがとうございました。 47
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×