16
Elixir をををを ををををををををををを ををを Shibuya.ex #1 ( 株 ) 株株株株 @ohrdev

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

Embed Size (px)

Citation preview

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

Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 ( 株 ) ドリコム

@ohrdev

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

Agenda

• 自己紹介• サービス紹介• 採用に至る経緯• どう使っているか• 困った事• 困らなかった事• 使ってみての感想• まとめ

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

自己紹介• @ohrdev ( おーはら )• ( 株 ) ドリコム 広告チーム AD エンジニア• 仕事– AD ネットワークシステムの開発、メンテ– 広告サービス ( 事前登録、 etc )の開発、メンテ

• 趣味– FF14 (Ridill サーバー , 白魔 Lv60)– 写経 ( 般若心経的な意味で ) 、仏像彫り– 丸太、流木収集

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

サービス紹介• DreeVee / poncan– 動画広告ネットワーク– DAU 60 万– 月間動画再生数 600 万– 通算 1 億 6000 万再生– リワード広告

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

採用に至る経緯• AD ネットワークシステムのリニューアル– DAU 60 万程度、ピークは通常の 3-5 倍のスパイク– 旧システムは Rails 製– ビジネスロジックが複雑 ( 支払請求、単価計算周り )

• やりたいこと– 大量のリクエストを安全にさばきたい– サーバーコストを押さえたい– スケールを楽に行いたい– サービスが止まらない様に ( 安心睡眠 ) したい– etc

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

採用に至る経緯• 採用言語 / ミドル候補– Ruby, Scala, Golang– Erlang ★

• Erlang– 性能的には満足、 OTP も好評– Syntax がエンジニアに不評

• Elixir– Syntax が Ruby チック、 OTP 使える– 1.0 が出た !– Erlang のエコシステムにのっかれる

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

どう使っているか• API 部分に限定して利用– リクエスト全体の 9x% が API サーバー宛– 複雑なビジネスロジックは Rails バッチシステムで– バッチの Sidekiq に Elixir から enqueue

• DB バックエンドは Redis/Dynamodb– RDB へのアクセスは無し– Redis のコネクション管理は poolboy を採用

• API の DSL として maru を採用– Grape の Elixir 実装

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

どう使っているか• Sidekiq への enqueue を行う– [API] Elixir@exq– [Batch] Rails@sidekiq

• Deploy– exrm で release アーカイブ作成 /EC2 へ

• 監視– Sentry に raven-elixir を使ってイベントログ送信– インフラは AWS で組んでいるので CloudWatchで

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

どう使っているか

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

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

困った事• ユースケースが少ない– 採用事例、 Deploy 事例、運用事例

• Erlang エンジニアが少ない– 社内勉強会 / 読書会 /etc– 本件以外の事例が増えつつある• 本番採用: 1 件 ( 開発中 /phoenix)• プロトサービス: 2+α 件

• Elixir 的なサービスの組み方とは・・・– アクターモデル脳 / 関数型脳へのシフト– 『 Scala 関数型デザイン & プログラミング』

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

( 思ったより ) 困らなかった事• 上司説得、採用ハードル– ベンチマーク / アーキ比較 / 数字を出して説明– 調査・比較工数はそれなりに– 全社的な方向性 / 方針にマッチした

• ライブラリ– Erlang のエコシステムにのっかれる– ただし、足回り ( 運用関連のツール、ライブラリ )弱い

• 情報収集– パーフェクト Elixir 情報収集– http://www.slideshare.net/keithseahus/elixir-48878894

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

使ってみての感想• Erlang/OTP を知らないと辛い– エラーログは Erlang ベース– Erlang を Ruby の Syntax で書いている感じ– Elixir のライブラリはまだ Erlang のラッパーが殆ど

• ( 日本語の ) ドキュメント少ない– web+db vol.88,89 で Elixir 特集あります

• コミュニティ少ない ( かったが最近増えてきた ?– Sapporo.beam オススメ (idobata で分散開催 )

• Erlang のコミュニティ / エコシステムは偉大– 時雨堂さんのドキュメントがかなり参考になった

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

使ってみての感想• Elixir ならではの機能が便利– パイプ演算子が無いとやっていけない体に– Struct 、 Protocol 、遅延処理、 etc  Erlang で表現できない良記述– (Lisp の ) マクロが強力 ( ライブラリ書くなら必須

• Debug/Perf 関連は Erlang のプロダクトが充実– observer,eper,etc– Elixir プロダクトも徐々に充実していっている

• Awesome-elixir のリストが凄い勢いで成長– remote_console でアタッチしてごにょごにょするのが手っ取り早い( Rails でいうところの rails c p)

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

使ってみての感想• Erlang の資産を最大限活用してる– Hex( Ruby で言う所の Rubygems )

• Elixir の前に Erlang をざっと把握しとくと良い– エンジニアに最初にやってもらった事

• すごい E 本 /飛行機本 を読んでもらった• 関数型言語について理解してもらった

– 2〜 3ヶ月でそれなりのコードが書ける様になった• Ruby コミュニティの影響を多分に受けているが、 Rubyが書けるから Elixir が書き易いというわけでは * ない *

• Phoenix に期待している ( が結局サーバー DSLだしなぁ・・・ )

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

まとめ• Elixir のプロダクトを開発・リリース・運用してみました• 今後、 Elixir のプロダクトや採用事例が増えていくと感じています• まだまだ言語や、海外含むコミュニティが若いので、貢献のチャンスが多分にあります• 不満:テスト F/W 周りが不十分• Let’s enjoy Elixir.

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

ドリコム広告事業部はアドテク好きなエンジニアを募集しています。http://www.drecom.co.jp/recruit/

[PR]