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

複雑になったマイクロサービスを どう管理するか/how-to-manage-increasin...

複雑になったマイクロサービスを どう管理するか/how-to-manage-increasingly-complex-microservices

マイクロサービスを運用して数年経過し、マイクロサービス全体が大きく、複雑になったときにどう管理するかについて、チームで行ったこと、行っていることを共有します。

以下イベントでの登壇資料です。
https://findy.connpass.com/event/283285/

hirai.kazushi

June 06, 2023
Tweet

More Decks by hirai.kazushi

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 l LINE Fukuoka 株式会社 l 2016年⼊社 l 開発1室 Dev

    K team Manager l Server-side Engineer l 2 kids l Interests/Hobbies l Exercising / Marathon l Twitter: @hkazushi0627 ฏҪ Ұ࢙ ,";64)*)*3"*
  2. History 2012 スタンプショップ リリース 2013 LINE STOREリリース 2014 LINE着せかえ LINEクリエイターズスタンプ

    2017 年賀キャンペーン開始 LINE公式アカウントからの おすすめスタンプ⾃動配信 2018 LINE絵⽂字 2019 LINEスタンプ プレミアム 2020 メッセージスタンプ LINEスタンプ プレミアム デラックスコース 2021 LINEスタンプ プレミアム 台湾、インドネシア LINEアニメーション絵⽂字 2011 LINEリリース 2022 LINEスタンプ プレミアム LINE Music LINEMO バンドル l サーバサイドエンジニア︓10⼈未満 ? l エンジニアのチーム数︓2 (プロダクトチーム) l マイクロサービスのコンポーネント数︓3 ? サービスローンチ当初のマイクロサービスとチームの構成
  3. History 2012 スタンプショップ リリース 2013 LINE STOREリリース 2014 LINE着せかえ LINEクリエイターズスタンプ

    2017 年賀キャンペーン開始 LINE公式アカウントからの おすすめスタンプ⾃動配信 2018 LINE絵⽂字 2019 LINEスタンプ プレミアム 2020 メッセージスタンプ LINEスタンプ プレミアム デラックスコース 2021 LINEスタンプ プレミアム 台湾、インドネシア LINEアニメーション絵⽂字 2011 LINEリリース 2022 LINEスタンプ プレミアム LINE Music LINEMO バンドル 2023 現在のマイクロサービスとチームの構成 l サーバサイドエンジニア︓30⼈以上 l エンジニアのチーム数︓6以上 (プロダクトチーム、フィーチャーチーム、SRE) l マイクロサービスのコンポーネント数︓80以上 l プロダクトや機能の拡⼤、アーキテクチャ改善 l モノレポで管理 l 複数コンポーネントのコードベースを単⼀のリポジトリで管理 2023 現在
  4. l マイクロサービスやコードベースの学習が困難 l リポジトリ上のコンポーネントが多すぎる l それぞれのコンポーネントが、どのプロダクト、どの機能を担当するのか不明確 l 各コンポーネントの担当者が不明確 l コンポーネントについて質問したい時、何か変更を⾏ってソースレビューしてほしいとき、だれが適切なのか不明確

    Problems チームの新メンバー チームの既存メンバー l 担当したコンポーネントは限られるため、新メンバーと同様の問題を抱える l 実はマイクロサービスの全体像を知っている⼈はだれもいない これらの問題をどう解決して、複雑になったマイクロサービスをどう管理していくか︖
  5. l GitHubであれば、コードオーナーを設定できる l ドメイン単位で階層化することで、コードオーナーも設定しやすい l プルリクエスト作成時に、コードオーナーが⾃動でReviewersに設定される Component Domain – Code

    Base store/ + store-server + store-cms + store-decaton shop/ … subscription/ … リポジトリの構成 /store/ @kazushi-hirai @xxx @yyy /shop/ @aaa @bbb /subscription/ @ccc @ddd … .github/CODEOWNERS GitHub: Pull Request コードベース上はどうドメインを表現する︖ 課題 リポジトリのトップレベルをドメイン単位にして、配下にドメインに含まれるコンポーネントを配置する 各ドメイン、コンポーネントの担当者はどう表現する︖ 課題
  6. l プロダクトや機能、もしくはコンポーネントの責務 l ストレージやキャッシュレイヤーはドメインごとに閉じる l ストレージやキャッシュの障害の影響範囲は、ドメイン内のコンポーネントのみ l ドメインの開発を、プロダクト・フィーチャーチームにまるごとアサインできる l 担当ドメインの開発に集中できる

    l ストレージやキャッシュの担当ドメインが明確に定義され、内部、外部の依存関係も明確 l 明確な定義により、⽇々の開発だけでなく、緊急時の対応も円滑に⾏える Component Domain – How to define LINE STOREのWebアプリケーション部分が責務 ストレージやキャッシュへのアクセスは、Storeドメイン内のコンポーネントのみ それ以外は公開されたAPI経由で、アクセスする LINE STORE Devが開発担当 どういう単位で、コンポーネントをドメインごとにグルーピングする︖ 課題
  7. l アーキテクチャのリファクタリングを⾏う l 別ドメインからは公開API経由でデータにアクセスするようにする l データベースをドメイン毎に分割する Component Domain - Refactoring

    複数のドメインから同⼀のストレージにアクセスしている場合は、どうする︖ 課題 公開API経由でデータにアクセス データベースを分割 xxxドメインのコンポーネントが、yyyドメインのストレージにアクセス