在以下场景中,在EC2中加载PHP类的最佳方法是什么(#s仅用于说明目的)? - >运行apache和APC的100个EC2实例 - >每个请求加载100个php类(通过__autoload) - >类之间每天100次代码更改(许多类包含通过cron定期更新的自动生成的代码)。
从我收集的内容中,有三种方法可以在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也不会有大的延迟或者在每次请求时阅读文件?
在所描述的场景中加载类文件的最佳选择(或者可能是未列出的新方法)是什么?
答案 0 :(得分:2)
Always use an EBS backed instance。重复:始终使用EBS支持的实例。
当需要应用代码更改时,从当前快照的快照中启动新的EBS支持的实例。不要将它添加到您的负载均衡器。
应用代码更改。
创建新的EBS快照。这是当前代码更改的黄金标准快照。
根据需要从新的黄金标准快照启动新的EBS支持的实例。
运行一个脚本,在新实例上点击您的网站,这些新实例尚未获得真正的流量,以加热它们(将PHP类加载到APC中)。
切换负载均衡器,以便新实例占用所有实时流量。
终止旧实例。
所有这些都可以而且应该通过更新脚本自动完成。确保在整个过程中在脚本中包含错误检查(例如,由于可用区中的资源限制,我偶尔无法启动新实例)。
根据需要创建和销毁新实例的能力是关于云的一个很棒的事情。
答案 1 :(得分:0)
您是否考虑过序列化对象并将整个对象放入apc缓存中或将其放入memcached之类的内容?