48
classmethod.jp 6リージョン 同時75接続の メッセージ配信基盤3日で考えたCM re:Growth Developers.IO Meetup 01 1 2013/12/10 横田聡 (@sato_shi)

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

  • Upload
    satoshi

  • View
    5.602

  • Download
    0

Embed Size (px)

Citation preview

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

classmethod.jp

6リージョン同時75万接続の

メッセージ配信基盤を3日で考えた話

CM re:Growth Developers.IO Meetup 01

�1

2013/12/10 横田聡 (@sato_shi)

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

classmethod.jp

自己紹介• 氏名 : 横田聡(よこたさとし)#• ポジション :  代表取締役 兼  自称ソリューションアーキテクト#

• 得意分野 : 営業トーク#• 好きなAWSサービス # AWS SDK

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

classmethod.jp

月曜日

�3

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

classmethod.jp

案件概要• ある月の月曜日#–顧客「同時に60万人ぐらい参加する、 メッセージ配信基盤を作れる?」#

–私「いつ使うんですか?」#–顧客「来週、使いたい」#–ざわざわ#–私「やらせていただきます」#–社員「・・・・しゃ、しゃちょぅ」

�4

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

classmethod.jp

1台で60万プッシュ"できればいいよね?

�5

Client

Mobile Client

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

classmethod.jp

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

�6

Client

Mobile Client

・・・

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

classmethod.jp

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

�7

Client

Mobile Client

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

classmethod.jp

MutiAZで可用性確保?

�8

Client

Mobile Client

Az-1

Az-2

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

俺いけてるかもw

�9

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

classmethod.jp

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

�10

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

classmethod.jp

火曜日

�11

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

classmethod.jp

AWSチーム向けML

#

• 私「60万人にプッシュするインフラを設計したんだけど、だれかやらない?」#

• 社員「いつまで?」#• 私「今週でしょ!・・・」#• 社員「何いっているかよくわからないw」

�12

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

classmethod.jp

水曜日

�13

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

classmethod.jp

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

�14

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

classmethod.jp

木曜日

�15

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

classmethod.jp

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

�16

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

classmethod.jp

CFnのスタックロールバック• たくさんインスタンスを立てようとすると、たまに失敗する。

�17

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

classmethod.jp

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

�18

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

classmethod.jp

上限緩和申請の上限• ELBのIPが1000個ぐらいあればいけるんじゃ。。。

�19

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

MultiAZで75万

• ギリギリのスペックでいけたとして、 もし仮に片方のAZに障害が発生したら、#

• ドミノ倒しが発生。。。

�20

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

classmethod.jp

ElastiCacheのフェイルオーバー

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

�21

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

classmethod.jp

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

�22

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

classmethod.jp

DNSリゾルバキャッシュ• キャリアがIPをキャッシュしたら困るよね

�23

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

classmethod.jp

プッシュ安定する?• 実際にやってみようーぜ!#• でも、Socket.IOのシミュレーションに

JMeterだと同じ条件でできないよ?#• (Socket.IOとのハンドシェイクを行うプログラムを5000スレッド/台で

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

�24

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

classmethod.jp

金曜日

�25

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

classmethod.jp

ソリューション案• CFnスタックは小分けにして#

• ソースはUser-Dataを使ってS3から同期#

• Route53で複数リージョンのELB分け#

• Cross-Zoneロードバランシング#

• Redisマルチマスターのdual配信#• 同じ環境を作って負荷試験

�26

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

classmethod.jp

ジョナサン

�27

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

classmethod.jp�28

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

ファミレスをオフィス化する

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

�29

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

classmethod.jp

土曜日

�30

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

classmethod.jp

統合テスト

�31

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

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

classmethod.jp

呼んだ?

�32

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

熊本から超絶アーキテクト参戦

• 私「熊本へコードを送る。」#• 有川「目視して修正コードを返す」#• 私「サーバで実行して出たエラーはこれ」#• 有川「エラー対応をする」x30回#• (彼はコードを1回も実行しませんでした…)

�33

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

ログ• ログがほしい#• ログがほしい#• ログがほしい#• ログの統計がほしい#• ログの統計がほしい#• ログの統計がほしい

�34

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

�35

fluentd

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

�36

Treasure Data

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

負荷試験 "8億レコードのログ

• 少々複雑なHiveクエリーを投げる#• 35分で秒単位のアクセス集計#• (ここだけの話、その場でCTO太田さんに連絡してHiveの書き方を教えてもらったw。ご対応頂きましてありがとうございました。この場を借りて厚く御礼を申し上げます。)

�37

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

リアルタイムのログ

• 番組中に把握#• (秒間数万の投票受付システムは別の機会にw。

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

�38

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

classmethod.jp

日曜日

�39

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

classmethod.jp

システム規模が決まる

• お客様「6リージョン使おうか」#• 大瀧「かしこまりました」#• 横田「AWSのサイジングは最後でOK」

�40

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

classmethod.jp

システム概要

Client

Mobile Client

×#750K

バージニア us-east-1

オレゴン us-west-2

東京 ap-northeast-1

カリフォルニア

us-west-1

アイルランド eu-west-1

シンガポール ap-southeast-1

Publish app #on EC2

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

classmethod.jp

月曜日

�42

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

classmethod.jp

本番当日

• 23:30帰宅##

• 娘の寝顔を見ながら笑顔で眠ることができました。

�43

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

classmethod.jp

学び

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

�44

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

classmethod.jp

まとめ

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

�45

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

classmethod.jp

無茶ぶりに対応ありがとう!

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

�46

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

最後に• TwitterやFacebookで感想を述べて頂けますと、励みになります。#

• Developers.IOブログを見た方はイイねを押して頂けると嬉しいです。#

• 会場をお貸しいただいたSAP様大変お世話になりました。ありがとうございました。

�47

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