Chuyển đến nội dung chính

レッスン 1: モノリスからマイクロサービスおよびマイクロ フロントエンドへ — アーキテクチャの進化のロードマップ

モノリスがボトルネックになった理由、マイクロサービスへの進化の旅、そしてフロントエンドも分離する必要がある理由を理解します。モノリス、SOA、マイクロサービス、マイクロ フロントエンドを比較します。変換を開始する時期。

🏗️ アーキテクチャ — レッスン 1 レッスン 1: モノリスからマイクロサービスへ マイクロ フロントエンド — Ant 進化ロードマップ 竹

マイクロサービスとマイクロ フロントエンドのシステム設計 — 基本から運用まで

パート 1: 基礎 — アーキテクチャの進化

xdev.asia

はじめに

ほとんどのソフトウェア システムは モノリス として始まりますが、それは当然のことです。しかし、システムが成長し、チームが拡大し、要件が継続的に変化するにつれて、モノリス アーキテクチャは徐々にボトルネックになります。このレッスンは、ソフトウェア アーキテクチャの進化の過程全体と、マイクロサービス + マイクロ フロントエンド が複雑なシステムの目的地である理由を理解するのに役立ちます。


1. モノリス — 合理的な出発点

1.1 モノリスアーキテクチャとは何ですか?

モノリス アーキテクチャ — すべてのモジュールを 1 つのブロックにまとめ、データベースを共有

モノリスは、アプリケーション全体が単一ユニットとして構築、デプロイ、拡張されるアーキテクチャです。すべてのモジュール (ユーザー、製品、注文など) は同じプロセスで実行され、同じデータベースを共有し、一緒にデプロイされます。

1.2 モノリスの利点

利点説明
シンプル開発、デバッグ、初期テストが簡単
展開が簡単1 つのアーティファクトをデプロイするだけ
パフォーマンスネットワーク経由ではなく内部 (インプロセス) で関数を呼び出します。
ACID トランザクションモジュール間でトランザクションを簡単に実行
リファクタリングが簡単優れた IDE サポート、簡単な検索と名前変更

1.3 モノリスはいつ問題になるのですか?

システムが成長するにつれて、Monolith は ボトルネック に遭遇します。

開発について:

  • コードベースが大きすぎるため、新しい開発者が理解するのに多くの時間が必要です
  • ビルド時間は数十分に増加
  • チーム間で競合を継続的にマージします
  • 小さなバグがシステム全体をクラッシュさせる可能性があります

展開について:

  • 1 つの小さな変更でアプリケーション全体をデプロイ
  • リリースサイクルは続く(数週間/数ヶ月)
  • 複雑なロールバック、全体的な影響

スケーリングについて:

  • 1 つのモジュールだけがより多くのリソースを必要とする場合は、完全に拡張する必要があります
  • 部品ごとに異なる技術を使用することはできません

経験則: 開発者が 5 人未満で、システムが複雑すぎない場合は、依然として Monolith が最良の選択です。


2. アーキテクチャ進化の旅

2.1 モノリス → SOA → マイクロサービス

Timeline:
2000s          2010s              2015+              2020+
┌──────┐    ┌──────────┐    ┌──────────────┐    ┌───────────────────┐
│Monolith│ → │   SOA    │ → │ Microservices│ → │ Microservices +   │
│       │    │Services  │    │              │    │ Micro Frontend    │
└──────┘    └──────────┘    └──────────────┘    └───────────────────┘

2.2 SOA (サービス指向アーキテクチャ)

ESB を使用した SOA — 集中バスが単一障害点になる

SOA は、Monolith をサービスに分離するための最初のステップです。ただし、SOA にはいくつかの制限があります。

  • 集中型 ESB (Enterprise Service Bus) を使用 → 単一障害点
  • サービスは 完全に独立していないことがよくあります (共有データベース、共有ライブラリ)
  • 複雑なプロトコル (SOAP、WS-*)

2.3 マイクロサービス — SOA は正しく行われています

マイクロサービスは SOA の考え方を継承していますが、中心となる原則は次のとおりです。

┌──────────────────────────────────────────────────────┐
│                 API GATEWAY                          │
└──────┬──────────┬──────────────┬─────────────────────┘
       │          │              │
  ┌────┴────┐ ┌───┴────┐  ┌─────┴─────┐
  │  User   │ │Product │  │  Order    │
  │ Service │ │Service │  │  Service  │
  │         │ │        │  │           │
  │ ┌─────┐ │ │┌─────┐ │  │ ┌──────┐  │
  │ │ DB  │ │ ││ DB  │ │  │ │  DB  │  │
  │ └─────┘ │ │└─────┘ │  │ └──────┘  │
  └─────────┘ └────────┘  └───────────┘
  
  Mỗi service: Own database, Own deployment, Own team

SOA とマイクロサービスの比較:

