Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Elixir-Conf-Japan-2017-session-ohr486

3,399 views

Published on

ElixirConfJapan
ohr486

Published in: Engineering
  • Be the first to comment

Elixir-Conf-Japan-2017-session-ohr486

  1. 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 Rubyist |>(^o^)|> Alchemist 〜Elixirの採用からサービス稼働までの記録〜 ElixirConfJapan 2017 株式会社Drecom 大原常徳
  2. 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 Agenda AboutMe |> 発表の趣旨 |> 導入事例紹介 |> 開発チーミング |> サービスのスケール |> サービスの運用 |> 教育とトレーニング |> 組織/コミュニティ/MeetUp |> まとめ
  3. 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 AboutMe ⁃ Tsunenori Oohara(おーはら,ohr486) ⁃ Twitter: @ohrdev ⁃ tokyo.ex: 主催・運営 ⁃ ElixirConfJapan: 幹事チーム・運営 ⁃ JapanElixirAssociation: 理事 ⁃ 株式会社ドリコム ⁃ 基盤技術部 ⁃ 全社基盤システム、広告系サービス全般 ⁃ Elixir/Phoenixアプリを本番で開発・運用(約2 年 ⁃ SoftwareDesign2016/11,12 ⁃ [関数型言語]Elixirの始め方(前後)
  4. 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 発表の趣旨 ⁃ ターゲット ⁃ Elixirの導入を検討している ⁃ プロダクションでElixirを使いたい ⁃ 中規模以上のElixirアプリを書いた事が ない ⁃ Elixirを使いたくなった ⁃ ゴール ⁃ 導入の為に、導入後に、どういう事をす るべきかをざっくりと把握する ⁃ 習得の為に何をすれば良いか把握する
  5. 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 発表の趣旨 ⁃ 話すこと ⁃ 導入事例 ⁃ 導入の為にしたこと ⁃ 失敗、知見 ⁃ 日本のElixirコミュニティ事情 ⁃ 話さないこと ⁃ 前後のセッションで話した・話すテー マ ⁃ Elixirの採用理由(何故Elixirなのか ⁃ ErlangVM
  6. 6. Copyright Drecom Co., Ltd. All Rights Reserved. 6 導入事例紹介 ⁃ 組織/チーム ⁃ 社内にRubyエンジニア多数(90%Rails製 ⁃ 開発チームは5人(自分以外はElixir未経験 ⁃ プロダクト ⁃ 広告サービス基盤 ⁃ Railsアプリのリプレースプロジェクト ⁃ 期間 ⁃ 開発: 6ヶ月 ⁃ 運用: 1年半(うち1年、新旧サービスを並 行稼働)
  7. 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 導入事例紹介 ⁃ リプレースにあたっての要件 ⁃ サービスを絶対に停止してはいけない ⁃ 導入戦略 ⁃ マイクロサービス化する ⁃ 一部の(API)マイクロサービスから徐々 に適用 ⁃ AWSに乗る(スケールアップ/アウト機構
  8. 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 App(Rails) App(Rails) アーキテクチャ ⁃ before cache App(Rails) DB(MySQL) queue(Redis) Batch(sidekiq) 止めてはいけないが! site req api req
  9. 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 API(Elixir) API(Elixir) アーキテクチャ ⁃ after cache(Varnish) Manage(Rails) DB(MySQL) queue(Redis) Batch(sidekiq) API(Elixir) Front(Rails/js) DB(Redis) 安定 部分的にreplace 徐々にreplace site req api req
  10. 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 アーキテクチャ ⁃ バッチ/非同期処理 ⁃ sidekiq: 非同期処理gem ⁃ exq: sidekiqのElixir実装 Manage(Rails) queue(Redis) Batch(sidekiq) API(Elixir) exq’s enqueue sidekiq’s enqueue sidekiq’s dequeue ActiveJob I/F
  11. 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 導入事例紹介 ⁃ 以上のケースのプロジェクトで ⁃ 得られた知見 ⁃ 失敗 ⁃ やった事 等を、紹介していきます
  12. 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 開発チーミング ⁃ チーミングにあたって注意した事 ⁃ 求められるElixir習熟度を意識 ⁃ 導入者(知見者)がボトルネックにならな い ⁃ (可能なら)インフラエンジニアを確保す る
  13. 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 開発チーミング ⁃ 実務に求められるレベル感 ⁃ Lv.0: 触ったことが無い ⁃ Lv.1: コードが読める ⁃ Lv.2: 関数が書ける ⁃ Lv.3: モジュールが書ける ⁃ Lv.4: テストが書ける ⁃ Lv.5: 並行処理が書ける ⁃ Lv.6: フレームワークを使いこなせる ⁃ Lv.7: アプリの設計ができる ⁃ Lv.8: チューニング ・書籍 ・ペアプロ ・コードレ ビュー ・各種training ・ OTP ・テストツールの 理解・プロセスの理 解 実 務 の 壁 ・ErlangVMの理 解 モックライブラリ(meck)、E2Eテストツール
  14. 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 開発チーミング ⁃ 導入者がボトルネックにならない対策 ⁃ 静的解析ツールを使ってレビューサポート ⁃ Style Check ⁃ dogma ⁃ credo ⁃ 静的型解析 ⁃ Dialyzer ⁃ 自動化/CI ⁃ 自動テスト(ExUnit) ⁃ 静的解析 をCIに組み込む →初期段階で組み込まなかった為、大量のwarningが発生 ⁃ レビューアーを増やす ・credoのほうがちょっと教 育的 ・とても遅いのでCIで回すのが 良い
  15. 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 開発チーミング ⁃ レビューアーに求められる知識 ⁃ Elixirらしいコード ⁃ 関数プログラミング ⁃ ライブラリの知識(車輪の再発明の回避) ⁃ awesome-elixir ⁃ awesome-erlang ⁃ hex.pm ⁃ 並行処理の表現方法 ⁃ OTPの利用方法 ⁃ 性能の評価 ・既存モジュールが無い か?
  16. 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 開発チーミング ⁃ インフラエンジニアの必要性 ⁃ Elixirならではのインフラ課題がある ⁃ deploy方法にデファクトが存在しない ⁃ exrm(depricated!)/distillery ⁃ 無停止更新 ⁃ ノード(ErlangVM)のクラスタリング ⁃ 監視 ⁃ ErlangVMの監視 ⁃ Supervisorを含むサービスの監視
  17. 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 サービスのスケール ⁃ 「スケール」とは ⁃ トラフィックの増加 ⁃ ボトルネックポイント
  18. 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 サービスのスケール ⁃ トラフィックの増加 ⁃ リリースから2年で約50倍程 ⁃ コードの改変無しで対応 ⁃ スケールアップ ⁃ コア数を増やせば(ある程度)線形に ⁃ ErlangVMの恩恵 ⁃ スケールアウト ⁃ AWSならALB、AutoScalingGroupで対応可
  19. 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 サービスのスケール ⁃ ボトルネックポイント ⁃ データベースへのアクセス ⁃ コネクション/プロセスプーリング ⁃ poolboy: https://github.com/devinus/poolboy →Erlangのライブラリ、Elixirライブラリ内での利用多 い →下手なパラメータ設定によっては性能劣化の原因に →pool_size, max_overflow, etc
  20. 20. Copyright Drecom Co., Ltd. All Rights Reserved. 20 サービスの運用 ⁃ 「運用」とは ⁃ 機能開発、テスト ⁃ 監視 ⁃ バージョンアップ
  21. 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 サービスの運用 ⁃ 機能開発・テスト ⁃ TDDで開発 ⁃ Red-Green-Refactor ⁃ 並行化の列を加えたマトリクス ⁃ 逐次処理・並行処理 ⁃ Elixirは並行処理を簡単に書けるが、逐 次処理はもっと簡単に書ける(書いてし まう)
  22. 22. Copyright Drecom Co., Ltd. All Rights Reserved. 22 サービスの運用 ⁃ TDD黄金の回転 きれ い 汚い 動かな い 動く Red Green Refacto r
  23. 23. Copyright Drecom Co., Ltd. All Rights Reserved. 23 サービスの運用 ⁃ TDD黄金の回転(並行版) きれ い 汚い 動かな い 動く 並行に動 く Red Green Refacto r Concurrenize
  24. 24. Copyright Drecom Co., Ltd. All Rights Reserved. 24 サービスの運用 ⁃ 監視 ⁃ Supervisorがワーカーを再起動するので通 常の死活監視ではサービスの瞬死を完全に 検知できない ⁃ 1分に1回のHeartBeatだとタイミングによってはスル ー ⁃ →見かけ上は正常なので異常を検知できない ⁃ イベント単位での通知、KPI値の異常値に よる検知 ⁃ Sentry ⁃ https://github.com/getsentry/sentry-elixir ⁃ プロセスのcrash時に通知 ⁃ →通知先(のsentry)へのDDoSになりかねない ⁃ re:dash ⁃ aleart機能
  25. 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 サービスの運用 ⁃ バージョンアップの頻度 2014/9/10 2017/3/14 v1.0 R17 v1.4 R19 v1.2 R18 2016/1/1 2014/9/10 v1.0 2015/9/25 v1.1 2016/1/1 v1.2 2016/6/21 v1.3 2017/1/5 v1.4 2014/9/10 R17.1 2015/6/24 R18 2016/6/21 R19 2017/4/1 v1.4.2 2017/4/1 R19.3
  26. 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 サービスの運用 ⁃ バージョンアップ ⁃ Elixir、Erlangそれぞれ別々にバージョンア ップ ⁃ ただし依存関係あり(ex. Elixir 1.4.2 のコンパイルには 、 Erlang R18.0 以上必須 ) ⁃ →バージョン管理ツールを導入していなかったので、 バージョンアップ作業が煩雑 ⁃ →kerl, exenvを導入 ⁃ 目安 ⁃ Erlang: 年1回のメジャーバージョンアップ ⁃ Elixir: 年2回のマイナーバージョンアップ ⁃ 環境をイメージ/コンテナにして運用 ⁃ 特定のバージョン毎のテストやリリースができるよう に ⁃ script -> vagrant -> ansible -> docker
  27. 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 教育とトレーニング ⁃ よくある質問 ⁃ 「Elixirでコードを書く為に、Erlangの知 識は必要ですか?」 ⁃ 回答(異論は認める) ⁃ 設計時にOTPの知識が必要です ⁃ 何かとErlangのコードを読む機会はあり ます ⁃ デバッグ、etc ⁃ 完全にF/Wに乗れば機会は少ないかもで すが、あったほうが圧倒的に「安心」で す
  28. 28. Copyright Drecom Co., Ltd. All Rights Reserved. 28 教育とトレーニング ⁃ 目的 ⁃ Elixirで「業務」ができるレベルまで、 エンジニアのスキルを引き上げる ⁃ やったこと ⁃ 読書会/輪読会 ⁃ ペアプロ ⁃ PRレビュー ・独習/勉強会/ハンズオ ン ・業務と並 行
  29. 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 教育とトレーニング ⁃ 読んだ(読んでもらった)書籍 ⁃ 「プログラミングElixir」 Dave Thomas(著),笹田耕一・鳥井雪(翻訳), オーム社,2016 ⁃ 「すごいErlangゆかいに学ぼう!」 Fred Hebert(著),山口能迪(翻訳), オーム社,2014 ⁃ 「プログラミングErlang」 Joe Armstrong(著),柳原一矢(翻訳), オーム社,2008
  30. 30. Copyright Drecom Co., Ltd. All Rights Reserved. 30 おまけ Thank You!
  31. 31. Copyright Drecom Co., Ltd. All Rights Reserved. 31 教育とトレーニング ⁃ 学ぶべき事項 ⁃ Elixir ⁃ Erlang/OTP ⁃ アクターモデル(プロセスの扱い) ⁃ 並行プログラミング ⁃ 関数型言語 ⁃ テストフレームワークの使い方 ・Haskellの入門 書! ・Elixir 本 ・Erlang 本 ・meckのドキュメント ・テストライブラリのド キュメント
  32. 32. Copyright Drecom Co., Ltd. All Rights Reserved. 32 組織/コミュニティ/MeetUp ⁃ JapanElixirAssociation ⁃ ElixirConfJapanの主催・運営 ⁃ 2018年もConfを予定 ⁃ tokyo.ex ⁃ 東京近辺のElixir/Erlang関連イベント,隔月 ⁃ https://beam-lang.connpass.com/ ⁃ Sapporo.beam ⁃ 札幌近辺のBeam系言語meetup,毎週 ⁃ http://sapporo-beam.github.io/ ⁃ Idobataでリモート参加可
  33. 33. Copyright Drecom Co., Ltd. All Rights Reserved. 33 組織/コミュニティ/MeetUp ⁃ Elixir関連イベント(参加者20人以上) ElixirConfJapa n
  34. 34. Copyright Drecom Co., Ltd. All Rights Reserved. 34 組織/コミュニティ/MeetUp ⁃ Elixir関連イベント(参加者20人以上) tokyo.exとしては 今後ハンズオンに 力を入れていきたい ex) Erlangハンズオン
  35. 35. Copyright Drecom Co., Ltd. All Rights Reserved. 35 組織/コミュニティ/MeetUp ⁃ 是非イベントへお越しください ⁃ 来年もElixirConfJapanを予定しています ⁃ 東京近辺在住ならtokyo.exへ ⁃ 知見者が多いので相談出来る事も
  36. 36. Copyright Drecom Co., Ltd. All Rights Reserved. 36 まとめ ⁃ Elixirの導入に関する知見を共有しまし た ⁃ まずは素振りから始めましょう ⁃ 「プログラミングElixir」は最適 ⁃ OTPの理解は大切です ⁃ プロセス構造を理解すると捗ります

×