3

次のシナリオで EC2 に PHP クラスをロードする最良の方法は何ですか (# は説明のためのものです)。-> Apache と APC を実行する 100 個の EC2 インスタンス -> リクエストごとにロードされる 100 個の php クラス (__autoload 経由) -> クラス間で 1 日あたり 100 個のコード変更 (多くのクラスには、cron によって定期的に更新される自動生成コードが含まれます)。

私が収集したものから、EC2 に php クラス ファイルをロードする方法は 3 つあります。

A. InstanceStore - The local (virtual) hard drive of an EC2 instance
-> Code must be pushed separately to each instance.
-> Fastest loading since no need to go over the network

B. EBS - A volume mounted to a particular instance
-> Code must be pushed separately to each instance.
-> Slower loading since go over the network

C. S3 - A S3 bucket can be 'mounted' to 1 or more EC2 instances
-> Code only needs to be pushed once
-> Slowest loading since go over the network

Apache インスタンスで APC が有効になっている場合でも、100 個のすべての Apache インスタンスでキャッシュされたクラスの無効化を 1 日に 100 回以上 (コードが変更された場合) 処理する方法がわからないため、APC で fstat を無効にできません。その結果、クラスが apc によって (fstat 呼び出しを実行するために) キャッシュされていたとしても、各クラスのロードがファイルシステムへの呼び出しを生成する場合、fstat を実行するためにネットワーク上で 100 回の往復があった場合、巨大な遅延は発生しません。またはすべての要求でファイルを読み取りますか?

説明されているシナリオでクラス ファイルをロードするための最良のオプション (または、ここにリストされていない新しい方法) は何ですか?

4

2 に答える 2

2

常に EBS でサポートされているインスタンスを使用してください。繰り返し: EBS でサポートされているインスタンスを常に使用します。

コードの変更を適用する必要がある場合は、現在のスナップショットから新しい EBS でバックアップされたインスタンスをスピンアップします。まだロードバランサーに追加しないでください。

コードの変更を適用します。

新しい EBS スナップショットを作成します。これは、現在の一連のコード変更のゴールド スタンダード スナップショットです。

新しいゴールド スタンダード スナップショットから、必要に応じて新しい EBS-backed インスタンスを起動します。

まだ実際のトラフィックを取得していない新しいインスタンスで Web サイトをヒットするスクリプトを実行して、それらをウォームアップします (PHP クラスを APC にロードします)。

新しいインスタンスがすべてのライブ トラフィックを取得するように、ロード バランサーを切り替えます。

古いインスタンスを終了します。

これらはすべて、更新スクリプトを使用して自動化できますし、自動化する必要があります。途中でスクリプトにエラー チェックを含めるようにしてください (たとえば、アベイラビリティ ゾーンのリソースの制約により、新しいインスタンスを起動できないことがありました)。

必要に応じて新しいインスタンスを作成および破棄できる機能は、クラウドの素晴らしい点の 1 つです。

于 2012-07-16T02:28:58.717 に答える
0

オブジェクトをシリアル化してオブジェクト全体をapcキャッシュに入れるか、memcachedのようなものに入れることを考えましたか?

于 2011-09-13T13:12:23.437 に答える