2011-07-18 25 views
3

在以下情况下加载EC2中PHP类的最佳方式是什么?(#是用于说明目的)? (通过__autoload)加载100个PHP类 - >每天在类之间更改100个代码(许多类包含通过cron定期更新的自动生成的代码)。在EC2中加载php类的最佳方式 - InstanceStore,EBS或S3?

从我所收集,有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操作,也不会出现巨大延迟或者在每个请求中读取文件?

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

+1

使用实例存储并让实例拉取或侦听更改,而不是手动更新它们。 –

+0

你能详细说明这将如何完成? – archmeta

回答

0

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

2

Always use an EBS backed instance。重复:始终使用EBS支持的实例。

当需要应用代码更改时,从当前快照创建一个新的EBS支持的实例。请勿将其添加到您的负载平衡器中。

应用代码更改。

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

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

运行一个脚本,命中您的网站上的新实例(s),还没有采取实际的流量,预热它们(获取PHP类加载到APC)。

切换您的负载平衡器,以便新实例获取所有实时流量。

终止旧的实例。

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

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

相关问题