3

在以下场景中,在 EC2 中加载 PHP 类的最佳方式是什么(#s 用于说明目的)?-> 100 个运行 apache 和 APC 的 EC2 实例 -> 每个请求加载 100 个 php 类(通过 __autoload)-> 类之间每天进行 100 次代码更改(许多类包含通过 cron 定期更新的自动生成的代码)。

据我所知,有 3 种方法可以在 EC2 中加载 php 类文件:

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,我也无法在 APC 中禁用 fstat,因为我不确定如何每天 100 多次(当代码更改时)处理所有 100 个 apache 实例上的缓存类的失效。结果,如果每个类加载都会生成对文件系统的调用,即使该类被 apc 缓存(执行 fstat 调用),如果有 100 次网络往返来执行 fstat,不会有很大的延迟或阅读每个请求的文件?

在所描述的场景中加载类文件的最佳选择是什么(或者可能是此处未列出的新方法)?

4

2 回答 2

2

始终使用 EBS 支持的实例。重复:始终使用 EBS 支持的实例。

当需要应用代码更改时,从当前实例的快照中启动一个新的 EBS 支持实例。暂时不要将它添加到您的负载均衡器中。

应用代码更改。

创建一个新的 EBS 快照。这是当前一轮代码更改的黄金标准快照。

根据需要从新的黄金标准快照启动新的 EBS 支持的实例。

运行一个脚本,在尚未占用实际流量的新实例上访问您的网站,以预热它们(将 PHP 类加载到 APC 中)。

切换您的负载均衡器,以便新实例占用所有实时流量。

终止旧实例。

所有这些都可以并且应该通过更新脚本自动化。确保在脚本中包含错误检查(例如,由于可用区的资源限制,我偶尔无法启动新实例)。

根据需要创建和销毁新实例的能力是云的美妙之处之一。

于 2012-07-16T02:28:58.717 回答
0

您是否考虑过序列化对象并将整个对象放入 apc 缓存或将其放入 memcached 之类的东西中?

于 2011-09-13T13:12:23.437 回答