「Phoenixで作るスケーラブルなリアルタイムゲームサーバー」
株式会社ミクシィ/XFLAG STUDIO古城秀隆さんによる「Phoenixで作るスケーラブルなリアルタイムゲームサーバー」という発表です。XFLAG STUDIOでは2015年からElixirを徐々に利用しはじめて、現在プロダクション環境でもいくつか利用されているそうです。
さらに次回リリースとなるゲーム開発では、モバイルゲームサーバーとして必要な以下のような特徴を備えているために、Elixir製のWebアプリケーションフレームワークであるPhoenixを用いたアプリケーション開発を採用しているそうです。
- 突発的なリクエストに対応できる
- 双方向な通信を取り扱える
- 継続的デプロイが可能
- 学習コストが高すぎない
具体的には、例えばイベント開始直後の突発的なアクセスの増加に耐えるため、1秒で最大限1000リクエストを処理できるサーバーを持っている場合、1秒あたり2000リクエストが来た場合に2秒かかってかまわないので、線形に(2倍のアクセスが来たら2倍の時間で)異常なくレスポンスを返したい。
最近のゲームではサーバーからクライアントへ素早く伝えたいことが多いため、クライアントがサーバーにリクエストして、レスポンスを取得する従来の方式だけでなく、サーバーとクライアントを常に接続した状態におき、何かあればサーバーからクライアントへすぐに通知できるようにしたい。しかしモバイルクライアントは移動しながら通信を行うため、ネットワークは頻繁に、かつ様々な理由で切断される。そのときにサーバー側に残った接続の後始末や、クライアントとの再接続を容易に行いたい。
Rubyエンジニアの多い環境では、RubyとElixirのシンタックスが似ていることは触ってみる心理的な障壁を下げることに寄与し、学習のきっかけが作りやすいなどを挙げられていました。
次に、現在のAPIサーバーの構成と設計のときに考えたことや、工夫しているところを紹介されました。クライアントとサーバーのやりとりは定義ファイルからC#とElixirのコードを自動生成しているそうです。
最後に、シンプルな構成に必要なツールは揃いつつあり、Erlang製のライブラリはElixirから簡単に利用できるため、Erlangに同梱されている便利な標準ライブラリであるOTPをElixirから利用すると、やりたいことの多くがすぐ解決できる。なにより書いていて楽しめる言語なので、みんなでElixirを盛り上げていければ嬉しいという言葉でまとめられました。
「Elixirから始める関数型言語」
クロードテック株式会社 ペレスダニエルさんによる「Elixirから始める関数型言語」という発表です。 ダニエルさんはElixirを1年くらいプロダクションで使っているそうです。
今回は、プログラミングの経験はあるが関数型言語には馴染んでいない方へ、関数型言語とはどんなものなのか、そしてElixirは関数型言語のどんな特徴を持つのかということについてお話いただきました。
プログラミングでは、ある問題を解決するために、その問題をどう捉えるかということをパラダイムと呼んでいます。これまでさまざまなパラダイムが提唱されており、例えば命令型、オブジェクト指向、プロセス指向などで、その中に関数型もあります。これらのパラダイムは排他的ではない部分も多く、一つのプログラミング言語の中に複数のパラダイムが取り入れられることもあります。例えば関数型を標榜していないプログラミング言語でも、関数型プログラミングの特徴である高階関数を用いた問題解決が取り入れられているものが多いです。今回は命令型というパラダイムと、関数型というパラダイムを対比させて、関数型の特徴や、メリット/デメリットの説明がありました。
さて、そのなかでElixirが持っている関数型言語の特徴は以下があるそうです。
- パターンマッチング
- 再帰
- 高階関数
- イミュータブルなデータ構造
現実世界でよくある、状態を持った方が解きやすい問題を取り扱うためにはElixirではAgentというライブラリを用意しており、これを使うと状態を上手に扱うことができるそうです。発表の最後に、Agentでは使いやすいようにユーザーから隠されている、状態を持つための仕組みの概要をダニエルさんはspawnとreceiveというElixirの基本的な関数を用いて説明しました。
