どうもこんにちは。これからの猛暑をいかに逃げるかを考えている わんこ。です。
今日はHAROiD内において、ある意味一番夏にピッタリのスリルを味わえるプロダクト LiVE CM で使われている裏側の技術を少しご紹介致します。
LiVE CM とは
- ユーザー参加型のリアルタイムCM
- TVとスマホを連携して新たなユーザー体験
- 60秒など、通常より長いCM枠を利用
- 02020の施策の一部
O2O2O とは
- OnAir to OnLine to OffLine の略称
- TV電波 → Web → コンビニ(実店舗) への誘導を目的としたプロダクト
- CMなどでのキャンペーンをTVで視聴し、特設サイトで参加すると実際の飲料やクーポンなどがもらえる
システム的特徴
- 放送開始時間に現れるアクセスの壁
- ミスできない放送期間(秒単位)
- 膨大な同時アクセス数
千手観音について
なんなのか?
千手観音とは上記のシステムに対し、実際の放送時の負荷をシミュレートする負荷試験ツールです。
HAROiDではLiVE CMのような超短期間、超高負荷が予想されるプロダクトが数多く存在しているので、そういったサーバー向けに実際の負荷を出来得る限り再現しリハーサルを行います。
AWS Lambda を利用した負荷シミュレートツール
- 60~90秒で落ち着くピーク
- 膨大な同時接続数
- 柔軟なJSONによるシナリオ設定
上記のような要件を満たす負荷試験用ツールを作ることになり、Lambdaの制限(300秒timeoutなど)をうまくメリットとして活かしての構築を考えてみました。
特徴
- Apex + golang で実装
- 1Client → 1Goroutine で素直に実行
- 1Clientごとにユーザーデータ空間を KeyValue で保持
- Loop や WaitなどのAction,CustomParserの設定
Lambda での実行
- 1Attacker(Function) あたり 200~400ユーザーのシミュレートが可能
- 前段にAttackerをキックするFunctionsを設置
- DynamoDBを使って子Attacker実行完了を検知
- ログなどは全てS3に保存
コスト
- 10,000(Client) / 350(Client) * 60(sec) * 10(10ms->1s) ≒ 180,000
- 1Function,100msごとに$0.000000208 ~ $0.000002501(2017/7現在
- おおよそ$0.03~$0.45におさまります。(Lambdaのみ
10万Clientのリハーサルが100円以内に収まりました。 良い世の中になったものですね。
実際に負荷試験やそういったテストを実行している場合
- シナリオの調整
- 攻撃ツールの設定
- アプリケーション側のチューニング
というのは想像以上に時間がかかるものです。
その間EC2などを使った攻撃ツールの場合起動しっぱなしにしておくか、こまめに停止したり色々気を使います。
その点Lambdaを利用すれば
- 本当に必要なとき
- 必要なことのために
- 適切なコストを払う
こういったことが可能になります。 一般的にLambdaは300秒までしか使えないから…っていう声をよく聞きますが、300秒で分解出来るタスクなら様々なことに使えそうですね。
まだまだLiVE CMを支える技術はたくさんありますのできっと誰かが続けて書いてくれるでしょう。
ということでHAROiDではこんなことやってるよー!っていうお知らせと古巣めぐりに大阪で少しお話させて頂きました。
Umeda.go + KUG2ではこの千手観音をベースにした発表をさせていただきました。
当日は知らなかったパッケージを教えて頂いたり他の攻撃ツールのいいとこを聞けたりと有意義な時間になりました。パッケージ探索力欲しいです。
なお、発表資料(公開用に少し修正)はこちらです。
また GameGatlingLTこちらでもLiVE CMについてお話させていただきました。
こちらもたくさんの業種の方がご登壇してくださり、様々な角度から一つのプロダクトへの関わり方が見えたりしてとても楽しかったです。
写真は大阪の革命「ヨドバシバシ」を渡りに行こうとしたけど、1Fから出てきてしまって悲しみにくれていた時のものです。