PR
連載 :
  インタビュー

CAのProFit-Xに見るリアクティブシステム事例

2017年2月2日(木)
松下 康之
リアクティブなSSPの原点は車載ネットワーク?サイバーエージェントのエンジニアが開発したAkkaベースのリアクティブアプリケーションの要点とは?

Akkaで構築されたCA ProFit-X

ECサイトに代表されるように、短時間に膨大なトラフィックが集中するシステムを構築する際に高可用性を達成するために様々なイノベーションが実現されているが、その中でかなり有望とみなされているシステムが「リアクティブシステム」であると言っていいだろう。大量のリクエストを捌くためにロジックの並列化に加えて、非同期で動作すること、エラスティックで障害時にも耐えうるシステムとその特徴を表現しても良い。リアクティブシステムに関するより詳しい情報はThinkITでの連載記事を参照していただきたい。

メニーコア時代のパラダイム リアクティブシステムを知ろう

今回、リアクティブシステムの代表的なフレームワークとして知られるAkkaを活用して実装されたインターネット広告のスマートフォン向けSSP(サプライサイドプラットフォーム)であるCA ProFit-Xの開発担当者にインタビューする機会を得た。CA ProFit-Xはサイバーエージェントのアドテク事業の一部としてインターネットを閲覧するスマートフォンに向けて広告を表示するSSPとして稼働しており、複数のDSP(デマンドサイドプラットフォーム)からの応札を高速に処理する必要がある。また単に高速に処理を行うだけではなく、障害時にもシステム全体に影響を及ぼさずに処理を続けるための耐障害性を持つことが特徴だ。

SSPやDSPなどのアドテクに関しては、サイバーエージェントが公開しているこの特集記事を参考にすると良いだろう。

日本一やさしいアドテク教室

今回、インタビューに応えてくれたのは、株式会社サイバーエージェントのアドテク本部アドテクスタジオ、CA ProFit-Xカンパニー プロダクトグループの松村郁生氏だ。

CA ProFit-Xの開発者、松村郁生氏

CA ProFit-Xの開発者、松村郁生氏

今回のシステムに関して、そもそもどういう経緯でSSPであるCA ProFit-Xに関わったのかを教えてください

2014年ぐらいに、これからはネイティブアドが立ち上がってくるということで、サイバーエージェントでもスマートフォン向けのSSPを作ろうということになりました。それまではAmoAdというチームにいたのですが、新たにチームが作られてそこでシステムについての検討が始まったという流れですね。その時は、エンジニアとビジネス側の人も入れて5名くらいのチームでした。

Akkaを使ってシステムを作ろうと決めたのはいつごろなのですか?

SSPということで色々なところからメッセージが飛んでくるのを処理しなければいけない、ということでかなり早い時期から決めていましたね。明確にこれで行くっていう決定があったわけではなくて、私がAkkaを調べて使っているうちに「もうこれでいく」ということになってしまったみたいな感じです(笑)。実際に多くのDSPにメッセージを投げて100ミリ秒以内に処理をしなければいけないという要件を満たすためには、AkkaとAkka-streamを上手く使えばできそうだという感じがしたのです。

車載センサーシミュレーションが発想の原点

実は新卒で入った前の会社で、車に搭載されているセンサーからのデータを処理するシミュレーションシステムを開発していた時に先輩から「並列化のコンテクストスイッチングをOSに任せていると間に合わないので、自分で管理して切り替えるようにする」ということを教わりまして、その経験がCA ProFit-Xに活かされたという背景があるのです。

それはつまり車に積んであるセンサーが送ってくる大量のデータを並列処理する際にロジックで切り替え、OSの機能を使わないということですよね?

そうです。ですからSSPとしてDSPから飛んでくるデータを高速に処理しなければならないProFit-Xも、それと同じ発想でシステムを作ろうと思いました。そういう意味では経験が活かされているわけですが、実際にSSPを作ってみると車載センサーのシミュレーションとは全く違う部分もありまして。

それはどんなところですか?

車載の場合、ネットワークが分断される、ネットワークにトラブルが起こるというのは基本考える必要はありません。ところがインターネットの場合は、ネットワークに異常が起こるのは当たり前という(笑)。その部分だけは、最初ちょっと戸惑いました。

