ニアリアルタイム処理を作成する方法
バッチ処理をニアリアルタイム処理に置き換えるにはどうすればよいのか。ニアリアルタイム処理の作成は「データパイプラインを作ることから始まる」と暮林氏は言う。データパイプラインはバッチで作成するジョブフローと見た目は似ているが「違いがある」と暮林氏。ジョブフローが着目しているのはいかにジョブを正確に処理するかであり、「ジョブフローを管理はあくまで処理順序を制御しているだけで、特にデータの中身を見ていない。とにかく戻り値がゼロで返ってくればよく、細かいことをする場合は、アプリケーション側でジョブフローに合わせた処理を書かなければならない」と暮林氏は説明する。一方のデータパイプラインは、データが一つずつバラバラに送られていくので、データの中身を見ることができる。その中身によって分流や合流、待ち合わせという処理制御ができるのだ。「このように、データパイプラインが着目しているのはデータなんです」(暮林氏)
ニアリアルタイム処理を簡単に作成する際にソリューションとしてレッドハットが推奨しているのが、Knativeである。Knativeはサーバレスのクラウドネイティブ・アプリケーションをビルドするためのコンポーネントを、Kubernetesに追加するエンタープライズレベルのオープンソースソリューション。2018年にGoogleによって設立されたプロジェクトで、その後、IBMやRedHat、VMware、SAPなどと緊密に連携して発展し、2022年3月2日にCNCF(Cloud Native Computing Foundation)のプロジェクトとして承認された。
Knativeでできることは「ニアリアルタイム処理だけではない」と暮林氏は続ける。第一に、Kubernetesの拡張なので、CRD(Custom Resource Definition)でシンプルなYAMLにできること。次にサーバレスの仕組みとしてオートスケーリングを利用し、ゼロまでスケールダウン、ゼロまでスケールアウトができること。また、にニーズに合わせたロールアウト戦略もとれること。さらに、SaaSなど多数のソースからのイベントを抽象化してまとめて扱うイベント統合の仕組みもある。加えて、その抽象化したイベントをハンドリングするイベントハンドルの仕組みや、Kubernetes Nativeな拡張性(プラガブル)を有している。
そしてもう一つ、ニアリアルタイム処理を作るためのソリューションとして暮林氏が紹介したのがKnativeで動くサーバレスコンテナプラットフォーム「Camel K」である。「起動時間の速いアプリケーションに向いている」(暮林氏)
Camel Kのプラットフォームでは次のようなことができる。まずは相互接続。「Apache Camelのコンポーネントにより、クラウドネイティブなやり方ですべてを接続できます」(暮林氏)
次にサーバレスなインテグレーション。第三にQuarkusをベースとしたランタイムでの高い効率性。またオーケストレーションも可能。「クラウドネイティブなインテグレーションパターンがすべてできる」(暮林氏)
そのほか、Knativeだけではなく、Kafka、OpenShiftなどのさまざまな環境に自動的に対応できること、開発者フレンドリーであることなどの特徴を持つ。
Camel Kを使うと開発がどのようにシンプルになるのか。それを表したのが次の図である。
最初のステップでは開発者が統合定義を作成。そして第二ステップで開発者がクライアントコマンドを実行して統合を実行する。さらに第三ステップでCamel Kオペレータが新しい統合リソースを認識し、自動的にビルドしてデプロイする、という流れだ。ニアリアルタイム処理がどのぐらいのオーダーなのか、その感覚をつかむため、暮林氏は処理に要する時間を計測する仕組みも入れてデモを実施。リハーサル時のコールド時が14秒(1.4×10の1乗)、ウォーム時は43ミリ秒(4.3×10の-2乗)に対して、デモでの実測値はコールド時がリハーサル時とほぼ同じ14秒。ウォーム時はすべて起動しているときは10の-3乗というオーダーで処理が実施された。ちなみにコールド時が遅いのは、スピンアップに1個あたり5秒弱かかるからである。またCamel Kで分岐や合流のパイプラインも容易に書くことができる。
さらにYAMLを書くツールとして、暮林氏は「Karavan Designer」も紹介。Camel KによるIntegration DSLをグラフィカルにコーディングできるツールで、「Visual Studio Codeのプラグインとして利用するのが最も簡単だが、スタンドアローンで動くモノもある」と暮林氏は言う。