SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Akkaで学ぶアクターモデル入門

Akkaの導入とアンチパターン、そしてクラウドネイティブへの対応

Akkaで学ぶアクターモデル入門 第7回

クラウドネイティブで拡がるAkkaの未来

 Akkaの開発をサポートしているLightbend社のWebサイトでは、2021年現在クラウドネイティブへの対応を強く打ち出しています。Lightbend社は2019年にCNCF(Cloud Native Coumpting Foundation)に参加しており、CNCF技術スタックに含まれるプロダクト群と親和性の高いプロダクト開発を行っていくのではないかと予想されます。この記事ではその中でも2点、Kubernetesへの対応とCloudstateによるステートフル・サーバーレス実現についてお話しします。

 CNCFスタック技術の中でも中心的な役割を果たすことが多いKubernetesですが、AkkaもKubernetesと連携できます。どこで使われるかというと、Akkaクラスター構築時の基盤として使うことが主用途です。Akka DiscoveryのKubernetes APIに技術的な詳細が載っています。

 Kubernetes自体がクラスターを構成し、その上にAkkaクラスターも構成するとなると、クラスターの2段構えのようになりますが、それぞれのクラスターは目的が異なります。Kubernetesはインフラ全体を構成するもので、複数のマイクロサービスをそのうえで稼働させるものです。一方Akkaクラスターはあくまで単一のマイクロサービスに閉じた使い方をすべきで、前回でもその点について触れています。

 Kubernetesはインフラ層での通信を担い、Akkaクラスターはアプリケーション層の通信を担います。アプリケーション層の通信は、JavaやScalaで定義したメッセージを、ノードを越えたアクター間で送りあう仕組みです。

 数年前まではAkkaクラスターで初期クラスターの構成とノードの追加・削除をおこなうのは手間のかかる作りこみが必要でした。より具体的には、Akkaでメッセージを送信するコードを書く際は、tell APIを使うときはノードを意識する必要はないのですが、クラスターの管理をする時にはどうしてもIPアドレスなどのインフラ寄りの情報を使って、初期クラスターの構成やノードの追加・削除を行います。

 そういったインフラよりの仕組みが、Akka DiscoveryのKubernetes APIでだいぶ楽になりました。Akka DiscoveryではKubernetesのほかにAWS APIやConsul APIも備えており、自分で一からノード特定の仕組みを作りこまなくても、それらのサービスとシームレスに接続できます。

 次に紹介するのはCloudstateです。Lightbend社のサポートする新たなオープンソース製品として、2019年に発表されました。Akkaの開発で培われた知見と技術を活かし、ステートフル・サーバーレスとよばれる分野での利用を意図したものです。

 近年サーバーレス技術は大きく発展し、利用者の数も用途も飛躍的に拡大しています。代表例の一つと言えばAWS Lambdaですが、Lambdaが登場した2014年と比べ、今では各クラウドベンダが複数のサーバーレス製品を提供し、しばらくは新しいサーバーレス製品の投入は止まることがなさそうです。

 コンピュータ・サイエンス分野で有名な、カリフォルニア大学バークレー校から発表された論文、Cloud Programming Simplified: A Berkeley View on Serverless Computingでは「私たちはサーバーレスが、クラウド・コンピューティングの未来において、支配的な勢力となるまで成長すると予想しています」という、なかなか刺激的な見通しを発表しています。

 Lightbend社CTOのJonas Bonér氏の見立てでは、現在のサーバーレスはFunction as a Serviceに代表されるような、内部状態を包有しないモデルばかりで、内部状態を包有するモデルによってカバーできる領域が広がってはじめて、サーバーレスが未来のアプリケーション作成での当たり前の選択肢になる、としています。

 CloudstateはKnative、gRPC、Akka ClusterやGraalVMを組み合わせてKubernetes上で動かし、内部状態を方ゆするサーバーレス、つまりステートフル・サーバーレスを実現します。下支えとなる技術としてAkkaが含まれていますが、アクターを意識することなくGo、JavaScript、Java、KotolinやPythonなどでアプリケーションを書けます。APIを介してアクターのもつ内部状態に間接的にアクセスするので、自らアクターの状態遷移を作りこまずに、イベント・ソーシングなどAkkaの提供するメリットを享受できます。

 クラウドネイティブやサーバーレスといったトレンドは、すでに一過性ではなく今後のコンピューティングの世界において大きな役割を占めることは、多くの人々が賛同するところでしょう。その中でも内部状態をもつステートフル・サーバーレスという新しい分野は、すでにCloudsate以外の競合製品がでるように注目を集め始めています。クラウドの新しい分野を支えるこのテクノロジーを身に着けるために、ここまで学んできたAkkaをきっかけに入り込むのも面白いと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Akkaで学ぶアクターモデル入門連載記事一覧

もっと読む

この記事の著者

リチャード 伊真岡(リチャード イマオカ)

 大学卒業後、9年間証券会社にてプログラマ兼技術サポートとして勤務。その後いくつかの企業でバックエンド・エンジニアや技術広報などを務める。  プライベートでは過去にScala/JavaのOSSであるakkaへ貢献。 Twitter:@RichardImaokaJP

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/14207 2021/06/17 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー