Thoughts about oslo.messaging Kafka driver
(OpenStackについては素人なので間違ったことをいろいろ書いてるかもしれない)
OpenStackはクラウド環境を構築するためのオープンソースプロジェクトで、VMなどユーザー向けの計算資源を管理するサービス(Nova)や認証を提供するサービス(Keystone)etcで構成される。
それぞれのサービス、例えばNova自体も、APIエンドポイントであるnova-apiや、VMをホストする各物理マシン上で動作するnova-computeといった複数のコンポーネントで構成される。
nova-apiからnova-computeへのVMの作成要求といった各コンポーネント間のRPCは、MQを経由することで疎結合性を担保する。
refs:
各コンポーネントからMQへのアクセスはoslo.messagingとよばれるライブラリとして抽象化されていて、特定のMQに依存しない形になっている。
oslo.messagingは、上記に述べたRPCの他に、Notificationを行うAPIも提供する。
たとえばnova-computeで特定のアクションを実行した際にnotificationをMQに送ることで、外部のモニタリングツール等がMQ経由でnova-computeの状態変化を観測する、といったユースケースが想定されているようだ。
oslo.messagingにおいて、MQごとの具体的な処理を実装するレイヤーはdriverと呼ばれる。
OpenStackのMQとして広く利用されているのはRabbitMQだが、Kafkaも利用可能のようだ。
そしてWallaby現在、Kafka driverでサポートするのはnotificationのみで、RPCは対象外とある。
Kafkaはstream processingに最適化されたミドルウェアなので、これは妥当な判断に見える。
(もしKafka driverでRPCをサポートしようとした場合)たとえば全nova-computeノードにmessageをブロードキャストするようなケースを考えてみる。
Kafkaでこれを実現しようとするなら、あるtopic-partitionを用意して、全nova-computeがそのpartitionをsubscribeするという形になる。
Produce/consumeはpartition leaderに対してのみ可能だが、leaderは単一のKafka brokerなので、ここがscalability limitになるのは容易に想像できる。