web-dev-qa-db-ja.com

マイクロサービスの命名に関して、ベストプラクティスは何ですか?

私は「モノリシック」から来ていますSOA APIマインドセット、つまり永続化のためのRESTfulサービスは1つしかない(persistence-app)です。今、マイクロサービス環境で開発しているので、大きなモノリシックサービスを次のようないくつかの独立したマイクロサービスにさらに分離するのが最善だと思います。

  • DAOレイヤー(各エンティティが持つ独自のマイクロサービス(例:ユーザーアプリ、注文アプリ、アイテムアプリ))
  • 検証レイヤー(エンティティを作成するなどのリクエストかどうかを確認する検証)
  • ビジネスロジックレイヤー(顧客の注文を作成することを想定し、DAOマイクロサービスにアクセスする別のマイクロサービスが存在する必要があります)

古いアプローチから:クライアント->永続化アプリ...

これで、クライアント->検証レイヤー->ビジネスロジックレイヤー-> DAOレイヤーになります。

私の質問は、これらのマイクロサービスにどのように名前を付けるのですか?以前は、1つの名前でしたが、基本的には「永続化アプリ」でした。それを、独自の機能を備えたはるかに定義されたサービスに分離したので、これらに名前を付けるためのベストプラクティスは何ですか? 「user-service」、「user-validation-service」、「user-order-logic-service」?

9
mpmp

あなたの質問を読んでいるあなたが私と同じようにマイクロサービスについて考えているとは思いません。

たとえば、検証マイクロサービスは作成しません。理論的には、私はそれが機能することを確認できますが、UserServiceにAddUser()メソッドがあると言ってください。

検証ロジックを分離することはすべてうまくいきますが、他に何も呼び出さない場合は、そのコードをサービスとして公開しません。

マイクロサービスは、既にある水平層ではなくモノリスの場合、垂直スライスと見なされます。

だから私にとってネーミングは簡単です。 UserService、OrderServiceなどは、これらをさらに分割できる複雑なケースがあるかもしれませんが、分割を示唆するロジックから名前が明確になります。つまり、AdminUserService/UserService

明らかに、2つのサービスがいくつかの内部ロジックを共有し、それを独自のサービスに分割することが理にかなっている場合があります。しかし、繰り返しになりますが、ネーミングはレイヤーではなくコードの目的から明らかです。つまり、AccountServiceとOrderServiceの両方がOrderPricingServiceを呼び出す場合があります。

さらに、「サービス」という言葉にこだわらないでください。UserRepositoryは、httpを介してアクセスする場合でも、メモリ内でアクセスする場合でも、リポジトリです。

また、すべてのOOPオブジェクトをビジネスロジックで破棄しないでください。意味のある場合を除き、すべてを手続き型にしてください。サービスでは、オブジェクトをインスタンス化し、高レベルのマイクロサービスでメソッドを呼び出すことができます。それらすべてを個別のOrderBusinessLogicService.ProcessOrder(Order o)サービスに変換するより

11
Ewan