Cloud Native Wasm DayからKafkaの拡張にWasmを使うRedpandaのセッションを紹介

2024年1月24日(水)
松下 康之 - Yasuyuki Matsushita
KubeCon+CloudNativeCon North America 2023の併催イベントCloud Native Wasm Dayから、Redpand Dataのセッションを紹介する。

2023年11月6日に、KubeCon+CloudNativeCon North America 2023の併催イベントとして開催された、WebAssemblyに特化したミニカンファレンスCloud Native Wasm Dayから、Kafkaをリプレースするソリューションを展開するRedpanda DataのTyler Rockwood氏のセッションを紹介する。

ストリーミングデータ処理を高速化するRedpandaにWasmを応用

ストリーミングデータ処理を高速化するRedpandaにWasmを応用

Rockwood氏はまずRedpandaの概要を解説。ここでは高速なストリーミング処理エンジンとして紹介しているが、KafkaのAPI互換であるため、すでにKafkaで構築されているストリーミング処理アプリケーションを容易に置き換えが可能であることが最初に強調されている。ストリーミング処理のためにRaftを使ったコンセンサスシステムを採用しており、最低でも3つのプロセスが同時に処理を行い、データが失われることがないことを保証している。またシングルバイナリーであることで、依存関係による脆弱性が起こらないということも説明された。

Redpandaの概要を解説。Kafka互換であることが最大の特徴

Redpandaの概要を解説。Kafka互換であることが最大の特徴

Kafkaと同じAPIで処理を行うが、その構造は違うとして例を挙げて説明を行った。ここではECなどの売上データからのストリームを受けてトランザクション処理を行うアプリケーションが、そのデータを使って不正行為を発見するという別のアプリケーションにデータを受け渡す場合を解説している。

リアルタイムの売上データから不正を処理するアプリにデータを渡す例を解説

リアルタイムの売上データから不正を処理するアプリにデータを渡す例を解説

この例では、個人情報などが付随したデータを使って不正かどうかを判定するアプリが実行されるが、このデータを別のアプリが使おうとした場合にKafkaでは複雑な構成になることを示しているのが次のスライドだ。

不正判定のアプリとは別のアプリを追加できない構造のKafka

不正判定のアプリとは別のアプリを追加できない構造のKafka

その場合は、一旦、Apache Flinkを経由して個人情報を削除する処理をKafka内で実行した後に別のアプリ、この例では在庫補充のためのアプリにデータを引き渡すことになると解説した。

不正判定のアプリとは別の在庫処理のアプリを追加するにはApache Flinkを経由する

不正判定のアプリとは別の在庫処理のアプリを追加するにはApache Flinkを経由する

この例におけるKafkaの部分をRedpandaで置き換えた例が次のスライドだ。

Redpandaの中でデータがWebAssemblyのモジュールを経由して処理が実行される

Redpandaの中でデータがWebAssemblyのモジュールを経由して処理が実行される

この部分を拡大して解説したのが次のスライドだ。ここではストリーミングとして流れてくるデータをLogと称しているが、それが直接WebAssemblyを経由して別のLogとして処理が行われる様子が解説されている。

LogがWasmを経由して別のアプリケーションに送信される概要を解説

LogがWasmを経由して別のアプリケーションに送信される概要を解説

より詳細にはWebAssemblyの部分がブローカーとして動作し、ひとつのファンクションが3つに複製されそれぞれのCPUのコアを利用する形でプロセッサパワーと必要十分なメモリーを確保することで高速処理が実現されていると解説している。

ブローカーの中でプロセスがコアとして複製されて実行される

ブローカーの中でプロセスがコアとして複製されて実行される

それぞれがRaftの合意システムによってデータの保護を行っていることが大まかに解説されている。

そして「どうしてRedpandaがWebAssemblyを利用することにしたのか?」については、どのプログラミング言語でも実装できること、実行時間の制限を厳しく実装できること、そしてPOSIX互換のサンドボックス機能が存在することを挙げた。

RedpandaがWebAssemblyを使う理由を解説

RedpandaがWebAssemblyを使う理由を解説

実際にターミナルからRedpandaのCLIを使って変換を行うアプリケーションを作成する部分を解説。ここで登場する「rpk」というのがRedpandaによって開発されたモジュールで、プロジェクトの初期化からビルド、実装までが単一のアプリケーションで実行可能であることがわかる。

ターミナルからRedpandaのプログラムを利用する例

ターミナルからRedpandaのプログラムを利用する例

Redpandaが高速であるという部分については非同期処理とスレッドをCPUのコアに固定する機能が主な要因であると説明し、メモリーを共有しない構造、メッセージ処理の部分にメッシュ化したネットワークを利用していること、それを可能にしているのはC++20で書かれたSeastarフレームワークのお陰であると説明。SeastarはApache Cassandra互換のNoSQLデータベースで、Scyllaでも利用されている高速なライブラリーだ。

●参考:Seastar

Redpandaの高速処理を可能にする背景を解説

Redpandaの高速処理を可能にする背景を解説

ここから実際のプログラム内部のスタックがどのようにスイッチされるのかを解説している。

コアのアプリケーションからWasmのモジュールにデータを引き渡す例を解説

コアのアプリケーションからWasmのモジュールにデータを引き渡す例を解説

WebAssemblyの中でのメモリーの使い方などをより詳しく解説し、高速処理のためにはなるべくメモリー間のデータ移動を避ける、動的にメモリーを割り付けない、そしてプロセス間のコンテキストスイッチを減らすことなどが重要と説明した。

Redpandaが利用するWebAssemblyモジュールのメモリー管理について解説

Redpandaが利用するWebAssemblyモジュールのメモリー管理について解説

最後にサマリーとしてRedpandaがKafkaの処理をWebAssemblyによって高速化できること、シンプルなプログラミングモデルで実装できること、そしてスレッドをコアに専有させる処理がWebAssemblyに向いていることなどを説明してセッションを終えた。

これまで組み込み系やエッジでの処理にWebAssemblyを使うという例は多かったが、ストリーミング処理を高速化するためにKafkaの弱点を解消する形でWebAssemblyが利用可能であるという主張は、参加者にとっては新鮮だったのではないだろうか。この内容をより詳細に行ったのが2023年8月にThe Linux Foundationが公開したWebinarの内容である。その概要については以下の記事を参照して欲しい。

●参考:Wasmでストリーミングエンジンを実装したRedpandaを紹介

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

クラウドイベント
第5回

KubeCon+CloudNativeCon North America 2023のキーノートとショーケースを紹介

2024/2/16
パンデミック後、最大のOSS系カンファレンスとなったKubeCon+CloudNativeCon North America 2023のキーノートと会場のようすを駆け足で紹介する。
クラウドイベント
第4回

Cloud Native Wasm Dayから大規模言語モデルをWasmで実行するデモを解説するセッションを紹介

2024/2/8
Second StateのMichael Yuan氏が解説する大規模言語モデルをWasmで実行するデモのセッションを紹介する。
クラウドイベント
第3回

Cloud Native Wasm DayからWebAssemblyのスケジューラーWADMを解説するセッションを紹介

2024/1/31
Cloud Native Wasm DayからCosmonicのエンジニアが解説する新しいスケジューラー、WADMのセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています