サイバーエージェントを支える技術者たち

第66回リアルタイムメッセージ共有を実現する社内SaaS基盤

サイバーエージェントでは現在、ソーシャルゲームなどで利用するリアルタイムメッセージ共有のための基盤を独自に開発しています。その開発のきっかけや目的などについて、担当エンジニアのマリオ・フレイタス氏写真1と西尾亮太氏写真2にお話を伺いました。

独自のリアルタイムメッセージ基盤をSaaSとして開発

─⁠─今回、リアルタイムメッセージ基盤を開発することになった経緯を教えてください。
写真1 マリオ・フレイタス氏
写真1 マリオ・フレイタス氏

マリオ:きっかけは、私が社内のエンジニア向けイベントで、リアルタイムメッセージ基盤のしくみが必要ではないかと発表したことです。昨今、App Storeのアプリランキングを見ていると、複数人のユーザでリアルタイムにプレイするマルチプレイのゲームが人気です。来年はさらにブームが加速するのではないかと考え、それを開発するための基盤として提案したところ、社内の人から「これは今のAmebaにとってまさに重要なものだ」と評価され、実際に開発を進めることになりました。

─⁠─同様のしくみを実現している基盤はすでにいくつかあると思いますが、独自に開発することを決めた理由は何でしょうか。

マリオ:確かに既存のものもありますが、いくつかの観点から我々の要件には合いませんでした。具体的には、カスタマイズ性やスケーラビリティなどの部分です。また、もともとの目的として単にライブラリとして開発するだけでなく、社内で「Software as a Service」として提供することを考えていたんです。そのような提供形態であれば、開発コストの低減につながるほか、障害時の対応も一貫して行うことができます。それに加えて、エンジニアとして開発したいという思いもありましたね(笑⁠⁠。

─⁠─西尾さんは最初からプロジェクトに参加していたのですか。

西尾:いえ、私はマリオが企画を煮詰めて開発に取りかかったあと、人が足りないということで参加しました。もともとAmebaのデカグラフのエンジニアリーダーをしており、永続化のしくみやそれに関連するプロトコルの仕様、大量のトラフィックをさばくテクニックなどに強みがあったので、それを活かしつつマリオと協力してできないかということで開発に携わることになりました。

─⁠─このしくみを聞いたとき、西尾さんはどのような印象を持たれたのでしょうか。

西尾:先ほどマリオが話したように、複数ユーザでの協力プレイやマルチプレイはユーザに受けていて、実際にそれらのしくみを持つゲームは爆発的にヒットしているという現実があります。その意味で、このプロダクトは今まさに必要なものであり、これを作ることの意義は大きいと感じました。それから、サイバーエージェントとして今提供されているサービスよりももっと高い品質のものを開発する必要がある点で、非常におもしろい挑戦だという印象でした。

スケーラビリティを確保し、オートスケールにも対応

─⁠─具体的に、このシステムが提供している機能を教えてください。

マリオ:すごく簡単にいえば、LINEやWhatsApp Messengerなどのチャットアプリで使われているバックエンドのシステムをイメージしてもらうとわかりやすいと思います。実際の形としては、ユーザを束ねる「ルーム」という論理的な概念があり、そのルームに対してメッセージを発信すると、それがルーム内のユーザ全員にパブリッシュされるしくみです。要はリアルタイム通信自体を抽象化し、グルーピングしたユーザに同時にメッセージを配信するような形です。

─⁠─なるほど。そのメッセージというのはいわゆるチャットのような自然言語だけではなく、さまざまな情報のやりとりが可能だというわけですね。

西尾:そうです。たとえば位置情報を共有したり、ゲームであればあるプレイヤーの攻撃に関する情報などを共有したりするという用途にも利用できます。

─⁠─開発では、どのような点で苦労されていますか。

マリオ:いろいろなサービスがこのしくみを使うので、スケーラビリティを確保しなければならない点です。たとえばサーバの増大が必要になったとき、別のサービスに影響が生じるのは避けなければなりません。また、負荷が上昇すれば自動的にオートスケールするようなしくみも盛り込んでいます。

通信方式やメッセージ形式を多数のオプションから選択可能

─⁠─サービスの開発者がこのしくみを利用する際、どういったカスタマイズが可能なのでしょうか。

マリオ:通信方法をいくつか選択できるようにしています。具体的には、WebSocketやネイティブで動作するSocketでのアクセス、MQTT(MQ Telemetry Transport)といった選択肢があり、開発者が使い勝手のよいものを選べるようにしました。データフォーマットも複数対応しており、JSONやMessagePack、Protocol Buffersといったフォーマットを選べるほか、追加することもできます。

─⁠─柔軟性の高いシステムになっているわけですね。
写真2 西尾亮太氏
写真2 西尾亮太氏

西尾:やっぱり、外部のサービスだとメッセージフォーマット自体がそもそも限定されていることが多く、実際問題としてそれがレスポンスに影響することもあります。わかりやすい例では、メッセージフォーマットとしてXMLが使われていると、それを何らかの形でパースする必要があり、想定したパフォーマンスが得られないことも考えられるわけです。接続クラウドについても、ネイティブアプリだけを対象とするのではなく、Webブラウザでも同様にリアルタイム通信を行いたいというニーズがあります。しかし外部のサービスを利用すると、Webブラウザではこの機能が使えない、ネイティブアプリではこれができないといった制限が生じることが珍しくないでしょう。そのような制約の排除が、今回の開発でとくに意識した部分です図1⁠。

図1 リアルタイムメッセージ基盤の構成図。メッセージ配信を行うノードをクラスタ化するだけでなく、ノードを管理するノードマネージャもクラスタ化することで信頼性を高めた
図1 リアルタイムメッセージ基盤の構成図。メッセージ配信を行うノードをクラスタ化するだけでなく、ノードを管理するノードマネージャもクラスタ化することで信頼性を高めた
─⁠─SaaSとして社内向けに提供するということですが、難しさはありますか。

マリオ:難しいですね。ある程度サービスとして標準化しつつ、どこまでユーザの要望に応えるのかは悩むところです。

西尾:我々がコミットしているのは、マリオが提案し、それについて会社が必要だと考えている機能についてなので、それから逸脱しているものは対応しないという方針です。ただ我々もニーズをすべて把握しているわけではないので、いろんな意見を聞きながら判断し、妥当性があれば取り込むという判断をそのつどしています。

マリオ:我々が提供するのはあくまで汎用的なものであり、プロダクト固有で必要となるものは各自で開発してくださいというスタンスですね。

西尾:パッケージを開発しているみたいな感じですかね。要望は聞きますが、その要望に対して本当に必要かを我々が裏で判断し、その結論によって実装するかもしれないし、しないかもしれないという。多分全部の要望にコミットするとたいへんなことになってしまうので。

2015年3月を目標にオープンソースとして公開

─⁠─現状のしあがり具合は何%程度でしょうか。

西尾:どこを100%にするかにもよりますが(笑⁠⁠。

マリオ:実は2015年3月にはこのプロダクトをオープンソースとして公開したいと考えているんです。それに合わせて、100%にしあげていくイメージです。現状でいえば、50%ぐらいですかね。

─⁠─オープンソースにする理由は何でしょうか。

マリオ:大きな目的は、Amebaの技術力をみなさんに知ってもらいたいということです。

西尾:それと、オープンソースにするという前提にすると、システムってすごい⁠締まる⁠んですね。社内用であればある意味ズルもできるというか、このレベルでいいだろうという甘えがどうしても出てきてしまう。あと、社内システムはこうなっているからこのレスポンスはそこまで追求しなくてもいいとか。なので最終的にオープンソース化してみんなに見てもらい、使ってもらうことで、本当に我々の考えているシステムに近づくのだろうなと。そういった点もオープンソース化のメリットだと思っています。

─⁠─実際に、このシステムを使ったサービスの開発は始まっているのでしょうか。

マリオ:まず12月にマルチプレイ型のソーシャルゲームで利用されることが決まっています。リアルタイム性が重要なポイントになっているゲームで、同時にプレイする3?4人でゲーム状態を共有します。このような共闘系のゲームのほか、コミュニケーションサービスで利用することも検討されています。

西尾:いずれにしても、3月頃を目処にオープンソースで公開するので、興味があればぜひ使っていただきたいですね。

写真3 開発中のリアルタイムメッセージ共有システムについて語るマリオ氏と西尾氏
写真3 開発中のリアルタイムメッセージ共有システムについて語るマリオ氏と西尾氏

おすすめ記事

記事・ニュース一覧