dskst's diary

Life and Tech Blog

ECにおけるマイクロサービス分割を考察する

マイクロサービスではサービスの分割が1つの肝にります。
分割の方法としてはいくつかの考え方があります。

例えば、DDDの境界づけられたコンテキスト。 マイクロサービスのドメイン分析 | Microsoft Docs にわかりやすくまとめられています。

f:id:dskst9:20190113215748p:plain
境界づけられたコンテキスト

他に、How to Partition Your Data Between Microservices では、データの視点から分割を考察していました。

組織の形にも関係すると言われます。これは、コンウェイの法則でも言われている通りです。

実際に色んな会社の方とマイクロサービス分割の話をすると、組織やサービスの違いが大きく関わりケースバイケースだという話になってしまいます。

ECにおけるマイクロサービス分割

さて、ECにおいてはどのように分割すればいいのでしょうか。

コンウェイの法則はそのとおりだと感じていますし、組織毎に異なる。セオリーもない。
果たして、本当にそうでしょうか?

世の中にたくさんのECが存在し、どのECでも必ず存在しているものがあるはずです。
イメージしてください。商品、検索、カート、レジ、決済あたりは必ず存在しています。

システムとしての共通点は比較的多いECでは、マイクロサービス分割でも何か共通点があるのではないかと思い事例を調べてみました。

ところが、実際のサービスでの事例というものは少ないものでした。
それでもサンプルやデモというものも見つかったので、それらも含めてどのようなサービスが存在するかをみていこうと思います。

7つの例をみてみる

1. eShopOnContainers (.NET Sample)

f:id:dskst9:20190113175834p:plain
eShopOnContainers for .NET

https://github.com/dotnet-architecture/eShopOnContainers

.NET でのマイクロサービスのサンプルです。
ID、注文、カート、マーケティングなどに分割していました。

  • Identity
  • Ordering
  • Buscket
  • Marketing
  • Locations

2. Online Store Application using Microservices and Bluemix

f:id:dskst9:20190113180457p:plain
Online Store Application using Microservices and Bluemix

Microservices Online Store Sample Application using Bluemix

Bluemix でのサンプルです。
こちらでは、注文と商品で分割しています。

  • Catalog
  • Orders

3. Red Hat Cool Store Microservice Demo

f:id:dskst9:20190113210952p:plain
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

f:id:dskst9:20190113211057j:plain
Managing the Complexity of Microservices Deployments

Managing the Complexity of Microservices Deployments

Apigee と GCP による事例です。
商品、在庫、アカウントなど。

  • Catalog
  • Account
  • Inventory
  • Cart
  • Order

なんとなくベーシックなものが見えてきますね。

5. Sock Shop is maintained by Weaveworks and Container Solutions

f:id:dskst9:20190113211145p:plain
Sock Shop is maintained by Weaveworks and Container Solutions

Microservices Demo: Sock Shop

Weaveworks によるサンプルECです。
こちらでは配送が出てきました。

  • Payment
  • Order
  • Cart
  • User
  • Shipping

6. commercetools

f:id:dskst9:20190113182542p:plain
Micorservices for Modern Commerce

Microservices for Modern Commerce

Microservices for Modern Commerce という書籍より。

  • Cart
  • Pricing
  • Promotions
  • Products
  • Inventory
  • Payment

7. Gilt

f:id:dskst9:20190113211224j:plain
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というシステムの視点からは同じようなサービスの分割になっていくようです。

組織やデータ、境界づけられたコンテキストなどで自社の課題に合わせてマイクロサービス分割をしていくとともに、自社の類似サービスの事例を探すことで何かアイデアをもらえるかもしれません。

繰り返しになりますが自社の課題を見定めて、どのようなサービスを作っていくかを考えていくことが一番大事です。
事例を参考にしても、事例に従わないようにしなければいけません。