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

AWS歴6年のSaaS企業が直面する低凝集マイクロサービスの課題とその解決アプローチ

Sho
March 25, 2025
2

 AWS歴6年のSaaS企業が直面する低凝集マイクロサービスの課題とその解決アプローチ

2024/9/27に以下のイベントで登壇
AWS SaaS Builders Forum - Tech Leaders Meetup
https://aws-startup-lofts.com/apj/loft/tokyo/event/780ebde9-d212-43fa-a2d5-56fb453e91c9

Sho

March 25, 2025
Tweet

Transcript

  1. 5 アーキテクチャの概略図 • ざっくりと、図のような形でマイクロサービス群が構成されています。フロントエンドがひとつ、数⼗の バックエンドサービスが基本的にサーバーレスアーキテクチャで稼働しています。 フロントエンド TypeScript Scala バックエンド クライアントアプリ

    Android (Java & Kotlin) iOS (Swift) macOS (Swift) Windows (Delphi & C#) Scala Node.js Scala Scala C# Scala Python • バックエンドはドメインごとに独⽴したサービスが構築されています。各サービス間の情報連携はイベン トバスを挟むことによって⾮同期的に⾏われています。 マイクロサービス マイクロサービス ※メインは Scala、⼀部 C# や Python または Node.js があります。
  2. 6 アーキテクチャの概略図 • API Gateway + Lambda + DynamoDB の構成が基本で、要件によって他サービスを採⽤し構成が複雑

    になります。フロント向け API サーバーとして EC2 を利⽤しているサービスなどもあります。 • サービス間の情報連携はイベントバス (pub-sub モデル) 経由で⾮同期的に連携しています。 • 他のサービスが持つ情報が欲しい場合は、イベントバス経由で連携された情報を永続化する⽅法(コピー を持つ⽅法)と、直接データベースにアクセスする⽅法などがあります。 バックエンド eventbus eventbus サービスA サービスB サービスC eventbus サービスD 直接 DB 参照 Lambda to Lambda で情報取得 サービスB からイベントバス経由で連携さ れた情報を永続化する(コピーを持つ) ⾮同期で情報連携 コスト削減のため、サービスA,B の情報も格納していることも
  3. 7 課題に⾄った背景 • チーム体制の変化 • オンプレミス版のPC管理機能を統合し、プロダクト価値を拡⼤するために新規メ ンバーが多数参画 • 特定のコンテキストを担当するチーム体制から管理対象のOS単位のチーム体制へ •

    知識不⾜ • 新規参画者のDDDやマイクロサービスに関する知識が不⾜ 資産チーム クライアント チーム 設定チーム Android チーム iOSチーム PCチーム ...etc ...etc
  4. 8 低凝集なマイクロサービスにおける課題 • サービスの過剰な分割と密結合 • 変更容易性の低下 • 開発チームの担当領域の重複 • 各OS単位の新機能追加時に担当する領域が重複し、予期せぬ結果を招く可能性

    • 管理対象のOS単位に分散した処理と⼀貫性のないユーザー体験 • 各OS向けの機能が分散しており、ユーザー体験が⼀貫していない LANSCOPE 管理画⾯ お客様 資産情報取得設定 位置情報取得設定 MDM操作ログ取得設定 PC操作ログ取得設定 同じ操作ログ取得の 設定なのにOSによって 動線が異なる
  5. 13 • 原理原則を⽬指すことの難しさ • PoCでは、出来るだけDDDの原理原則に基づいて設計・実装を進めていたが、学習コストの⾼さが想 定以上に⼤きかった • ⼯数が膨⼤になりそうなことがわかった • 設定の項⽬数が多すぎる

    • 新しく⾒つかったドメインモデルで既存の機能を実現するのが難しい • 運⽤ができない • 必要な⼈数の確保が難しい • 今後実現したい価値とのギャップ • ビジネスサイドとの認識のずれ • 求められることは⽣産性の向上 • 費⽤対効果の観点 PoCチームで2ヶ⽉間⾛ってみて デバイス設定 資産情報 デバイス制御 ...etc OS単位の 差異はない Android クライアント iOS クライアント Windows クライアント macOS クライアント ⽬指してた姿
  6. 14 • ビジネスサイドとも会話をしながら、まずは少し先の未来をよくするためにやるべきことを考え直した • ⽣産性の向上 • 機能開発時の担当領域の重複排除 • 変更容易性の向上 PoCチームで2ヶ⽉間⾛ってみて

    MDMチーム ・MDM関連機能 基盤機能チーム ・認証機能 ・資産機能 ...etc PCチーム ・PC関連機能 現在はそれぞれについて ⼩さく始めて効果の検証中 • 責任範囲の明確化 • 明確に各チームで持ち物を分担することで、開発時の担当領域の重複を排除 • 担当領域を明確にすることで認知不可を低減 • チーム内でのコンテキストの再定義とサービスの統合 • 過剰に分割されたサービスを統合することで変更容易性を向上 まずは責任範囲を 明確に