BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース NetflixがMQTTとAlpakka-Kafkaのイベントソーシングで信頼性が高くスケーラブルなプラットフォームを構築

NetflixがMQTTとAlpakka-Kafkaのイベントソーシングで信頼性が高くスケーラブルなプラットフォームを構築

原文(投稿日:2021/08/31)へのリンク

Netflixは先頃、MQTTベースのイベントソーシング実装を使用して信頼性の高いデバイス管理プラットフォームを構築する方法を詳しく説明したブログ投稿を公開した。Netflixは、ソリューションをスケールするために、Apache KafkaAlpakka-KafkaCockroachDBを利用している。

Netflixのデバイス管理プラットフォームは、アプリケーションの自動テストに使用されるハードウェアデバイスを管理するシステムだ。NetflixのエンジニアであるBenson Ma氏とAlok Ahuja氏は、プラットフォームが通ってきたジャーニーについて説明している:

Kafkaストリームの処理を正しく行うのは難しい場合があります。(...) 幸い、Akka StreamsとAlpakka-Kafkaによって提供されるプリミティブは、これらのソリューションの構築と維持における開発者の生産性を拡大しながら、ビジネスワークフローに一致するストリーミングソリューションを構築できるようにすることで、まさにこれを実現する力を与えてくれます。Alpakka-Kafkaベースのプロセッサを配置することで (...)、コントロールプレーンのコンシューマ側でフォールトトレランスを確保しました。これは、デバイス管理プラットフォーム内で正確で信頼性の高いデバイス状態の集約を可能にするための鍵です。

(...) プラットフォームとそのコントロールプレーンの信頼性は、MQTTトランスポート、認証と認可、システム監視など、いくつかの分野で行われた重要な作業にかかっています。(...) この作業の結果として、デバイス管理プラットフォームは、システムにこれまで以上に多くのデバイスを搭載するにつれて、時間の経過とともに増加するワークロードに合わせて拡張し続けることが期待できます。

次の図は、アーキテクチャを示している。


出典: https://netflixtechblog.com/towards-a-reliable-device-management-platform-4f86230ca623

ローカルのReference Automation Environment (RAE) 組み込みコンピュータは、複数のテスト対象のデバイス (DUT) に接続する。ローカルレジストリサービスは、RAEに接続されているすべてのデバイスに関する情報を検出、搭載、および維持する責任がある。デバイスの属性とプロパティは時間の経過とともに変化するため、これらの変更をローカルレジストリに保存し、同時にクラウドベースのコントロールプレーンのアップストリームに公開する。属性の変更に加えて、ローカルレジストリは定期的にデバイスレコードの完全なスナップショットを公開する。これらのチェックポイントイベントにより、更新の欠落を防ぎながら、データフィードのコンシューマによる状態の再構築を高速化できる。

更新はMQTTを使用してクラウドに公開される。MQTTは、Internet of Things (IoT) のOASIS標準メッセージングプロトコルだ。これは、軽量でありながら信頼性の高いpublish/subscribeメッセージングトランスポートであり、小さなコードフットプリントと最小限のネットワーク帯域幅でリモートデバイスを接続するのに理想的だ。MQTTブローカは、すべてのメッセージを受信し、それらをフィルタリングし、それに応じてsubscribeされたクライアントに送信する責任をもつ。

Netflixは組織全体でApache Kafkaを使用している。その結果、ブリッジはMQTTメッセージをKafkaレコードに変換する。メッセージが割り当てられたMQTTトピックにレコードキーを設定する。Ma氏とAhuja氏は「MQTTで公開されたデバイス更新にはトピックに device_session_id が含まれているため、特定のデバイスセッションのすべてのデバイス情報更新が同じKafkaパーティションに効果的に表示され、明確に定義されたメッセージの消費順序が得られる」と説明している。

Cloud Registryは、パブリッシュされたメッセージを取り込んで処理し、マテリアライズされたデータをCockroachDBのあるデータストアにプッシュする。CockroachDBは、NewSQLと呼ばれるRDBMSシステムの一種の実装です。Ma氏とAhuja氏は、Netflixの選択について説明している:

CockroachDBは、SQL機能を提供し、デバイスレコードのデータモデルが正規化されているためバッキングデータストアとして選択されました。さらに、他のSQLストアとは異なり、CockroachDBは水平方向にスケーラブルになるようにゼロから設計されており、デバイス管理プラットフォームに搭載されているデバイスの数に応じてスケールアップするCloud Registryの機能に関する関心事に対処します。

次の図は、Cloud Registryを構成するKafka処理パイプラインを示している。


出典: https://netflixtechblog.com/towards-a-reliable-device-management-platform-4f86230ca623

Netflixは、図のストリーム処理パイプラインを実装するために多くのフレームワークを検討した。これらのフレームワークには、Kafka StreamsSpring KafkaListenerProject ReactorFlinkがある。最終的にはAlpakka-Kafkaを選択した。この選択の理由は、Alpakka-KafkaがSpring Boot統合と「自動バックプレッシャサポートおよびストリーム監視を含むストリーム処理のきめ細かい制御」を提供するためだ。さらに、Ma氏とAhuja氏によるとAkkaとAlpakka-Kafkaは他よりも軽量であり、成熟しているため、長期にわたるメンテナンスコストが低くなるとのことだ。

Alpakka-Kafkaベースの実装は、以前のSpring KafkaListsenerベースの実装を置き換えた。新しいプロダクションの実装で測定されたメトリクスは、Alpakka-KafkaネイティブのバックプレッシャサポートがKafkaの消費を動的にスケーリングできることを示している。KafkaListenerと異なりAlpakka-KafkaはKafkaメッセージを過少消費も過大消費もしない。また、リリース後の最大消費ラグ値の低下により、Alpakka-KafkaとAkkaのストリーミング機能は、突然のメッセージの読み込みに直面しても、うまくスケールすることが明らかになった。

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT