web-dev-qa-db-ja.com

AmazonAWSによる自動スケーリングへのアプローチ

Webアプリアーキテクチャを自動スケーリングするための可能なオプションについて知りたいです。私がアーキテクトに持っているのは、Webアプリ(Tomcat)、ミドルウェア(RabbitMQ)、データベース(MongoDB)、worker(standalone Java app)です。現在、CPU使用率に基づいてスケーリングを試みています。 。Webアプリとワーカーを期待どおりに自動スケーリングできますが、新しくインスタンス化されたrabbtimqサーバーに負荷を渡す方法がわからないため、rabbitmqのスケーリングで問題が発生します。

たとえば、2台のTomcatサーバーを実行しています。 RabbitMQインスタンスのCPU使用率が80%を超えると、AWSは新しいRabbitMQサーバーを追加します。しかし、私のTomcatサーバーは、RabbitMQの新しいインスタンスが追加されたことを認識していないため、新しく作成されたサーバーではなく、元のRabbitMQサーバーのみを参照し続けます。

何ができますか? Rabbit CPU使用率が上がったときに、アーキテクチャ全体を自動スケーリングする必要がありますか?または、RabbitMQを完全に自動スケーリングするという考えをあきらめて、デプロイの初期段階で必要なインスタンスを作成する必要がありますか?他のオプションはありますか?

3
Anand Soni

問題は、Tomcatサーバー(そしておそらくあなたのワーカー)がRabbitMQサーバーについて知らないということです。このシナリオでは、次の2つのいずれかを実行する必要があります。(a)新しいサーバーについて説明するか、(b)気にしないようにします。

上記の(a)の場合、新しいRabbitMQサーバーが起動したときに各Tomcatサーバーとワーカーに通知するか、他のコンポーネントが参照する情報をリストに入れることができます。

ただし、このシナリオでは、RabbitMQ#1にキューがあるとすると、RabbitMQ#2を起動すると、そのキューはどうなりますか?この場合、実際には2つのキューがあり、2つのサーバーにまたがる単一のキューはありません。アプリケーションはこれを処理しますか?

上記の(b)については、 RabbitMQ Clustering を参照してください。私の理解では、RabbitMQクラスタリングを使用すると、ノードを行き来させることができ、クライアントは気にする必要がありません。

1
Matt Houser