技术趋势上,传统的IDC架构迟早要走向虚拟IDC。每个公司、每个部门、甚至每个项目组都有自己的虚拟IDC,可以对IDC的计算资源、网络、存储、安全、甚至空调电力进行自我调控。目前流行的各类云是虚拟IDC的重要实现。
如下几点可以理解传统IDC与虚拟IDC的一些区别:
- 传统IDC强调物理单机计算能力,往往在一个服务器里跑所有业务(Web、DB)。虚拟IDC强调集群计算能力,单个VM性能也许不足以支撑大流量业务,但整个集群的计算能力要远大于单机。
- 传统IDC里软件部署基本不具备scalable,即使实现也很勉强,应用依赖于各种状态,无法自我scaling。虚拟IDC天生具备scalable,应用设计成无状态,不管是scale down还是scale up都很容易。
- 传统IDC的failover能力很弱,比如物理机的磁盘损坏,数据丢失风险很大。在虚拟IDC里,不管何种存储类型,都按高可用方案设计,在硬件损坏时集群可自我修复,基本无视硬件故障。
- 传统IDC的数据服务(比如Mysql)存在瓶颈,很难scale out。虚拟IDC的数据服务是集群处理,在性能不够时可以自动或半自动scale out,在节点故障时可以live migration,处理过程对应用影响很小。
- 传统IDC手工部署、升级应用和应用的依赖环境。虚拟IDC如果做不到快速部署就不敢叫云了。
- 传统IDC的网络管理和扩展能力远弱于虚拟IDC。虚拟IDC的用户在管理面板就可以定制自己需要的网络类型和安全策略。
简言之,传统IDC强调的是单机,虚拟IDC强调的是集群。在虚拟IDC,不管是计算、存储、网络还是数据服务,都是集群处理。集群必须具备2个基本能力:scaling, failover。前者保证性能,后者保证高可用。
在新时代云环境下的软件开发,也应该调整理念,适应虚拟IDC的发展趋势。如下思想误差在现实中可能普遍存在:
- 云主机不如物理机性能好。直接比较两者没意义,因为云主机也是运行在物理机上,多了一层虚拟化,单个性能自然无法跟物理机比。但是,云计算强调的是整个平台计算能力,而且这种能力是可无限扩充的。
- 云主机不够稳定。其实稳定是相对的,云平台设计之初就认为硬件不可靠,允许故障发生。但云平台强调的是整个集群的failover和自我修复能力,这点要远强于物理机。
- 云存储访问很慢。云存储在带来数据高安全性的同时,无疑性能会下降。我们不建议在云主机本地进行大量IO读写,高IOPS的服务,可使用更具体的基础云服务,如Cloud Mysql、Cloud Nosql。
基于上述陈述,我们在云环境进行软件开发时,应该调整思路,遵循新的原则,让应用更简单智能、扩展性更好。关于新的原则请见上一篇blog描述,即Heroku所遵循的软件开发12条最佳实践。Heroku在这方面给我们提供了一个伟大的实践环境,建议程序员在有空时,亲自体验一把Heroku的开发和发布流程。
赞下,拿物理主机和云主机比性能确实不科学。