デブサミ2015ニコニコ生放送の配信基盤改善!Erlangを採用する意味とは?
event

デブサミ2015
ニコニコ生放送の配信基盤改善!Erlangを採用する意味とは?

2015.03.19

ent95_img01.jpg

2月19日(木)、20日(金)の2日間、翔泳社が主催するITエンジニアのお祭り「Developers Summit 2015」が開催された。昨年に引き続き会場となった目黒雅叙園には2000人を超えるエンジニアが参集し、ほとんどのセッションが満席となる盛況ぶりだった。筆者も19日の午後に参加していくつかのセッションを聴講したが、その中から非常に興味深かった、株式会社ドワンゴの谷内崇浩氏による「ニコニコ生放送の配信基盤改善」と題した講演の模様をレポートしたい。
鶴田 展之

■ ニコニコ生放送の配信基盤

ドワンゴが運営する動画コミュニケーションサービス「ニコニコ生放送」は、今年2月の段階で番組数が6000を超え、例えば2014年衆院選の際にはのべ220万人が試聴するなど、国内最大規模のライブストリーミング配信サービスである。スマートフォンやタブレットが普及し、LTEやWiMAX2+等高速な通信環境も整った現在、我々はどこにいても動画の試聴・配信を自由に行えるようになった。しかし、「動画」「ライブストリーミング」という「重い」サービスをユーザにストレスなく提供するためには、運営するエンジニアには並々ならぬ苦労や技術的な工夫があるはずである。しかし、谷内氏によると、現在のニコニコ生放送の配信基盤は意外とシンプルに構成されているようだ。

ent95_img03.jpg

まず、生放送の配信者、いわゆる「生主」から送信されるライブ映像は、「Origin Server」と呼ばれるサーバが受け取る。視聴者への配信は並列化されたエッジサーバが行うが、多数の視聴者が同時におしかけるような大規模配信に関しては、CDNを利用することで高負荷を回避している。また、配信システムも、ニコニコ生放送独自に開発したものではなく、既存のサーバ製品を購入して利用しているそうだ。国内の動画コミュニケーションサービスではトップを快走するニコニコブランドだが、今後ライバルとの競争が激化していく中で勝ち残るために、「現在の運用は健全だろうか」と谷内氏は疑問を投げかける。
例えば、ニコニコ生放送は、2014年3月の台湾学生による立法院占拠の際、527時間に渡って生中継を行った。実に22日間、生放送が継続されたわけだ。このような長期の配信が行われた場合、現在の配信基盤では、その間メンテナンスができないという問題が発生する。視聴者が増えた場合のリソースの割り当ても、現在はインフラ担当者の「職人芸」に頼っている。そもそも、「買ってきたサーバ」では独自のプロトコルの追加やチューニングが困難であり、他社に対して優位性のあるサービスを作り出していくことができない。
谷内氏は、「高い耐障害性」「負荷に応じて自動的にスケールする仕組み」といった、配信サービスとして基本的な部分の強化・改善はもちろん、配信状況に左右されずに機能を追加できる柔軟性や、配信品質を向上するための高度なプロトコルの実装も視野に入れた、配信基盤の改善を計画することになった。

■ Erlangを採用

その開発の軸となる「言語」として、選考の対象になったのが「Erlang」である。多くのエンジニアにとって、あまり聞き覚えが無いであろうErlangという言語だが、歴史は古く誕生は1986年である。日本でも携帯電話等でよく知られるスウェーデンの通信機器メーカー「エリクソン」によって開発され、1998年にはオープンソース化された。
Erlangの特徴は、簡潔に言えば「並列化」「分散化」を志向する言語である、ということだ。まず、Erlangの「プロセス」(これはOSのプロセスとは別の用語で、Erlangの処理単位を指す)自体が非常に軽量で、システムの性能を犠牲にすることなく、「オブジェクト志向言語のインスタンスを生成するのと同じように(谷内氏)」気軽に、プロセスを生成できる。また、生成したプロセス内にはエラー処理を書かず、「問題が起きたら停止する」でいいという簡潔さもメリットである。Erlangでは、プロセスが落ちても監視プロセスが復帰処理を行うので、「自分で頑張らなくていい」のだという。軽量なプロセス同士は、「アクターモデル」と呼ばれるプロセス間通信により、互いに連携できる。機能ごとに小さなプロセスを作れば、実装を簡潔に保ち、問題が発生しても影響範囲を限定できるというメリットがある。さらに、Erlangの「ホットコードスワップ」機能を利用することで、動作中のプログラムを無停止で更新できる点も、配信基盤の改善要求に合致した。

■ Erlangの性能を検証

問題は、Erlangで実装した場合に期待する性能が実現できるのか、である。そこで、ドワンゴ社内では、特定のAPIをScalaとErlangで実装し、性能の比較を行った。結論から言うと、Erlangによる実装は、応答時間で144%、同時接続数で68%と、Scalaによる実装を上回ることができなかった。しかし、谷内氏は「差は2倍未満。HiPE(High Performance Erlang)を利用して高速化すれば、運用次第で使える」と判断して、Erlangの採用に踏み切った。

■ 配信基盤の開発状況

Erlangによる配信基盤の改善はすでに進んでいる。スマートフォン向けのHLSサーバは2013年からErlangを採用し、安定稼働とシンプルな運用を両立している。当然、次のミッションはPC向けの配信基盤ということになるのだが、そこには大きな問題があるという。人気番組がひとつの番組で多数のサーバを使う一方、通常番組はひとつのサーバに多数の番組を詰め込んで配信する必要があるという、配信される番組ごとの大幅な特性の違いである。他にも、ドワンゴ社内で「突入」と呼ばれる現象、つまり番組開始時点に一気に視聴者が雪崩れ込むという問題や、配信が通信の状況によって途切れる「ptpt(プツプツ)」への耐性確保など、解決しなければならない課題はまだ多く残されているようだ。

ent95_img04.jpg

ただ、「道筋は見えている」と谷内氏は言う。Erlangと親和性の高いコンシステントハッシュを用いたノードの追加ロジックや、中継開始を高速化する独自プロトコルの新規開発、クライアントの状態を監視してネットワーク帯域を管理する仕組みなど、構築中の新しい配信基盤には、より快適な試聴・配信を実現するための工夫を多数凝らしているという。筆者も、近い将来ニコニコ生放送の試聴や配信がもっと快適になることを、Erlangの勉強でもしながら期待して待とうと思う。

原稿:鶴田 展之
qnote代表取締役。オープンソースソフトウェアを用いたシステムインテグレーション及びコンサルティングの傍ら、技術書を中心に多数の著述活動を行う。
なお、オフィスには7匹の猫がいる。

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW