[メモ] Multi-Runtime Microservice Architecture(マルチランタイム・マイクロサービスアーキテクチャ)について

  • マルチランタイム・マイクロサービスアーキテクチャとは
    • インフラストラクチャに関連するものをマイクロサービスから分離する
    • ビジネスロジックを備えたサービスと、分散アプリケーションに必要な状態管理やネットワーク、バインディング、ライフサイクルを担当するサイドカーとを組み合わせたアーキテクチャ
      • サービスメッシュがあるマイクロサービスなどはかなり近い気がするが、より多くの分散システムのニーズをカバーするサイドカーを想定しているっぽい
    • 「ビジネスロジック用のひとつのpod、私が今日話したような分散システムのニーズをカバーする処理を行うひとつのサイドカー、という構成が望ましいと思います」
  • ライフサイクル
    • 現在のアプリケーションには、より早いデプロイ、自動スケーリング、エラーからのリカバリー機能が必要
  • ネットワーク
    • ほとんどのアプリケーションではネットワークを介して何らかの連携を行う
    • 単純なHTTP通信だけでなく、サービスディスカバリやエラーリカバリ、トレースやテレメトリ、pub/subなども
  • 状態管理
    • 「状態(state)を話題にする場合、その多くはサービスの状態や、ステートレスが望ましい理由といったことが多いのですが、サービスを管理するプラットフォーム自体にも状態は必要です。信頼性の高いサービスオーケストレーションの実行、分散型のシングルトン、時間的スケジューリング(cronジョブ)、冪等性、ステートフルなエラーリカバリ、キャッシュなどを行なうには、状態が必要になります。ここで挙げたすべての機能が、内部的に状態を持つことに依存しているのです。状態管理の実際はこの記事の範囲ではありませんが、状態に依存する分散プリミティブやその抽象化は関心の範囲内にあります。」
    • 「State is needed for the platform that manages our services, and this is crucial for reliable workflows and service orchestrations, cron jobs, distributed singleton, stateful error recovery, idempotency, etc. These capabilities and the likes rely hugely on having a state under the hood. 」
  • バインディング
    • 「The components need to integrate and talk to each other in legacy and modern external systems. This means that there is a need for connectors to convert the wide range of protocols while supporting the varied range of message patterns, such as event-driven, polling, transform message formats, request/reply, and also take care of the security mechanisms and recovery procedures.」
  • 感想
    • マイクロサービスアーキテクチャで、Cross-cutting concernをサイドカー、サービスメッシュやAPI Gayewayなどで吸収する仕組み自体はポピュラーな構成と言っていいはず
    • ビジネスロジックを担うPodがあって、分散システム特有の処理などを分離する先としてサイドカーを使いましょう、と言うのは納得しやすい。というか似たような例は既に多い
    • ただ自分が使ってる・知ってるものよりは、より多くの機能をサイドカーに持たせようとしてるっぽい
      • 暗号化とかも触れられてた
      • APIGatewayも出てきてないはず
    • infoqの記事では、パフォーマンスも考慮してサイドカーは1つを想定している
      • その場合、サイドカー自体をどう開発していくかを考えないと、機能増やしすぎる・開発メンバーが増えるが故に開発スピードが落ちて、規模によってはボトルネックになりそう
        • この辺りの最新トレンド等への追従とかを考えると、割と忙しくなりそうな気がする
      • サイドカーのアーキテクチャにモジュラーモノリス採用するのはハマるのでは?
    • とはいえ現実的には全てをサイドカーに寄せる必要もないし、それが出来るケースも多くはない気がする
      • 一部はGateway、一部はライブラリなどと組み合わせる方が一般的
    • 分散システム構築に必要なスキルや考えないといけないことの数を考えると、Cross-cutting concernをどう共通して処理するかはアーキテクチャ上の大事な要素であることは完全に同意
    • そのための一つの考え方として頭の片隅で覚えておく
  • 参考
    • https://www.infoq.com/jp/articles/multi-runtime-microservice-architecture/
    • https://www.infoq.com/jp/news/2020/04/multi-runtime-microservices/
    • http://www.ofbizian.com/2020/05/multi-runtime-microservices-architecture.html
    • https://searchapparchitecture.techtarget.com/tip/A-quick-rundown-of-multi-runtime-microservices-architecture
    • https://walkingtree.tech/introduction-multi-runtime-microservices-architecture/