マイクロサービスに移行するときによくある1つの悪い決定に関する記事。Microsoftや他の企業は、チュートリアルでエンティティサービスの作成を検討していますが、それをアンチパターンと見なす理由はすべてあります。次に、エンティティサービスとは何か、エンドシステム全体に対してどのようなプロパティがあるかについて説明します。
エンティティサービス-それは何ですか?そして、それを作成するというアイデアはどのようにして生まれますか?
モノリスをマイクロサービスに分割することには多くの利点があると誰もが聞いています。柔軟性、シンプルさ、スケーラビリティ、フォールトトレランスなどを向上させます。ただし、複数のマイクロサービス間でトランザクションを共有することは不可能であるため、データの一貫性を確保することの複雑さに対するマイクロサービスアプローチに対する批判も耳にします。これらはhttp経由で通信します。また、システム自体は全体として複雑になります。http呼び出しを削除し、コードからの通常の呼び出しですべてを1つのモノリスに戻す方がはるかに簡単です。
これは、モノリスをいくつかの構成要素に単純に分割するだけでは不十分であることを示唆しています。あなたはそれを正しくしなければなりません。一般的なモノリスはデータベースで動作し、パフォーマンスとフォールトトレランスを向上させるために複数のインスタンスが含まれています。
私たちのモノリスがオンラインストアであると仮定しましょう。製品のリストが含まれており、ユーザーとして登録、注文、支払い、配送の手配を行うことができます。モノリスをマイクロサービスに分割するというアイデアがあります。モノリスコード内には、注文、製品、ユーザー、配送などのエンティティがすでに存在します。それらを個別のマイクロサービスとして分離するのが最も簡単です。コード内の呼び出しをhttp経由の呼び出しに置き換えたり、エンティティコードを新しいサービスにコピーしたり、APIファサードを作成したりするだけで十分です。その結果、ご注文、ユーザー、商品、配送などのサービスをご利用いただけます。
この図では、注文の登録と配送の計画はファサード内に残っていますが、別々のサービスに移動できます。この例では、これは最も重要なことではありません。
- Entity Service. , CRUD .
, ( ) entity . . .
:
. , ( ). , .
. - , . , . , - , - .
. , . Jaeger Jaeger: open source, end-to-end distributed tracing.
. , .
Microsoft : Creating a simple data-driven CRUD microservice
Entity Service?
entity service . ( ). :
;
, ;
, . , - ;
( , );
;
.
Entity Service :
API , . , - . , . . , .
entity service. , . , -, - :
- . - . - . , . , . . , , , . . .
. . , , . , , - - . . .
, , . - (immutability). - , . :
.
-.
-.
, .. .
(eventual consistency).
. , .
:
.
.
- . . , .
注意を払うのが理にかなっているもう1つのオプションは、サブドメインによるマイクロサービスの割り当てです。 パターン:サブドメインによる分解 上記のリンクに従ってマイクロサービスに分割するためのオプションは他にもありますが、最初に上記の2つを検討することは理にかなっています。
両方のオプションはうまく調和します-簡単に組み合わせることができます。主なことは、エンティティサービスのすべての欠点を回避することです 。
練習中にこのアンチパターンに遭遇したことはありますか?すでに存在するシステムのリファクタリングをどのように提案しますか?質問をし、コメントであなたの考えを表現してください。あなたの意見は面白いです!