基準SOAマイクロサービス
コミュニケーションESB (集中型)スマート エンドポイント、ダム パイプ
データ人気の共有DBサービスごとのデータベース
サイズ非常に大きくなる可能性があります小さく、焦点を絞った
デプロイ通常はを使用してデプロイされます。独立した展開
テクノロジー通常は均一多言語対応

3. フロントエンド モノリス — 無視されている問題

3.1 バックエンドは分離されましたが、フロントエンドはまだマージされています

フロントエンド モノリス — バックエンドは分離されましたが、フロントエンドは依然として巨大な SPA です

多くの組織がバックエンドにマイクロサービスを採用していますが、フロントエンドは依然として 1 つの巨大な SPA アプリケーション (React/Angular/Vue モノリス) です。

3.2 フロントエンドモノリスの結果

  • コード結合: すべてのチームが同じフロントエンド リポジトリに貢献します
  • 技術ロックイン: フレームワークを段階的にアップグレードできない
  • ビルドが遅い: バンドルのサイズが大きくなっています
  • 展開のボトルネック: フロントエンド全体を展開する必要がある
  • チームの依存関係: チーム A はチーム B がコードをマージするのを待ちます

3.3 マイクロ フロントエンド — ソリューション

┌─────────┐  ┌──────────┐  ┌─────────────┐
│  User   │  │ Product  │  │   Order     │
│  MFE    │  │   MFE    │  │    MFE      │
│ (React) │  │  (Vue)   │  │  (React)    │
└────┬────┘  └─────┬────┘  └──────┬──────┘
     │             │              │
     └─────────┬───┴──────────────┘
               │
     ┌─────────┴──────────┐
     │   SHELL / CONTAINER │
     │   Application       │
     └────────┬────────────┘
              │
┌─────────────┴────────────────────────┐
│            API GATEWAY               │
└──────┬──────────┬──────────┬─────────┘
  ┌────┴────┐ ┌───┴────┐ ┌──┴────────┐
  │User µS  │ │Product │ │Order µS   │
  └─────────┘ └────────┘ └───────────┘

##4.いつ切り替えるべきでしょうか?

4.1 信号にはマイクロサービスが必要

  • チーム > 10 名 同じコードベースで作業
  • リリースは別のチームによってブロックされています
  • 不均一なスケーリング: 1 つのモジュールをスケーリングする必要がありますが、すべてのモジュールをスケーリングする必要があります
  • テクノロジーのロックイン: 新しいテクノロジーを使用したいが使用できない
  • 障害カスケード: 1 つのバグによりシステム全体がクラッシュします

4.2 信号にはマイクロ フロントエンドが必要

  • 複数のチームが同じフロントエンド アプリで機能を開発
  • フロントエンドのビルド時間 > 5 分
  • 競合をマージ フロントエンドを頻繁に行う
  • フレームワークをアップグレードしたいが、すべてを変更する必要があります
  • 各 UI パーツの 独立したリリース

4.3 すべきでない場合は?

壊れていないものを直す必要はありません。

  • 小規模チーム (開発者 5 名未満) → モノリスで十分
  • MVP / スタートアップ → アーキテクチャよりも開発スピードが重要
  • シンプルなシステム、わずかな変更 → オーバーエンジニアリング
  • チームに十分な DevOps 経験がない → マイクロサービスにより運用が複雑になる

5. このシリーズの概要

5.1 学習ロードマップ

Phần 1-3:  Backend Foundation → DDD, Service Design, Data Architecture
Phần 4-5:  Micro Frontend    → Architecture, Implementation, Design System
Phần 6:    Integration Layer  → BFF, API Gateway, GraphQL Federation
Phần 7-8:  Quality & Deploy   → Testing, CI/CD, Deployment Strategies
Phần 9:    Production         → Observability, Performance, Readiness
Phần 10:   Real World         → Case Study, Migration Guide

5.2 横断的なプロジェクト

シリーズ全体を通じて、完全な E コマース プラットフォームを設計します。

  • 5 つのマイクロサービス: ユーザー、製品、カート、注文、支払い
  • 5 つのマイクロ フロントエンド: ホームページ、製品詳細、カート、チェックアウト、アカウント
  • 共有: 設計システム、認証、API ゲートウェイ

概要

建築いつ使用するか主なトレードオフ
モノリス小規模チーム、MVP、シンプルなシステム始めるのは簡単だが拡張するのは難しい
マイクロサービス大規模なチーム、独立して拡張する必要がある複雑な運用とデータ
マイクロ フロントエンド多くの FE チームは個別に展開する必要がありますバンドル サイズを増やすには、システム設計が必要です
フルスタック (MS + MFE)大規模な組織、複雑な製品高い DevOps 成熟度が必要

続きを読む


次の記事: レッスン 2: ドメイン駆動設計 — システム分離の考え方