Openfire、Tomcat6、MySQLのスタックを使用したチャットアプリケーションがあります。
現在、これらすべてのサーバーを単一のLinuxマイクロインスタンス(613 MBメモリ)にインストールしています。ユーザーベースが10〜20の低い場合でも、CPUの過負荷が発生しています。これは、ここでは非常に明白です。
私はAmazonEC2を初めて使用するので、トラフィックの使用に応じてアーキテクチャをスケールアップする方法を誰かに提案してもらえますか?
サーバースタック全体に単一の小規模または中規模のインスタンスを使用する必要があります。
コンテキストのいくつかの要因:
少なくともm1.smallまたはそれ以上のm1.largeインスタンスを使用します。マイクロインスタンスは実際には開発専用です。ユーザーがゼロの場合でも、613MBではすぐに十分ではない可能性があるためです。それに加えて、CPUのスチール時間が多くなる可能性が高く、CPUのピークが小さい後はサーバーが反応しなくなります。それは非常に迷惑です。
Mysql-dbを除く各インスタンスでスタック全体を実行しようとします。 RDSを見てください!高い可用性のmysqlマスタースレーブインフラストラクチャを自分でセットアップする必要はありません!
予測できないCPUスロットルのため、本番環境にマイクロインスタンスを使用しないでください。すべてを単一のインスタンスで実行する方が費用効果が高くなりますが、拡張と拡張を計画している場合は、複数のインスタンスでアプリケーションを設計および開発することをお勧めします。
長期的には、アプリケーションサーバーをデータベースから分離して、各層の柔軟性とスケーラビリティを最大限に高めることが望ましいでしょう。 RDSは今のところ良いオプションですが、単一のインスタンスに制限されていることに注意してください。最大のインスタンスの容量を超える予期しないトラフィックの急増がある場合、ダウンタイムが発生する可能性があり、セットアップが必要になります。複雑な追加のインスタンスを使用したクラスタリング。 EC2のもう1つのオプションは Xeroundのクラウドデータベースサービス です。これはRDSとは異なり、追加のインスタンスに自動スケーリングして追加のスループットに対応し、クラスタリングを自動的に処理します。アプリケーションサーバーについては、Amazonの CloudWatch 機能を使用して自動スケーリングできます。