モノリスをマイクロサービスに分割することは、企業が行いうるアーキテクチャ変更の中で、最もリスクが高く、最も大きな見返りが期待できるものの一つです。私たちは、適切なサービス境界の特定、データ所有権の課題管理、本番ワークロードを中断することなく移行を実行することで、数十ものチームをこの移行に導いてきました。
オーケストレーションにはKubernetes、イベントストリーミングにはApache Kafka、サービスメッシュにはIstioまたはLinkerd、GitOpsデプロイメントにはArgoCDを使用しています。各サービスは独立したCI/CD、独自のデータストア、そしてJaegerとPrometheusによる包括的な分散トレーシングを備えています。
モノリスがチームの自律性、デプロイ頻度、またはシステムのスケーラビリティを制限しているエンジニアリング組織向けです。リリースにチーム間の調整が必要な場合、単一コンポーネントの負荷がシステム全体に影響を与える場合、または新しい開発者のオンボーディングに数ヶ月かかる場合は、分解を検討する時期です。
モノリスのドメインを分析し、境界付けられたコンテキストを特定し、コンポーネント間の結合をマッピングします。
目標とするサービスアーキテクチャを設計し、データ分割を計画し、ビジネス価値に基づいて抽出シーケンスの優先順位を決定します。
共有インフラストラクチャ — Kubernetes、CI/CDテンプレート、サービスメッシュ、およびオブザーバビリティスタックを構築します。
アンチコラプションレイヤーを実装し、トラフィックを段階的にルーティングしながら、サービスを一つずつ抽出します。
サービス所有権、オンコール体制、SLO追跡、継続的なアーキテクチャガバナンスを確立します。
我々はdomain-driven designを用いてbounded contextsを特定し、最も結合度の低いモジュールから段階的にサービスを抽出し、routingのためにAPI gatewaysを実装し、migrationプロセス全体を通してbackward compatibilityを維持します。
MicrocosmWorksでのモノリスからマイクロサービスへの移行は、1時間あたり25ドルから50ドルの料金設定です。総費用は、モノリスの規模、結合の複雑さ、および抽出するサービスの数によって異なります。
期間は monolith の規模と複雑さによって大幅に異なります。通常、最初のサービスは4~8週間で抽出し、完全な移行には6~18ヶ月かかります。当社の段階的アプローチは、完全な rewrite を必要とすることなく、各段階で価値を提供します。
リクエスト-レスポンスパターンには同期的な REST または gRPC を、イベント駆動型通信には Kafka または RabbitMQ を介した非同期メッセージングを実装しています。分散トランザクションには saga パターンを、外部ルーティングには API gateways を使用しています。
我々はデータベース・パー・サービス・パターンに従い、サービス固有のテーブルを専用データベースに段階的に抽出しています。移行期間中、共有データベースの依存関係を徐々に分離しながらデータアクセスを維持するために、データベースビュー、CDC、またはAPIコールを使用します。