ZeebeはCamundaが開発したワークフローエンジンだ。クラウドネイティブソフトウェアアーキテクチャで動作する高性能アプリケーションのスケーラビリティ要件を満足し、複数のマイクロサービスにわたるワークフローを低レイテンシ、高スループットのシナリオでサポートするように設計されている。メッセージイベントをサポートすることにより、イベント駆動型アーキテクチャ(EDA)で運用することができる。無償のコミュニティエディションとして先頃リリースされた新リリースの0.20.0は、実運用に対応可能とされている。
プロダクトマネージャのMichael Winters氏によると、実運用対応(production ready)とは、新たなバージョンが、オーケストレーションのユースケースを信頼できる方法で処理可能だ、という意味である。実運用対応というラベルをリリースに付ける要件は、次のとおりだ。
- マイクロサービスオーケストレーションのユースケースの大部分について、BPMN要素を介してビジネスロジックをサポートすること
- Kubernetesクラスタ上で、水平方向にスケーリング可能であること
- フォールトトレラントであること — ノードダウン時にデータの損失がなく、そのような障害が発生しても回復可能であること
- Docker、Kubernetes、Apache Kafkaなどのクラウドネイティブコンポーネントと連携すること
- 監視、トラブルシューティング、監査のためのワークフローデータを提供すること
従来のワークフローエンジンは、ワークフローインスタンスの現在の状態をデータベースに保存していた。Zeebeはその代わりにイベントソーシングを使用して、すべての状態変更を不変(immutable)なイベントとして追加専用のイベントログに保存する。ワークフローの現在の状態のプロジェクションは、RocksDBを使用してスナップショットとして保存される。ログとスナップショットの両方がディスクに保存されることになるが、現時点ではこれが唯一の選択肢だ。その他のオプションも検討されているが、現在はロードマップに記載されていない。
必要なフォールトトレランス、レジリエンス、水平スケーラビリティを実現するために、Zeebeは、中心的なコンポーネントやデータベースを持たない分散システムとして構築されている。ピア・ツー・ピアクラスタ内に、複数のZeebeブローカをセットアップすることが可能である。クラスタ内のデータのルーティングにはGossipプロトコルが使用される。イベントログのレプリケーションには、Raftコンセンサスアルゴリズムを採用している。スケールアウトはパーティションを使用して、パーティション毎に分離したイベントログを用意することで可能だ。
ZeebeはJava仮想マシン(JVM)上で、独自のインスタンスとして動作する。すなわち、ネットワーク経由でZeebeと通信するアプリケーションを使用する、リモートエンジンアプローチである。パフォーマンスを維持するためには、クライアントへのストリーミングと、バイナリプロトコル(gRPC)が使用されている。このアプローチによってZeebeの定義済みセットアップと環境が構築され、アプリケーションコードからのアイソレーションが実現される。
ZeebeはACIDトランザクションプロトコルを実装していない。この問題の影響を軽減し、ワークフロー内からのタスク実行によって発生する可能性のある障害を処理するには、2つのオプションがある。ジョブの完了後にZeebeに通知することで、"少なくとも1回(at least once)"は実現可能である — Zeebeは失敗を認識し、そのタスクを再実行する。ジョブの完了前にZeebeに通知すれば、"最大で1回(at most once)"が実現できる — Zeebeは障害を認識せず、タスクは再実行されない。イベント駆動型のアーキテクチャでは、ワークフローが外部メッセージをサブスクライブ可能で、Zeebeはこれらのメッセージを処理する場合、"正確に1回(exactly-once)"をサポートする。
Zeebeはイベントソーシングを使用していることから、問題のある、例えばワークフローインスタンスを見つけるためのクエリを簡単に処理することはできないので、代わりにエクスポータとCQRSという概念を採用している。エクスポータはイベントストリームにアクセスして、データのプロジェクションを作成することができる。このテクニックは、Zeebeの付属ツールであるOperateで、ワークフローの監視とトラブルシュートを行うために使用されている。
近年、オープンソースとソース利用可能ライセンスに関する議論があり、オープンソースソフトウェアを提供する企業がライセンスを制限して、アズ・ア・サービスのプロバイダがマネージド・サービスを提供できないようにしている。Zeebeも同じようなソース提供ライセンスのZeebe Community Licenseで提供されており、Zeebeを使用したワークフローサービスの商用提供は許可されていない。Operateツールはまだプレビュー段階であるため、非実稼働に限って無償で使用可能な開発者ライセンスで提供されている。いずれの製品もエンタープライズサポートを受けることが可能だ。
最後の開発者プレビューリリースである0.18.0において、すでに機能的には完成(feature complete)していたが、今後の運用展開から学ぶべきことが多いという考えから、Zeebeの開発チームは、実運用に対応可能であることと対応の完了を区別するため、新リリースを1.0.0ではなく、0.20.0と呼ぶことに決定した。
2回にわたるブログ記事では、Camunda創設者のひとりでチーフアーキテクトのBernd Rücker氏が、Zeebeの基本と主要概念に加えて、同社が高度にスケーラブルな分散ステートマシンを構築した方法について説明している。
Zeebeの主要概念を理解し、ワークフローを立ち上げて実際に運用するためには、"getting started"チュートリアルが有用だろう。