私はこの分野にまったく不慣れです。最近、EC2 で Web サイトを立ち上げることができました。次のステップとして、Web サイトを拡張する方法を学びたいと思っています。大まかなアイデアはありますが、その方法について専門家からのアドバイスを聞きたいです。
私のウェブサイトは LAMP をベースにしていますが、ユーザーがメッセージを記録したり、再生したりできる Red5 サーバーも備えています。
現在、これは初期スケーリングのためにセットアップする予定のアーキテクチャです。次の目的で 4 つの小さな EC2 インスタンスをデプロイします。
インスタンス1: このインスタンスではMySqlデータベースを実行します
インスタンス2: このインスタンスではred5サーバーを実行します
インスタンス3とインスタンス4これらの2つのインスタンスは、ウェブサイトを展開するために使用され、Apacheが実行されます。内部IPアドレスを使用して、インスタンス1のmysqlサーバーとインスタンス2のred5サーバーと通信します。必要に応じて、同じインスタンスの別のインスタンスを起動します。
EBS - たとえば50GBのEBSを用意し、そこにすべてのMySQLデータを保存します。また、red5はこのEBSを使用してビデオメッセージを保存します。
ロードバランサー - Amazon が提供するロードバランサーを使用して、インスタンス 3 とインスタンス 4 の負荷を分散します。
これが私の考えです。大きく外れている可能性もありますので、ご容赦ください。また、MySql サーバーのスケーリングについては、それがどのように行われるか、また、それが最初に必要かどうかが現時点ではわからないため、考慮していません。
Amazon が自動スケーリングと MySQL スケーリングも提供していることは承知していますが、今はそれについては詳しく説明したくありません。
フィードバックをお待ちしております。ありがとうございます
答え1
このトピックに関する一連の記事があります@http://highscalability.com
AWS を使用したことはありませんが、ラックスペース仮想インスタンスと AppEngine を使用して、データセンターで仮想インスタンスを実行した経験があります。
スケールアップとスケールアウトの方法は、何をしようとしているかによって大きく異なります。アプリによっては I/O を集中的に使用するものもあれば、CPU を集中的に使用するものもあります。ボトルネックとなるのは、インバウンド I/O、処理能力、バックエンド I/O、またはアプリのライフサイクルのどの段階であるかに応じて、これら 3 つの組み合わせである可能性があります。すべてにおいて、若干異なる戦略が必要になります。
AWS のようなものを使用する場合、一般的にスケールアウトしたいので、終わりを念頭に置いて開始し、アプリを疎結合にしておく必要があります。これにより、需要に合わせてスケールする別のインスタンスを起動できます。開始時に、データベース インスタンスをメイン アプリと同じインスタンスに保持しても問題ありませんが、通常、それが最初に独自のサーバーに分離されます。
最初はすべてを 1 つのインスタンスで実行します。その後、トラフィックが増え始め、データベースが CPU を消費していることに気付きます。そこでデータベースを別のインスタンスに移動すると、すべて順調です。トラフィックが増え始めると、フロントエンドがトラフィックに対応できないことに気付きます。そこでさらにインスタンスをいくつか起動し、負荷分散を行い、しばらくは満足して、12 個の Web サーバーにスケールアップします。しかしその後、トラフィックが増え、フロントエンドは対応しますが、今度はデータベース マシンがスラッシングし始めます。そこでデータベースをマスターと 2、3 個のスレーブに複製すると、すべて順調になります。これを繰り返します。
答え2
私は以前、Amazon EC2/EBS などがリリースされた頃にこれに取り組んでおり、大規模なサイトの 1 つを物理ホストからその環境に移行することに成功しました。
私は自分の経験をブログに書いています。 http://linuxadminzone.com/how-to-install-setup-and-config-haproxy-loadbalancer-for-content-switching/他にも投稿はありますが、ここにリンクを貼り付けることはできません。お役に立てれば幸いです。