SlideShare a Scribd company logo
Elixirを本番環
境で使ってみた
という事例紹介
Shibuya.ex #1 (株)ドリコム @ohrdev
Agenda
• 自己紹介
• サービス紹介
• 採用に至る経緯
• どう使っているか
• 困った事
• 困らなかった事
• 使ってみての感想
• まとめ
自己紹介
• @ohrdev (おーはら)
• (株)ドリコム 広告チームADエンジニア
• 仕事
– ADネットワークシステムの開発、メンテ
– 広告サービス(事前登録、etc)の開発、メンテ
• 趣味
– FF14 (Ridillサーバー,白魔Lv60)
– 写経(般若心経的な意味で)、仏像彫り
– 丸太、流木収集
サービス紹介
• DreeVee / poncan
– 動画広告ネットワーク
– DAU 60万
– 月間動画再生数600万
– 通算 1億6000万再生
– リワード広告
採用に至る経緯
• ADネットワークシステムのリニューアル
– DAU 60万程度、ピークは通常の3-5倍のスパイク
– 旧システムはRails製
– ビジネスロジックが複雑(支払請求、単価計算周り)
• やりたいこと
– 大量のリクエストを安全にさばきたい
– サーバーコストを押さえたい
– スケールを楽に行いたい
– サービスが止まらない様に(安心睡眠)したい
– etc
採用に至る経緯
• 採用言語/ミドル候補
– Ruby, Scala, Golang
– Erlang ★
• Erlang
– 性能的には満足、OTPも好評
– Syntaxがエンジニアに不評
• Elixir
– SyntaxがRubyチック、OTP使える
– 1.0 が出た!
– Erlangのエコシステムにのっかれる
どう使っているか
• API部分に限定して利用
– リクエスト全体の9x%がAPIサーバー宛
– 複雑なビジネスロジックはRailsバッチシステムで
– バッチのSidekiqにElixirからenqueue
• DBバックエンドはRedis/Dynamodb
– RDBへのアクセスは無し
– Redisのコネクション管理はpoolboyを採用
• APIのDSLとしてmaruを採用
– GrapeのElixir実装
どう使っているか
• Sidekiqへのenqueueを行う
– [API] Elixir@exq
– [Batch] Rails@sidekiq
• Deploy
– exrm で releaseアーカイブ作成/EC2へ
• 監視
– Sentryに raven-elixir を使ってイベントログ送信
– インフラはAWSで組んでいるのでCloudWatchで
どう使っているか
API server
(Elixir)
管理系
system(RoR)
redi
s
Batch Server
(Sidekiq)
redi
s
MySQL
Exq
(Enqueuer)
Cash Server
LB
dynamo
Ex_aws
Sentry
Rave-elixir
Exredis
poolboy
Maru
Dotenv
Uuid
… etc
困った事
• ユースケースが少ない
– 採用事例、Deploy事例、運用事例
• Erlangエンジニアが少ない
– 社内勉強会/読書会/etc
– 本件以外の事例が増えつつある
• 本番採用:1件(開発中/phoenix)
• プロトサービス:2+α件
• Elixir的なサービスの組み方とは・・・
– アクターモデル脳/関数型脳へのシフト
– 『Scala関数型デザイン&プログラミング』
(思ったより)困らなかった事
• 上司説得、採用ハードル
– ベンチマーク/アーキ比較/数字を出して説明
– 調査・比較工数はそれなりに
– 全社的な方向性/方針にマッチした
• ライブラリ
– Erlangのエコシステムにのっかれる
– ただし、足回り(運用関連のツール、ライブラリ)弱い
• 情報収集
– パーフェクトElixir情報収集
– http://www.slideshare.net/keithseahus/elixir-
48878894
使ってみての感想
• Erlang/OTPを知らないと辛い
– エラーログはErlangベース
– ErlangをRubyのSyntaxで書いている感じ
– ElixirのライブラリはまだErlangのラッパーが殆ど
• (日本語の)ドキュメント少ない
– web+db vol.88,89 でElixir特集あります
• コミュニティ少ない(かったが最近増えてきた?
– Sapporo.beamオススメ (idobataで分散開催)
• Erlangのコミュニティ/エコシステムは偉大
– 時雨堂さんのドキュメントがかなり参考になった
使ってみての感想
• Elixirならではの機能が便利
– パイプ演算子が無いとやっていけない体に
– Struct、Protocol、遅延処理、etc Erlangで表現で
きない良記述
– (Lispの)マクロが強力(ライブラリ書くなら必須
• Debug/Perf関連はErlangのプロダクトが充実
– observer,eper,etc
– Elixirプロダクトも徐々に充実していっている
• Awesome-elixirのリストが凄い勢いで成長
– remote_consoleでアタッチしてごにょごにょするの
が手っ取り早い(Railsでいうところの rails c p)
使ってみての感想
• Erlangの資産を最大限活用してる
– Hex( Rubyで言う所のRubygems )
• Elixirの前にErlangをざっと把握しとくと良い
– エンジニアに最初にやってもらった事
• すごいE本/飛行機本 を読んでもらった
• 関数型言語について理解してもらった
– 2〜3ヶ月でそれなりのコードが書ける様になった
• Rubyコミュニティの影響を多分に受けているが、Ruby
が書けるからElixirが書き易いというわけでは*ない*
• Phoenixに期待している(が結局サーバーDSL
だしなぁ・・・)
まとめ
• Elixirのプロダクトを開発・リリース・運用して
みました
• 今後、Elixirのプロダクトや採用事例が増えて
いくと感じています
• まだまだ言語や、海外含むコミュニティが若い
ので、貢献のチャンスが多分にあります
• 不満:テストF/W周りが不十分
• Let’s enjoy Elixir.
ドリコム広告事業部はアドテク好きなエ
ンジニアを募集しています。
http://www.drecom.co.jp/recruit/
[PR]

More Related Content

Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介