Lagomのクラスタリングとデプロイ

Lagomを試してみるシリーズ第13回です。今回はクラスタリングとデプロイについてです。実際に動かしてみるのは面倒なのでここはドキュメントを読むだけに留めておきたいと思います。

クラスタリング

LagomはAkka Clusterでクラスタリングが可能なようです。

クラスタの管理はConductRで行う方法と明示的に設定する方法があり、明示的に設定する場合は各ノードのapplication.confにシードノードの設定を記述します。

akka.cluster.seed-nodes = [
  "akka.tcp://MyService@host1:2552",
  "akka.tcp://MyService@host2:2552"
]

このあたりも内部的にAkkaを使っているメリットを感じます。

デプロイ

また、デプロイについてはsbt-native-packagerを使用してパッケージングを行えるようになっており、

$ ./activator universal:packageBin

などのようにすると各プロジェクトのtarget/universalディレクトリ配下にzipファイルを生成されるのでこれを適当なサーバにコピーして展開し、binディレクトリにあるスクリプトを実行することで起動できます。開発時と異なりCassandraは別途起動しておく必要があります。

sbt-native-packagerを使用しているのでzipファイル以外にもMSIDMG、Dockerコンテナなどにもパッケージングできるようです。あとはドキュメントにはConductR使うといいよみたいなことが書いてありますが華麗にスルーすることにしますw

さて、これで残るはログの設定やAkkaとのインテグレーションなのですが、今回はLagomを使うことが目的ではなく、Lagomからフレームワークとして学ぶことがあるのではという趣旨なのでLagomを試してみるシリーズはいったんこれで終了にしたいと思います。

まとめ

Lagomを一通り見てみて、基盤としてAkkaやAkka Streamsをうまく活用しているなと感じました。また、サービスの定義と実装でプロジェクトを分ける、サーキットブレーカーやイベントソーシング + CQRS機構を標準装備しているなど、スケーラブルなマイクロサービスにおけるプラクティスをフレームワークレベルで提供しているところも興味深いところです。

ただ、実用面で考えるとサーキットブレーカーはFinagleも標準装備しているようですし、イベントソーシング + CQRS機構も実際問題嬉しいかというと微妙な気がします。Javaで記述できるといっても実際はかなり辛い感じなので今のところ積極的にLagomを選択する動機はあまりないような気がしています。

まあ、まだ出たばかりですし、しばらくは様子見という感じでしょうか。