実際にAkkaを使ってプロトタイプを作ったりはしたのですか?

背圧制御の部分に関しては、Akka Streamの上でプロトタイプとして作りましたね。これはDSPに見立ててメッセージを返すだけのアプリにメッセージを送って、返ってきたデータを処理する際に、マルチコアのCPUのコアをちゃんと平均的に使えているか? を検証したかったのです。一つのコアだけが大量の処理を受け持つのではなく、どのコアもキレイに負荷が分散されるかという部分の検証ですね。また、実際にAkkaの上にAkka Streamというエクステンションを載せて動かしても大丈夫か、ということもありました。

システムをホワイトボードに書いて説明する松村氏。「話すより楽だから」だそうだ

システムをホワイトボードに書いて説明する松村氏。「話すより楽だから」だそうだ

実際に何か苦労した部分はありましたか?

システムのモニタリングをする部分はこれまでのシステムとは違っていて、そこに苦労しましたね。Actor単位でどれだけメッセージが溜まっているのかといった部分を見ないといけないので、その部分にはKamonというJVMのモニタリングができるツールを使っています。それが初期の頃に、メモリーリークを起こすというバグに遭遇してしまいました。コミュニティが直してくれたので、なんとかなりましたけど。ProFit-XはAWSの上で動いていますが、Akkaそのものは大きなバグもなくて安定して動いていますね。

Akkaの意義は無駄にスレッドを作らないこと

実際にAkkaの上ではどのくらいのスレッドが動いているのですか?

Akkaの上では、数個から10個に行くか行かないかくらいのスレッドの数だと思います。Akkaを使う意味はまさにその点、つまり「無駄にスレッドを作らない」ことだと考えています。そうすれば、OSがスレッドを切り替えたりしないでいてくれるというわけです。あと開発している側としては、レジリエンス性というか耐障害性については恩恵を受けていると感じますね。Actorが親子関係を持っているので、何か稀に起こるようなエラーでActorが死んでも親のActorが再起動してくれて何事もなかったような感じでシステムが動き続けるわけです。このような処理をアプリケーション側で対応する必要があるのとないのでは、違いは大きいです。そういう観点では、CA ProFit-Xはリアクティブなシステムと言えると思います。

今後の予定は?

実はAkka StreamのExperimentalなバージョンを本番環境で使っているので、現在の最新バージョンとはAPIが変わっています。今のところ、サーバーもちゃんと動いているし、クリティカルな問題も起こらずに安定していますけど、いつかは最新バージョンに入れ替えたいとは思っていますね。あとサイバーエージェントのアドテクスタジオの他の製品でも、Akkaを使えるところもあると思いますので、もっと社内に広めていきたいです。

Akkaを使ったリアクティブシステムの事例として、高速にメッセージをやり取りするSSPは最適なユースケースの一つと言えるだろう。単に並列化するだけではなく、ソフトウェアのエンジニアがマルチコアのCPUを使い切ること、OSのコンテクストスイッチを信用せずに高速化を図ることなど、現代のアプリケーション開発者がカバーしなければいけない要点がこれまで以上に拡がっていることに驚くとともに、それを可能にするオープンソースソフトウェアが拡がっていることを実感したインタビューであった。耐障害性を担保できるリアクティブシステムは、今後も追いかけていく予定だ。

フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載記事一覧

セキュリティ

ホームネットワーク向けセキュリティをアプライアンスで提供するBitdefender BOXとは

2017/3/16
ルーマニアのBitdefenderは、日本市場において、PCとIoTデバイスを保護するソリューションを家庭向けに投入する。
仮想化インタビュー

NTT ComとEMCジャパン、Virtustreamをベースにした従来型アプリ向けクラウド基盤サービス提供開始を発表

2017/3/6
NTTコムと米国Virtustream, Inc.、EMCジャパン株式会社は、SAPなどのモノリシックな従来型アプリケーション向けの共有型クラウド基盤サービスの日本での展開を発表した。

Think IT会員サービスのご案内

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスのご案内

関連記事