Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby on Rails + Sidekiq構成のモノリシックサービスをコンテナ化した話 /...

DAN
December 03, 2023
1.2k

Ruby on Rails + Sidekiq構成のモノリシックサービスをコンテナ化した話 / kayac_andpad_event

DAN

December 03, 2023
Tweet

Transcript

  1. Copyright © 2023 ANDPAD Inc. All Rights Reserved. カヤック・アンドパッド 合同

    プロポーザル供養会 2023/12/04 Ruby on Rails + Sidekiq構成のモノリ シックサービスをコンテナ化した話 株式会社アンドパッド開発本部 SRE 角井 暖 1
  2. Copyright © 2023 ANDPAD Inc. All Rights Reserved. このセッションでお話すること 2

    Ruby on Rails + Sidekiq構成のモノリシックサービスをコンテナ化した話 | CloudNative Days Tokyo 2023 • ANDPADとSREチームの紹介 • なぜコンテナ化したのか • コンテナ化の泥臭い道のり • まとめ
  3. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 自己紹介 •

    角井 暖 / Dan Kadoi •   @cass7ius、 Cassius7 • ERP パッケージベンダーで DevOps を経験し、 2019 年 8 月よりアンドパッドの SREに参画 • 急速に成長するバーティカル SaaS 、 拡大する開発組織ならではの課題を、 Platform・SRE領域の技術で解決する • SRE チームのリード • 趣味はゲームと旅行 4
  4. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 幸せを築く人を、幸せに。 住まいをつくる。ビルや施設をつくる。街をつくる。

    生活を豊かにする建築・建設業は、幸せづくりと例えられます。 私たちは、その幸せづくりをする人たちをテクノロジーの力で 後押ししていきたい。心からそう考えてます。 我々はこれからもお客様の声をサービスに反映して、 建設業界及び建設業従事者様の業務効率化、 DX化を支援してまいります。 万人 ユーザー数 46.1万人 利用社数 18.1万社 ※『建設業マネジメントクラウドサービス市場の動向とベンダシェア(ミックITリポート  2023年10月号)』(デロイト トーマツ ミック経済研究所調べ) 4 No.1のインダストリーSaaS 6
  5. Copyright © 2023 ANDPAD Inc. All Rights Reserved. ペインポイント 3

    市場規模 社会課題 ・人材不足 ・低生産性 現場課題 ・長時間残業 ・低粗利率 建設業界 日本全体 市場規模 50兆円 (日本で2番目) 500兆円 事業者数 50万業者 (3年連続増加) 386万業者 従業者数 500万人 6800万人 7 Pain Point/市場規模
  6. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 経営(社内) ・現場管理

    ・営業 経営と現場をつなぐクラウドサービス 現場の効率化から経営改善まで一元管理 案件概要 クラウドを活用し、建築業の悩みを全て解決 ・経営 ・事務 現 場 ・協力業者 ・職人 工程表 資料 写真 報告確認 チャット(社内外連絡) 経営管理 OB管理 見積作成 受発注 予算管理 入出金管理 検査 施主 図面 法令対応 その他 施工管理から始まる経営改善ツール 8
  7. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 猛烈に成長するスタートアップ •

    ビジネスも組織も急速に拡大 • 現場に責任と裁量を与えて、リスクや不確実性と戦う • カスタマーセントリックにマルチプロダクト開発 開発組織が全力疾走するのに安全で丈夫な道が必要 ANDPADのSREは、その道をつくるチーム 10
  8. Copyright © 2023 ANDPAD Inc. All Rights Reserved. ANDPADのSREチームは担当業務が広い •

    ANDPAD、マイクロサービス、コーポレートサイト等の基盤開発 • AWSのマルチアカウントガバナンス整備 • オブザーバビリティの実現、テレメトリの追加収集 • データベースやEKSなどの更新、システムメンテナンスの切り盛り • 統制維持のための運用、開発で利用するSaaSやアカウントの管理 • インフラの統廃合やサービスクロージング • 他のチームメンバーと連携して、SPOFや技術的負債へに対処する 11
  9. Copyright © 2023 ANDPAD Inc. All Rights Reserved. バックログでタスクの優先度や緊急度を整理 12

    1. 成果や割り込みを共有 して、業務改善の余地を 振り返る 2. 優先度や緊急度の可視 化→定期的に状態を更新 して認識合わせをする 2は吉澤さんが整理して始 めてくれた取り組みで、 Miroとスプレッドシート で管理してます!
  10. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 持ち帰っていただけるもの コンテナ化プロジェクトとその後の変化について話します

    • コンテナ化を検討している • まさに今コンテナ化に苦労している そんな方をターゲットに弊社事例の紹介をします 技術的な詳細は時間の関係で省略します! 後で紹介する多数のブログ記事をご覧ください🙏 14
  11. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 新規サービスはすでにコンテナで稼働させていた 16

    マイクロサービス基盤 ANDPAD本体 新規サービスはモダンな 実行基盤でサービス・リ ポジトリが分割されて立 ち上がる 一方ANDPAD本体は、施 工管理・チャット・ERP などの基本機能を中心と したモノリシックサービ スで、数年かけてリポジ トリが大きく育っている メッシュ化された Ruby on Rails + Sidekiq
  12. Copyright © 2023 ANDPAD Inc. All Rights Reserved. このモノリシックサービスが、レガシーなインフラでビジネスの拡大を支 えてきた

    猛烈に成長するSaaSのインフラを猛烈にカイゼンする技術 歴史に経緯を払う 17 CTOが手動デプロイしてた時代から、デリバリーの仕組みや運用を整 えてきた間に解決された問題や溜まった知見は、貴重な資産 これらなくして「コンテナ化」は成し得てない
  13. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • アプリケーションを実行するVMのOSやパッケージの更新が上手く回っ

    てなかった ◦ Amazon LinuxのEOLへの対応が必要になった • リリースが大変な作業で、頻度を上げづらかった ◦ 簡素化/高速化が必要になった • いろんな仕事を詰め込んだバッチサーバがSPOF SidekiqScheduler/AssetsSync/RailsRunnerやスクリプトのCron実行/DB migrate/開発者が本番作業を実施する環境 しかしいろいろ辛かった...!! 18
  14. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 20 コンテナ化プロジェクト始動前のインフラ(~2020/09

    当時のリリースは大変な作業だった • スプシを見ながらAWSマネコン操作 • イメージのビルドが長い • AmazonLinuxの素のAMIから作って なかったので暗黙知が多い • フロントサーバのみBlueGreen • サーバの起動が遅い • バッチサーバはインプレースアップ グレード • ライブラリや言語更新には匠な職人 技が必要なことも
  15. Copyright © 2023 ANDPAD Inc. All Rights Reserved. コンテナ化する事で、 •

    サーバのメンテナンス性・変更容易性を上げる • リリース作業を簡単にして、頻度を上げる • SPOFを無くす 21 21 足場を強化して、ビジネスの課題・本質的な課題に 開発組織が専念できるようにする
  16. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • ローカル環境や、一時的に利用する検証環境の用途でdocker-compose

    で小さく起動するナレッジは元々あった ◦ それらをサンプルにSETチームを筆頭に検証環境構築 • Sidekiqを安全に終了できない問題が、致命的だった ◦ 多くのジョブは5分あれば十分だが、3時間の強者も ◦ ECS on Fargateの当時の最大待ち時間は120sec ◦ 大量にあるジョブをこの制約に対応させる工数は甚大 ECS on Fargateでコンテナ化を検証(~2020/12 23
  17. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • コンテナ化の要件

    ◦ デリバリー速度を落とさない ◦ リリース作業を大きく変えない(既存運用の維持) ◦ 現行水準以上の可用性と監視レベル ◦ Sidekiqを安全に終了する • 議論と検証を繰り返して、以下の方向性を決断 ◦ EKSでコンテナ化する ◦ プログラムの改修が多く必要であったバッチサーバのコンテナ化 は、後回しにする(フェーズを2つに分割 議論と検証を繰り返して、方向性を決定 (~2021/03) 24
  18. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 既存のナレッジは積極的に流用し、ANDPAD本体のコンテナ化と そのデリバリー構成を設計

    • マニフェストの構成管理 → Helm Chart • 秘匿情報の管理→ Helm Secrets Plugin + Sops(KMS) • PumaやHPAの設定を決めるための負荷試験 → Locust • 古すぎるパッケージがある → Dockerfileで頑張って再現 • 分析用のログをS3に永続化する仕組み → fluent-bit • 手前のNginxを廃止可能か検討 → Sidecar構成で維持 一部の開発環境をコンテナ化して全体設計(~2021/11 27
  19. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 28 コンテナ化Phase1時点のインフラ構成(2021/12

    初回の本番リリースはオンライン中 に手動でカナリアリリースした TargetGroupBindingsでコンテナ化 ターゲットを構成して、既存のALB のEC2ターゲットへのルーティング に少しずつ加重を追加した
  20. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 29 コンテナ化Phase1時点のインフラ構成(2021/12

    この時点ではまだバックサーバが オートスケールしておらず • EC2時代に使われていたSidekiqメ トリクスの収集方法では、収集頻度 が少な過ぎて、スパイク的なジョブ の変化に対してコンテナの伸縮が遅 すぎる問題があった • この時点では、バックサーバは想定 される最大負荷のスケールで固定し ていた • EC2時代と同様に、この時点ではフ ロントサーバのみBlueGreenDeploy
  21. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • 要件とモチベーションになってた課題はひとまずクリア

    • ANDPAD本体のパフォーマンスがやや向上 大きな事故なく初回リリース🎉(2021/12 30
  22. Copyright © 2023 ANDPAD Inc. All Rights Reserved. ANDPADの開発ライフサイクルの改善 1.

    バックサーバもオートスケーリングさせる 2. バッチサーバから仕事を分解して、廃止する 3. バックサーバもBlue/Greenデプロイする 4. リリース作業の負担を下げる/フローを改善する 5. Pumaのパフォーマンス改善 Phase1の初期リリース時点での残課題(2022/01 32
  23. Copyright © 2023 ANDPAD Inc. All Rights Reserved. EC2時代に使われていたSidekiqメトリクスの収集は、Lambda関数で Sidekiqメトリクスを収集してDatadogに送る方法だった

    スケーリング指標は”リソース利用率”ではなく”仕事率”にしたい • コンテナを水平スケールさせるにあたり、収集されている情報が古い • HPAだと特定の指標に対し1つしか閾値が持てない バックサーバもオートスケーリングさせる(~2022/04 34 この状況では、ジョブのスパイクにスケールを対応させるのが難しく 繰り返し不安定かつ効率の悪いスケーリングを行ってしまう
  24. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • WPA

    = Datadog製のHPA拡張のカスタムコントローラ を導入 • sidekiq-prometheus-exporter gemを導入して、EKS内の DatadogAgentのprometheusScrapeでメトリク収集 Sidekiqのオートスケールをイイ感じに(~2022/04 35 Sidekiqのメトリクスを高頻度に収集できるようにして、仕事率を計算 バースト制限、スケーリング速度などを指定して、丁度よくスケーリング できるようにチューニングした
  25. Copyright © 2023 ANDPAD Inc. All Rights Reserved. バッチサーバは大きく分けて、以下5つの役割を持っていた •

    リリース作業で、DBマイグレートを実行する場所 • 開発者がログインしてデータパッチやその他本番作業を実施する場所 • 定期実行用のSidekiqジョブのエンキュー(Sidekiq scheduler) • cronで実行されていたRailsRunnerの処理 • cronで実行されていたその他の処理 バッチサーバから仕事を分解する 37
  26. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 以下の移行を、ダウンタイム無しで少しずつ推進した •

    DBマイグレートとデータパッチについては、CodeBuildから実行でき るように個別に再実装した • その他の本番作業は、ログイン環境を別途用意した • 定期実行用のSidekiqジョブのエンキュー専用サーバをEKS内に冗長構 成して、バッチサーバでは動作しないようにした • cronで実行されていたRailsRunnerはSidekiqのジョブとして動く様に 移行した バッチサーバから仕事を分解する(~2022/12 38
  27. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 技術的な詳細はテックブログをご覧ください 施工管理サービスの定期実行ジョブ処理基盤をEC2からコンテナへ移行しました

    データパッチ環境と有事の際のログイン環境をサーバレス化・コンテナ化した取 り組み バッチサーバから仕事を分解する(~2022/12 39
  28. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • 元々1つのみで運用していたRedis

    namespaceを3系統に分割 (Blue/Green/ScheduledJob) • 新バージョンのフロントサーバから積まれるキューを処理する新バー ジョンのバックサーバを用意できるようになった • 定期実行処理は引き続きローリングアップデートをするために、独立 したRedis namespaceを用意 • Sidekiqを7系以降はRedis namespaceがサポートされないので、この3 系統分割はRedis databaseで表現する バックサーバもBlue/Greenデプロイする(~2022/12 41
  29. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 技術的な詳細はテックブログをご覧ください 2部構成です

    施工管理サービスの非同期処理基盤をBlue/Greenデプロイ化しました[前編] 施工管理サービスの非同期処理基盤をBlue/Greenデプロイ化しました[後編] バックサーバもBlue/Greenデプロイする(~2022/12 42
  30. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • cronで実行されていたその他の処理の移行

    • その他とは、Goバイナリの処理や超長時間かかるKPIデータ作成処理 バッチサーバから最後の仕事を剥がす(~2023/03 43 これらはECS scheduled Taskに移行した(~2023/03 こちらを対応後、バッチサーバの廃止を実行して、 コンテナ化プロジェクトは解散
  31. Copyright © 2023 ANDPAD Inc. All Rights Reserved. 45 コンテナ化Phase2時点のインフラ構成(2023/04

    バッチサーバ廃止時点の構成 • バッチサーバから仕事を分解するプ ロセス、EKSのリソース構成検討、 古い処理のコンテキストキャッチ アップ、移行戦略の検討、スクリプ トやプログラムの修正など作業量が 膨大で、多段リリース • コンテナ化プロジェクト始動から作 られたリソースの大部分はIaCさ れ、再現可能になった
  32. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • イメージビルドはキャッシュや成果物のコピーやパッケージの最新化

    などで時短し、開発環境のデプロイは速く簡単になり、大好評 • リリース作業とデータパッチ作業は、スクリプトの改修とフロー整理 で大幅に簡単化し、人的ミス削減や時短に成功 • サーバーの再現性・可搬性が向上したりデリバリーの仕組みシンプル になったことで、開発者が改修可能になった 開発体験やリリース作業が改善された🎉 47
  33. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • 勢いよく育ったRuby

    on Rails + Sidekiq構成のモノリシックサービス をコンテナ化するのは大変 ◦ バッチサーバは魔窟で、ローカルファイルに頼った排他制御が あったり、オーナーが不明で手を入れるにはオブザーバビリティ が乏しい処理や、安全に出来ると思った移行が障害を起こすな ど、多くの苦労を伴った • “どこでも動くようにつくる”設計が非常に重要 コンテナ化プロジェクト全体を通して 48
  34. Copyright © 2023 ANDPAD Inc. All Rights Reserved. • 今回は割愛したが、パフォーマンスチューニングは難しい

    ◦ 正確にやるにはオブザーバビリティの実現と、staging環境もしく は高度なロードテストの仕組みが必要 • Kubernetes環境では、単に監視をしているだけでは絶え間なく発生す る動的な出来事に関連性を見出すのが難しい ◦ テレメトリの追加や紐付けなどのセットアップをする ◦ 事実や状況証拠を束ねて、事象の理解に努める コンテナ化プロジェクト全体を通して 49
  35. Copyright © 2023 ANDPAD Inc. All Rights Reserved. We are

    hiring! 50 https://engineer.andpad.co.jp/ 技術スタックや募集ポジションを 掲載してます!