2016-11-25 13 views
10

私たちは、これらのマイクロサービス(ほとんどがAkkaベース)を何十種も手に入れようとしています。その展開を最もうまく管理する方法がわかりません。具体的には、互いに独立して、できるだけ特殊化して配布するように構築されています。Scala/Akkaマイクロサービスを導入する標準的な方法は何ですか?

私の質問は、それらのすべてが自分の個々のJVMにとっては小さすぎるという事実に由来しています。冗長性を考慮すると、AWS nanoインスタンスでホストする場合でも、約40台のマシンで終了しますが、そのような高い数は必要ないだけです。 3つの中規模のインスタンスでは、作業負荷全体を簡単に処理できます(および実行することができます)。

現在のところ、それらを「コンテナ」アプリケーションにグループ化して、ややランダムに配置してから、大きなJVMでこれらのコンテナアプリケーションを実行します。

しかし、より良い方法が必要です。私はAkkaのアプリケーションサーバーを認識していないので、他のユーザーがAkkaマイクロサービスをどのように運用しているか(と具体的には展開の管理方法)についていくつかの洞察を得たいと思っていました。

これはおそらくScalaとAkkaに限定されないでしょうが、他のほとんどのプラットフォームには、これらをデプロイする専用のアプリケーションサーバーがあります。

+0

Akkaクラスタリングとルーティング。ルータは設定に基づいていくつかのRouteesを配備することができ、クラスタはルータが稼働するためのノードの束を提供します。多くのオプションがここに記述されています:http://doc.akka.io/docs/akka/current/scala/cluster-usage.html –

答えて

2

IMHO、標準的な方法は、サービスオーケストレーションツールを使用することです。実際には、独自のJVMを持つ個々のプロセスで実行されます。 これは、マイクロサービスでデカップリング、分離、回復力を得る唯一の方法です。この方法では、個別に展開、更新、停止、開始することができます。

あなたは言っている:

私の質問は、それらのすべてが 自分の個々のJVMのためには小さすぎることに起因。 インスタンス

あなたはJVMとAmazon VMを同等のものとして扱いますが、そうではありません。単一の仮想マシン上に複数のJVMプロセスを持つことができます。

は、私はあなたがサービスのオーケストレーションツールなど Lightbend Production Suite/Service Orchestration またはKubernetes

これらは一例であり、他のものがあるを見てお勧めします。このツールカテゴリは、簡単なスケーリング、ログ統合、サービス検索、ヘルスチェック/サービス障害処理など、早急に必要となる多くの機能を提供します。

+0

非常に貴重なご意見をいただきありがとうございます。あなたが言及したツールを調べるつもりです(前にKubernetesについて聞いたことがありますが、何らかの理由でDockerコンテナを管理するためのものだと思っていました)。単一のマシン上で複数のJVMを稼動させることに関しては、可能ですが、私はすべてのJVMをJVM内で実行できるオーバーヘッドがあるため、不要と判断しました。現代のJVMは一般的に軽量であることが合意されているので、おそらくこれは幾分古い考え方です。 – Ruslan

+0

*「この方法でのみ、展開、更新、停止、個別に開始できます」*これは実際には当てはまりません。単一のJVM内で別々のコンポーネントのライフサイクルを持つことができます。レジリエンスは別の問題ですが、システムリソースを過剰に購読すると、マシン上の複数のJVM間のやりとりがやりにくくなります。 – the8472

関連する問題