Lightbendは最近CloudStateを発表した。Akka、Play、Reactiveのムーブメントに関連するチームによって作成されたCloudStateは、Knative/Kubernetesスタックでステートフルな管理を実現するように設計された最初のオープンソースサーバーレスフレームワークである。
Jonas Bonér氏は次のように述べている。
CloudStateは、状態の管理に関する概念、モデル、実装を追加することにより、「サーバーレス2.0」とは何か、あるいは次世代のサーバーレスとは何かを定義するイニシアチブです。クラウドアプリケーション(分散システム)を構築した人は誰でも、実際には状態に対処するのが最も難しいことを知っていますが、これまでサーバーレスは多かれ少なかれそれを無視してきました。そのため、基本的に2つのミックスに対して状態の概念を追加しようとしています。 1つ目は、これらを実装するための仕様、プロトコル、TCKを定義する標準化作業です。2番目は、仕様を実装するリファレンス実装です。
CloudStateは基本的に2つの要素で構成されている。1つは仕様を定義する標準的な取り組み、ユーザ機能とバックエンド間のプロトコル、TCKである。もう1つは、バックエンドのリファレンス実装とクライアントAPIライブラリのセットを多くの言語で実装されたリファレンス実装である。
CloudStateは、他の一般的な分散パターンと共に、イベント駆動型アーキテクチャ、イベントソーシング、CQRS、クラスタシャーディング、データと処理のコロケーション、CRDのために設計されている。さらに、CloudStateのリファレンス実装は、Knative、gRPC、Akka Cluster、Kubernetesで実行されるGraalVMを活用しているため、アプリケーションは効率的にスケーリングできるだけでなく、グローバルまたはローカルレベルのデータ整合性を維持しながら、分散された状態を大規模に確実に管理できる。
CloudStateサービスがどのように見えるかを見てみましょう。
(https://github.com/cloudstateioからの画像)
- Ingress - Istio、Knative、またはKubernetesでの通常のClusterIPサービス通信
- Akkaサイドカー - CloudStateオペレータによってインジェクトされる。すべてのリクエストが通過する。1つのCloudStateサービスのサイドカーがクラスタを形成し、Akkaリモーティングを使用して互いに直接通信する
- コード - 開発者によって実装される機能。gRPCをサポートする任意の言語で作成できる。Akkaサイドカーは、事前定義されたgRPCプロトコルを使用してユーザ機能と通信する
- 分散データストア - サービスが状態を維持する必要がある場合に使用される。ユーザコードはデータストアと直接やり取りしないことが重要である。Akkaサイドカーとやり取りし、Akkaサイドカーはデータストアと通信する。
CloudStateは独自のオートスケーラーを実装する。Knativeオートスケーラーを使用した実験でAkkaクラスタのスケールアップ時に問題が発生すると、問題の1つは、新しいノードが追加され、シャードがリバランスされ、状態が複製されることである。一度に多くのノードを起動したり、すぐに停止するためだけにノードを起動すると、スループットとパフォーマンスが大幅に低下する。
CloudStateの詳細については、GitHubリポジトリをご覧ください。JavaおよびJavaScriptで利用可能な、シンプルなチャットを実装するサンプルアプリケーションもあります。
貢献したいユーザは、メーリングリストに登録したり、Gitter Channelのディスカッションに参加したり、Twitterで連絡を取ったりすることができる。