読者です 読者をやめる 読者になる 読者になる

DeNA TechCon 2016に参加してきた

DeNA TechCon 2016

DeNAの現場エンジニアがDeNAで培った開発面や運用面の知見を共有してくれる,というイベントに参加してきた.DeNAとしても初めての試みだったそうだが,イベントは大盛況であったし,僕自身かなり楽しめたので来年以降も開催して欲しいと思う.

techcon.dena.com

 

講演は4会場 + カジュアルトーク場に分かれて行われており,自分は以下の講演を聞いてきた.

  • Webを速くするためにDeNAがやっていること 〜HTTP/2と、さらにその先〜
  • DeNAインフラの今とこれから
  • DeNAマルチプレイゲーム用サーバ「IRIS」
  • スマートフォンセキュリティ - Same-Origin Policy Bypass -

この他にも面白そうな講演がいっぱいあったり,そもそもカジュアルトーク場のほうがオフレコっぽい話をいっぱい聴けたっぽくて,少し残念だった.しかし,いくつかの講演は,後日,映像配信や資料公開があるとのことだったので,楽しみにしたい(追記: 現在公式ページで全てのスライドを公開中).ただし,カジュアルトークに関しては撮影も禁止だったぐらいなので資料の公開等はないと思われる…

 

以下より,TechCon 2016で聞いた内容を自分なりに纏めてみようと思う.

 

Webを速くするためにDeNAがやっていること 〜HTTP/2と、さらにその先〜(OKU KAZUHO @kazuho)

かなり刺激的な講演だった.

まずは,DeNAのウェブ基盤技術の研究開発チームによる仕事(HandlerSocket等),およびそれの効果について紹介があった.ウェブでは,ページの表示が遅れれば遅れるほど売上が下がるという,いわばもっともな世界であるが,その売上を減らさないために数多くのアプローチがとられている.

 

特にDeNAでは,H2Oと呼ばれるDeNAのエンジニアが開発したWEBサーバを用いて,レスポンスタイムの向上やスループットの最適化を図っているそうだ.

H2O - the optimized HTTP/2 server

github.com

 

H2Oは,他のWEBサーバに比べてページの初期描画時間が短いという利点を持っており.それは一体どういったものかについて紹介があった.H2Oの詳細については一応メモをとっていたのだが,恐らく僕が雑な説明をしても混乱を招くだけになると思われるので,ここではしないことにする.

ただH2OによるWEBコンテンツの優先度制御はかなり興味深かった.またサーバからプッシュしたい場合に,予めサーバ側で予測してリクエストが来る前からクライアントにプッシュを開始する仕組みを実装しているという.このとき,ブラウザでキャッシュしているようなものはプッシュしたくないが,サーバ側でキャッシュの有無を判断するすることは今は出来ないため,cache-aware server-push(https://github.com/h2o/h2o/issues/421)という仕組みをRFC化する提案をしているそうだ.

github.com

 

このH2Oだが,これからどんどんと伸びていくと感じたので,頑張ってウォッチしていきたいと思う.

www.slideshare.net

 

DeNAインフラの今とこれから (KABE TOMOYA @limitusus, ONO ATSUSHI)

DeNAのインフラについて,これまでとこれからの話を2名の方から伺ってきた.

まず,これまでのインフラだが,DeNAではパブリッククラウドと比べてオンプレのほうがまだ安く構成出来るようだ.管理運用面では,プロセスをランタイムで解析出来るような独自のツールを作っているそうで,詳しくは分からないが,mallocをラップしてメモリ関連のログを出力し,どのアプリがどのタイミングでメモリをドカ食いしたか等を判別しているそうだ.かなり黒魔術を使ってそうな匂いがする.出来ればコードを見てみたいと思う.

そして,これからのインフラだが,かなり仮想化を意識しているように感じた.例えば,今までだと新しいプロダクトを作るときに,ネットワークエンジニアに何かしらを依頼するらしいが,新しいプロダクトとかであれば比較的小規模なため,わざわざネットワークエンジニアの手を借りることなく,サーバエンジニアの手によって構築から管理まで出来たほうが,スピード感が出る.もしプロダクトが大きくなったら,そのタイミングでもう一度しっかりとインフラを考えたほうが良いという考えだと思う.構成は,「OpenStack + BigSwitch + BIG-IP + Ceph」といったものになるそうだ.Cephを使って,イメージやデータを管理し,サーバごとにそれを読み込むといった風にすることで,サーバがポシャったときでもすぐに復旧出来るようにしたいとのことだ.またOSレベルでのコンテナにも興味を持っているらしい.

これからのインフラについては,自分の興味も相まって,かなり興味深かった.ふと疑問に思ったのは,プロダクトが大きくなったときにどのように移行していくのだろうか.発表中に話はなかったが,考えられているのか気になった.

 

DeNAマルチプレイゲーム用サーバ「IRIS」 (IKEDA OSAMU)

オンラインゲームのサーバがどのようなものか興味があったので,この講演を聞くことにした.

まず「IRIS」というのは,C++で書かれたMOサーバである.DeNAでは,Sakoshoとよばれるゲーム用のBaaSと,マルチプレイ専用サーバであるこのIRISがあるそうだ.IRISの基本的な機能は,IRIS内での仮想ルームの作成やIRIS間の通信,ルームの操作や通知,排他処理や座標同期などのマルチプレイサポートがあるそうだ.操作の殆どは,RPC経由だそうだが,どんな技術を使っているのかは不明であった.

また独自にIRISプロトコルを決めて通信を行っているらしい.なぜC++で作ったのかであるが,速度とクロスプラットフォームであることが決め手だったらしい.また最近ではGo言語とかもあるが,通信部分にポータビリティが求められ,かつAndroidiOSに透過的に組み込めるといった点からもC++を選んだとのことだ.

IRISはシングルプロセスで動いており,一つのサーバのなかに10個ぐらいのIRISがある.そのため,一つ一つのIRISサーバの収容人数は多くない.なぜシングルプロセスにしたかは,トラフィックが増大したときに他のプロセスに影響しないことや,実装がシンプルになるためプロダクトレディを早めたいという点を挙げていた.

 

オンラインゲームがバックエンドでどのように動いているのか,全く知らなかったので,とても勉強になる講演だった.自分もいつかオンラインゲームのバックエンドを開発してみたいと思っているものの,思っているだけで終わりそうだ…

 

スマートフォンセキュリティ - Same-Origin Policy Bypass - (SUGIYAMA TOSHIHARU @harupuxa)

自分の興味分野がセキュリティということもあり,講演のなかで一番期待していたものだった.

 

まず始めにスマートフォンアプリのチート対策について話があった.よくあるチートとは,アイテムや通過の増殖,Bot等が挙げられる.また攻撃されうるポイントを以下にあげる.

  • アプリのダウンロード
  • 課金処理(IAB/IAP)
  • 不正な通信リクエスト,通信レスポンスの改ざん
  • データファイルの改ざん
  • メモリ改ざん
  • アプリ改ざん

不正通信では,クライアントで処理結果を改ざんして送信したり,同じ通信を再送したり,同時に複数の送信を行ったりする.対策は,サーバ側でバリデーションをすることやロジック(詳しく覚えてない)のチェック,改ざんされても気づけるような仕組みを入れたり,アプリ内で独自の暗号化や署名,難読化を行うことだ.

メモリ改ざんは,画面上に見えているデータが対象で,実際にデモをしてくれた.まずrooted Android上で独自のプログラムを使って,スマホアプリのプロセスにアタッチしメモリ情報を取得していた.そして,画面上に見えている値をメモリ上から探すといった処理を何度か繰り返し,目的のメモリ番地を発見したら,そこの値を書き換えるといったことをしていた.その結果,スマホアプリ上では,先ほど書き換えた値になっていた.メモリ改ざんの対策は,画面上に見えている値とメモリ上の値を違うものにしておくといったものがあるが,メモリの更新頻度を見ればある程度の予測が出来るため,根本的な解決は難しいらしい.

表題にもあるSame-Origin Policyの回避だが,実際にデモを交えて分かり易く説明していただけた.SOPに関しては,自分のなかでもしっかりと理解が出来ているか不安なので,ここでは説明しない(出来ない).今後も勉強していきたい.講演者は,スマホブラウザのSOP回避を調べるために,AppStoreから100個ぐらいのブラウザアプリをダウンロードし調査したらしく,そのうち五つぐらいのブラウザで可笑しな挙動を発見出来たという.こういった地道にも思われる作業というのが,セキュリティでは大事になってくるのだと強く思った.

 

www.slideshare.net

 

懇親会

SUSHI

f:id:asakasa:20160203041124j:plain 

 

以上.

 

公式レポート

engineer.dena.jp