体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

人類はインターネットでテレビができるのか?──大規模トラフィックを支えるAbemaTVの裏側とは

AbemaTVの負荷対策とは

10月21日に開催されたAbemaTVの取り組みや技術的知見を披露するイベント「AbemaTV Developer Conference 2017」。その最後のセッションに登壇したのが、サイバーエージェント技術本部のService Reliability Group(SRG)という横断的組織の岡田翔乃介さんだ。

岡田さんは2015年4月に新卒で同社に入社し、AmebaブログやOwnd、CROSS MEなどに携わった後、2016年12月よりAbemaTVのインフラエンジニアとして活躍している。セッションタイトルは「AbemaTVの裏側- 大規模トラフィックを支える技術と負荷対策の話」。その概要を紹介する。

AbemaTVのアーキテクチャーは膨大である。GKEについて知りたい方は、昨年のDEVELOPER CONFERENCE(DevCon)で話しているので、こちらも見てほしい。

また「Google Cloud Next ’17 in Tokyo」では、Googleの「世界規模のクラウドネットワークの負荷分散、最適化、セキュリティ確保」についての講演内で、AbemaTVのネットワークについても紹介されており、こちらはYouTubeで公開しているので、ぜひチェックしてほしいとのこと。

まずはAbemaTVの負荷試験について。昨年のDevConから今日まで、年末年始のイベントから始まり、「劇場版魔法少女まどか☆マギカ[新編]反逆の物語」、「亀田興毅に勝ったら1000万円」、「モンスターストライク 十二支再競争」、「第30期竜王戦決勝トーナメント」など、いくつものヒット企画や番組が誕生した。

喜ばしいことだが、インフラエンジニアからすると試練の連続だった。そんな試練を乗り越えるための対策の代表例が負荷試験である。負荷試験ではLocustとwrkという2種類のツールを使用している。

大規模な負荷試験にはLocustを採用

LocustとはPython製の分散型ユーザー負荷テストツール。特徴はgeventを使用した完全なイベントベース機構であること。

ちなみにgevent自体はコルーチンベースで、複数のtaskをこなす非同期IOライブラリである。Greenletという軽量型のコルーチンが実体で、OSプロセス内では実行されるが、協調的にスケジューリングされるというものだ。

なので、OSがスケジューリングして本当に並列に動くPOSIXスレッドを利用した並列機構とは、少々毛色が違う。

IO待ちになったらon_eventが発火し、別のタスク(シナリオ)が実行される。そのため、シナリオファイルを単独で実行していると、CPUが一コアだけしか使用されていないように見えるかもしれない。そうではなく、コアを十分に使用したい場合は、distributed mode機能を使用する。

AbemaTVでは、GKE上で大量のdistributed mode workerを配置してシナリオファイルを回し、high-throughputを実現している

Locustクラスタの詳細は次の通り。シナリオの用途別によりクラスタを切り分けている。


1 2 3 4次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。