マイクロサービスアーキテクチャのアプリケーションのバックエンド領域を管理するリポジトリ.
GitOpsの ベストプラクティス に則って,マニフェストファイルは microservices-manifestsリポジトリ で管理しています.
現状,フロントエンド領域のリポジトリは用意しておりません.
↪️ 参考:
SWEチームが以下のようなシナリオで開発運用していること,を想定しながら練習しております.
- 境界付けられたコンテキストごとにマイクロサービスが存在しており,それぞれのマイクロサービスは独立したSWEチームによって開発されている.各マイクロサービスにて,SWEはDocker Composeを用いて開発しており,Kubernetesのマニフェストファイルを仕様を知らなくても良い.全てのマイクロサービスはモノリポジトリで管理されている.
- SWEチームのいずれかは,マイクロサービスのソースコードを変更し,プルリクを作成する.またGitFlowを経て変更がmainブランチにマージされる.この時,異なるマイクロサービスの変更が同時にマージされることはない.
- 本リポジトリ上のCircleCIは,変更されたマイクロサービスを検知し,該当のマイクロサービスのイメージをビルドする.また,AWS ECRにプッシュする.
- CircleCIは,microservices-manifestsリポジトリ をプルし,releaseブランチをチェックアウトする.さらに,HelmのValuesファイルのイメージのハッシュ値の上書きし,コミット&プッシュする. その後,Valuesファイルを変更したプルリクを自動作成する.
- microservices-manifestsリポジトリ 上のGitHub Actionsは,releaseブランチのプッシュを検知する.この時,HelmがValuesファイルを基にしてマニフェストファイルを自動生成し,これをプルリク上にプッシュする.これらにより,Valuesファイルの機密情報のバージョン管理を避けつつ,本番環境では完全なValuesファイルを使用できる.
- SWEチーム/SREチームのリリース責任者が,生成されたマニフェストファイルをレビューし,プルリクをmainブランチにマージする.
- GitHub Actionが,mainブランチのマージを検知し,AWS ECRにチャートをプッシュする.
- AWS EKS上で稼働するArgoCDが,mainブランチのマージを検知し,AWS ECRからイメージをプルする.
- マイクロサービスのデプロイが完了する.
project/
├── ops/ # CIで用いるスクリプト
└── src/ # マイクロサービス
バックエンド領域を構成するマイクロサービスの一覧です.
マイクロサービスは,境界付けられたコンテキストに基づいて分割するようにしております.
マイクロサービス名 | 言語 | フレームワーク | プロキシコンテナ | 境界付けられたコンテキストの説明 |
---|---|---|---|---|
accountサービス | Go | Gin | Envoy | 会計業務ドメインを解決します. |
customerサービス | Python | FastAPI | Envoy | 顧客管理業務ドメインを解決します. |
orchestratorサービス | Python | FastAPI | Envoy | トランザクションの項目を参照. |
orderサービス | PHP | Lumen | Nginx,Envoy | 受注業務ドメインを解決します. |
マイクロサービス間通信の方式は,リクエストリプライ方式を採用し,『API Gateway → マイクロサービスA ⇄ マイクロサービスB』という簡単な構成を想定しております.
オーケストレーションベースのSagaパターンを採用する想定です.
orchestratorサービス を設置し,以下のようにして,このサービスが各マイクロサービスの一連のローカルトランザクションを連続的に実行します.
%%{init:{'theme':'dark'}}%%
graph TD
A([Internet]) --> B[API Gateway]
B ----> C[customer-service]
B --> E[orchestrator-service]
C --> D[(DB)]
E --> F[Queue]
F --> G[order-service]
F --> I[account-service]
G --> H[(DB)]
I --> J[(DB)]
開発環境でのみ使用するツールの一覧です.
役割 | ツール | 導入の状況 |
---|---|---|
メトリクスの可視化 | Prometheus | ⭕ |
ログの可視化 | FluentBit,ElasticSearch,Kibana | coming soon... |
分散トレースの可視化 | Jaeger | coming soon... |
メッシュトポロジー | Kiali | coming soon... |
ロードテスト | Fortio | ⭕ |
CI/CDを構成するツールの一覧です.
シナリオにも記載がある通り,本リポジトリではCIまでを実行し,CDは microservices-manifestsリポジトリ 側で実行します.
役割 | ツール | 導入の状況 |
---|---|---|
CI | CircleCI | ⭕ |
CD | ArgoCD | microservices-manifestsリポジトリ を参照 |
各マイクロサービスのREADMEをご参照ください.