マイクロサービスではサービスの分割が1つの肝になりますが、分割の方法としてはいくつかの考え方があります。
例えば、DDDの境界づけられたコンテキスト。 Domain analysis for microservices - Azure Architecture Center | Microsoft Docs にわかりやすくまとめられています。
他に、How to Partition Your Data Between Microservices では、データの視点から分割を考察していました。
組織の形にも関係すると言われます。これは、コンウェイの法則でも言われている通りです。
実際に色んな会社の方とマイクロサービス分割の話をすると、組織やサービスの違いが大きく関わりケースバイケースだという話になってしまいます。
ECにおけるマイクロサービス分割
さて、ECにおいてはどのように分割すればいいのでしょうか。
コンウェイの法則はそのとおりだと感じていますし、組織毎に異なる。セオリーもない。果たして、本当にそうでしょうか?
世の中にたくさんのECが存在し、どのECでも必ず存在しているものがあるはずです。
イメージしてください。商品、検索、カート、レジ、決済あたりは必ず存在しています。
システムとしての共通点は比較的多いECでは、マイクロサービス分割でも何か共通点があるのではないかと思い事例を調べてみました。
ところが、実際のサービスでの事例というものは意外にも少ないものでした。公開されている事例が少ないというだけで、実態は定かではありませんが。
それでもサンプルやデモというものも見つかったので、それらも含めてどのようなサービスが存在するかをみていこうと思います。
7つの例をみてみる
1. eShopOnContainers (.NET Sample)
https://github.com/dotnet-architecture/eShopOnContainers
.NET でのマイクロサービスのサンプルです。
ID、注文、カート、マーケティングなどに分割していました。
- Identity
- Ordering
- Buscket
- Marketing
- Locations
2. Online Store Application using Microservices and Bluemix
Microservices Online Store Sample Application using Bluemix
Bluemix でのサンプルです。
こちらでは、注文と商品で分割しています。
- Catalog
- Orders
3. Red Hat Cool Store Microservice Demo
https://github.com/jbossdemocentral/coolstore-microservice
こちらは Red Hat です。
在庫からレビューや価格まで、結構細かく分割しています。
- Catalog
- Cart
- Inventory
- Pricing
- Rating
- Review
4. Apigee | Google Cloud Platform
Managing the Complexity of Microservices Deployments
Apigee と GCP による事例です。
商品、在庫、アカウントなど。
- Catalog
- Account
- Inventory
- Cart
- Order
なんとなくベーシックなものが見えてきますね。
5. Sock Shop is maintained by Weaveworks and Container Solutions
Weaveworks によるサンプルECです。
こちらでは配送が出てきました。
- Payment
- Order
- Cart
- User
- Shipping
6. commercetools
Microservices for Modern Commerce
Microservices for Modern Commerce という書籍より。
- Cart
- Pricing
- Promotions
- Products
- Inventory
- Payment
7. Gilt
AWS re:Invent 2016: From Monolithic to Microservices: Evolving Archit…
そして、最後に Gilt です。
- Account
- User
- Cart
- Shipping
共通点はあるのか
見てみるとやはり共通のものがいくつか上がってきます。
以下は事例としても多いのではないかと感じました。
- Order
- Cart
- Catalog(Products)
- User
- Payment
- Inventory
- Shipping
こうして見ると組織によって異なるとしながらも、分割しやすい形はある程度決まってくるのでなないかと思います。
まとめ
組織ごとにマイクロサービス分割は異なります。
そこに絶対のルールはないし、自社の課題に合わせた構成が必要です。
一方で、マイクロサービスにする上で参考になる事例はあるということがわかります。
組織違えど、ECというシステムの視点からは同じようなサービスの分割になっていくようです。
組織やデータ、境界づけられたコンテキストなどで自社の課題に合わせてマイクロサービス分割をしていくとともに、自社の類似サービスの事例を探すことで何かアイデアをもらえるかもしれません。
繰り返しになりますが自社の課題を見定めて、どのようなサービスを作っていくかを考えていくことが一番大事です。
事例を参考にしても、事例に従わないようにしなければいけません。