Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モジュラモノリスのモジュール間通信の話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Ryo Tsukahara Ryo Tsukahara
September 11, 2023
3.6k

 モジュラモノリスのモジュール間通信の話

Avatar for Ryo Tsukahara

Ryo Tsukahara

September 11, 2023
Tweet

Transcript

  1. © DMM.com リポジトリ構成 5 ./apps ├── account # 会員サービス ├──

    payment # 決済サービス └── modular ├── bootstrap ├── cmd ├── config └── module └── salon # サロンモジュール 現状の組織だと、マイクロサービスに 合わせた組織にすることが難しいため 主要サービスのみマイクロサービス + モジュラモノリスとして運用。 事業状況や組織状況に合わせて、モ ジュラモノリスから、マイクロサービス に切り出す。 構成のPros/Consは一般的なモノレポ のものとほぼ同じ。
  2. © DMM.com モジュール直接呼び出しのメリット/デメリット 9 メリット • ネットワークを経由しないため呼び出しが高速 • (RESTの場合) 関数を呼び出せるため型情報を利用できる

    デメリット • interceptor / middleware を挟むのが難しい • モジュールの結合度が上がる ◦ (gRPCの場合は、Server用のIFを利用することでモジュール間の依存 を減らせる) • マイクロサービスへの切り出しが大変
  3. © DMM.com API呼び出しのメリット/デメリット 11 メリット • モジュール間のコード上の依存がない • モジュール間の通信にinterceptor /

    middlewareを利用できる デメリット • ループバックを行うため若干のオーバーヘッドが発生 ◦ gRPCの場合はシリアライズ/デシリアライズのコストも発生
  4. © DMM.com 検証条件 13 • gRPCを利用 • acount, product, payment,

    orderという4つのモジュールを用意し以下ユー スケースを想定 ◦ orderモジュールに product_id を渡して購入処理 ◦ orderモジュールはproductモジュールに在庫問い合わせ & 在庫消費 ◦ orderモジュールはpaymentに支払い実行 ◦ orderモジュールはアカウントサービスから住所を取得 ◦ orderモジュールは購入情報保存をする • interceptorとacount, product, pacymentモジュールのメソッドは 20 ms の 仮想の処理を実行
  5. © DMM.com どちらを利用することにしたか 18 • ②の API呼び出しを利用 • 理由としては ◦

    マイクロサービスへの切り出しを視野に入れているため疎結合な方が 良い ◦ 内部のサービス間通信には内部用の認証情報を用いているため、 Interceptorが利用できないのが辛い ◦ ネットワークのオーバーヘッドが許容レベル • モノリスの代用としてのモジュラモノリスであれば①も良い