web-dev-qa-db-ja.com

Spring Bootアプリケーションをどのようにスケーリングできますか?

Spring Bootには、迅速な開発を容易にするTomcatサーバー(またはJetty)が組み込まれていることを理解しています。しかし、トラフィックが増加したためにアプリケーションをスケールアウトする必要がある場合はどうしますか?

10
progonkpa

コメントで指摘されているように、ここには特効薬はありません。インフラストラクチャによって異なり、役立つツールがいくつかあります。自分に最適なものを選択するだけで済みます。

負荷分散については、Nginxのようなものを選択するか、スケーリング/クラスタリングのための他の多くの便利な機能も備えたSpringCloudに任せることができます。 Spring Bootは独自のサーバーで実行されるため、スケーリングはそれほど難しくありません。

スケーリング/クラスタリングに役立ついくつかのツール:

Springブートアプリ:

  • スケーリングする場合、アプリはnear-statelessである必要があります(例:xインスタンスにスケーリングすると、スケジュールされたタスクなどを作成することはできません。 x回実行)。

  • spring cloud プロジェクトを使用して、サービスディスカバリや、スケーリングを容易にするその他の機能などの追加機能を利用できます(例:新しいインスタンスを起動すると、構成サーバーから構成を簡単に取得できます。 「登録」して、サービス間の負荷分散を容易にしたり、クラスターのような動作をしたりします...)。

インフラストラクチャとコンテナ:

  • Dockerは、必要に応じて、アプリケーションとそのレプリカの簡単な起動を処理するのに簡単です。リソースをさらに活用してKubernetesを利用できる場合でも、それはすべてユースケースによって異なります。

  • さまざまなサーバー(ノード)。そのうちの1つに障害が発生した場合に備えて、負荷を簡単に分散できます。

  • 春のクラウドで何かをまだ行っていない場合、負荷分散のためのNgnixは非常に簡単です。

データベース:

  • 春のアプリほど拡張性がないため、ここではMySQLを使用したくありません。 CassandraまたはRedisのようなものを選択できますが、それはデータモデルの再構築を意味します。MySQLからスケーリング可能なNoSQLへの最も痛みの少ない移行はMongoDB(imho:Cassandraのパフォーマンスが向上します)。

ロギング:

  • これは悪夢かもしれませんが、春にもこれに対する解決策があります。 zipkin と春の探偵をチェックしてください。

また、アーキテクチャ全般と、分散サービスを実行しようとするときに考え方を変える必要がある方法について多くのことを説明しているリソースがたくさんあります ここ

お役に立てれば。

8
Urosh T.