[メモ] 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があって、分散システム特有の処理などを分離する先として、サイドカーを使いましょう、と言うのは納得しやすい。というかその例は多いよねと
    • 会社や組織の規模によるが、サイドカーの規模・機能が大きくなったり、数が増える事で管理・運用のコストが上がる事が容易に想像できるので、組織面やら運用面やらも考慮して考える必要はある
      • パフォーマンスを考慮して、サイドカーは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/