Upload
tsunenori-oohara
View
12.327
Download
1
Embed Size (px)
Citation preview
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)
redis
Batch Server(Sidekiq)
redis
MySQL
Exq(Enqueuer)
Cash Server
LB
dynamo
Ex_aws
Sentry
Rave-elixir
Exredispoolboy
MaruDotenv
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]