2016-05-13 9 views
0

モノリスを個別のモジュールとサービスに分割した経験がある方。マイクロサービスに移行する際のベストプラクティス

私はこの質問を既にマーティンファウラーのブログMonolithFirstのブログエントリを読んでいると尋ねています。モノリスを取り、それをマイクロサービスに分割するとき、方程式の「サイズ」要素は、私が最も熟考したものです。具体的には、モノリスアプリケーション(おそらく2001年:Space Oddessy、それは古いものとそうであるもののようなものです)を細かく細かくしたり、あまりにもモノリシックにしたりすることなくマイクロサービスに分割する方法です。最終的な目標は、独立してアップグレードし、独立して拡張できる個別のモジュールを作成することです。

モノリスをマイクロサービスに分割した個人的な経験に基づいて推奨されるベストプラクティスは何ですか?

答えて

1

境界条件に基づいてモノリスを壊しています。有界のコンテキストを定義する最も一般的な方法は、BU(ビジネスユニット)を使用することです。たとえば、実際の支払いを行うモジュールは、ほとんどが別個のBUです。

2番目に考慮する必要があるのは、オーバーヘッドマイクロサービスがもたらすものです。サービスを完全に破棄する前に、ハードウェア、監視、インフラストラクチャを分析する必要があります。私が見てきたのは、10の新しいサービスとモノリスクの価値を下げることを言うというよりも、モノリスから小さなマイクロサービスを取っている人々です。

私の助言には段階的アプローチがあります。モノリスから作業中の最初のBUを取る。これはまた、チーム全体のためのgoos学習曲線を与えるでしょう。

+0

これは当然のアドバイスです。私は特にチームの学習曲線を克服する上での視点に感謝します。 –

1

あなたは明確にドメインからサブドメイン領域(限定されたコンテキスト)を区別する必要があります。

通常、すべてのアーキテクチャで問題がなければ、各サブドメインを担当するモノリスアプリケーションにはいくつかのコンポーネントがあります。これらのコンポーネントは、1つのプロセス(モノリスアプリケーションで)で互いに相互作用し、それらを別々のプロセスに配置する方法について考える必要があります。もちろん、モノリスの一部をマイクロサービスに移動するときには、多くのリファクタリングを生成する必要があります。

すべてのマイクロサービスは、いくつかのサブドメインの責任を負います。

ドメインドリブンデザインを強くお勧めします。

  • Implementing Domain-Driven Design by Vaughn Vernon
  • Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans

    • もまた、あなたのmicservicesが相互作用する方法を決定する必要があり初めにCQRS pattern

      を学びます。別

    • 1つのサービスから

      • 直接呼び出し
      • と呼ばれる(宛先)のサービスが配置されている知識から、クライアントサービスを抽象化し、いくつかのディスパッチャサービス を介してメッセージを送信する: には、いくつかのオプションがあります。 このアプローチは、NGINXのようなプロキシサーバーがどのように機能するかと似ています。
      • 一部メッセージング・バス(ミドルウェア)を介して相互作用、RabbitMQ

      のようにあなたが例えばクエリ要求がディスパッチャサービス、コマンドおよびイベントメッセージバスを介してを通して処理することができ、これらのオプションを組み合わせることができます。

      私の経験から、最も大きな問題は単一のデータベースである のモノリスアプリケーションが通常使用されていることです。また

      いくつかの良いプラクティス:

      • 独自のリポジトリ内の各microserviceを入れて - これは直接別に一つのマイクロサービスのコードを使用する機能から分離します。 また、CI上の各マイクロサービスのチェックアウトとビルドが高速になります。
      • サービスとのやりとりは、公開契約を介してのみ行われます。
      • また、各microserviceは、いくつかの観光産業アプリケーション用サブドメイン(有界コンテキスト)の独自のデータベース

      例を有することを熱望することが必要です。 それぞれの制限されたコンテキストは、マイクロサービスによって処理することができます。

      Application sub-domains

    1

    我々はまた、いくつかの時間バック私たちの旅を始めたと私はまったく同じことのためのブログのシリーズを書き始めた:https://dzone.com/articles/how-i-started-my-journey-in-micro-services-and-how

    は基本的に私は理解何差分に私の問題を破ることです。マイクロサービス、私はドメイン駆動設計が提供する設計フレームワークが必要です(Vaugh VernonによるDomain Driven Design Distilled Book)。

    次に、デザインを実装するには(CQRSとEvent Sourcingを使って...)私は上記のすべてのサポートを提供するフレームワークが必要です。

    私はLagomがこれに適していることを発見しました(Eventuate、Spring Microservicesは他の選択肢です)。

    サンプルマイクロソフトによってドメイン駆動設計を使用してMicroservicesドメイン分析:https://docs.microsoft.com/en-us/azure/architecture/microservices/domain-analysis

    つ以上の分析は次のとおりです。私はlagomと上記のリンクはに終止符を構築するためにあなたを助けるだろうと思いhttp://cqrs.nu/tutorial/cs/01-design

    ドメイン駆動設計に読んだ後エンドアプリケーション。まだ疑問が残っている場合は、お持ちください。

    関連する問題