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

広告システムの生産性向上への試み〜100以上のマイクロサービスのモノレポ化〜

Avatar for CyberAgent CyberAgent
December 15, 2021

 広告システムの生産性向上への試み〜100以上のマイクロサービスのモノレポ化〜

広告配信システムはマイクロサービスアーキテクチャを採用し、100以上ものマイクロサービスで構築されています。

サービス提供開始から5年が経ち、様々な機能追加、機能改修が行われ、保守するソースコードレポジトリは100に上ります。

次第に、機能改修、共通ロジックの抽出、依存ライブラリバージョンアップ、セキュリティパッチの適用などを行う際、複数のレポジトリにまたがって変更を行う必要があり、開発スピードが大きく低下していました。

これらの問題を解決するためにモノレポに移行しました。

今回はどのようにモノレポ移行したのかを説明し、開発フローの改善への取り組みについて説明します。

https://developer.abema.io/2021/sessions/QXlcQUxHjJ/?utm_medium=social&utm_source=slideshare

Avatar for CyberAgent

CyberAgent

December 15, 2021
Tweet

More Decks by CyberAgent

Other Decks in Technology

Transcript

  1. アーキテクチャ DMP VOD リニア GKE トランス コーダ 広告入稿シ ステム Batch

    Tracking Server DMP 配信システ ム GKE トランス コーダ 広告入稿シ ステム Tracking Server 保証型広告配信システム 非保証型広告配信システム
  2. マイクロサービス × マルチレポ y proto D component E component F

    component x proto A component B component C component
  3. ビルドツールの選定 モノレポ導入当初 Bazel を使用 • どれほどビルドに時間がかかるか把握できなかった • 差分ビルドを行うために導入 • Go,

    Docker イメージのビルドのみに使っていた 結果: 各ツールを使いビルドするよう変更 • Bazel のビルドと各ツールのビルド時間にそれほど差がなかった • Goのビルドが通るがBazelのビルドが通らないことが時折発生 • メインの言語はGoのみでBazelの機能を活かしきれていなかった
  4. CI/CDについて CI • Github Actions を採用 • 設定ファイルのテンプレート化 • 変更があったディレクトリごと実行するワークフローを分け、必要なCIのみ実行する

    ように CD • ArgoCDを採用 • GitOpsを採用 • Kubernetesのマニフェストを変更することでデプロイできるワークフローを用意
  5. ブランチ戦略 feature ブランチによる長期開発との相性が悪い 長期開発を行なってしまうと feature ブランチと master ブランチに差分が発生してしまい、 デグレなどが起きてしまう →

    トランクベースの開発を行う必要がある フィーチャートグルを用いた開発、作業を細かく分割しマージ頻度を高める必要がある
  6. モノレポ設計 • ルートにgo.modを配置し、シングルモジュール化 • ディレクトリ構成 ◦ 基本シンプルな構成に、コンポーネントごとにディレクトリに分割 ◦ メトリクス、ロギング、コンフィグなどのみ共通パッケージ化 •

    DB, protobuf などのスキーマの管理方法 ◦ 共通で使う構造体は使い回せるように • terraformやkubernetesのマニフェストなども全てモノレポ化 • CI/CD ◦ 全体または一部のコンポーネントをタグ打ちリリースできるように