随着云计算技术的日趋成熟,世界范围的云计算应用也越来越广泛,并逐渐普及。亚马逊、微软、谷歌、salesforce、IBM、VMWare、SAP(这是一家德国公司,其他皆为美国公司)等世界顶级的云计算服务商都在不断地发展和充实着自己的云服务,立足于自己的优势服务—IaaS,PaaS或SaaS,然后兼而有之。
出于数据安全性等方面的考虑,目前中国没有允许这些外商独资企业在中国建立云数据中心提供云服务,但是可以提供技术给中国的企业来进行合作。比如世纪互联与微软合作提供Azure云服务,宁夏西部云计算基地有望提供亚马逊AWS云服务。这种合作的云服务只是采用了同样的技术,在数据上是隔离的。中国本土的云服务商比较大的有阿里、腾讯、新浪、盛大等,主要提供IaaS或PaaS。
作为一个新的技术,用户在考虑采用时必然有各种顾虑。首先是数据的安全性。安全性主要包括数据不丢失和不泄露这两部分。
“不丢失”靠的是各种备份及恢复机制。以阿里为例,其宣称对数据存储的持久性可达99.99999999%(十个9),这无疑要比一般用户自己建立的备份机制可靠得多。也要注意到,没有人能100%保证数据不丢失,事实上微软的sidekick和谷歌的Gmail历史上真实发生过小范围的云数据丢失。其中Gmail虽然最终通过多层备份机制从磁带恢复了数据,但部分用户数据恢复时间长达4天。所以,如果您的应用非常重要,您需要考虑附加额外的备份恢复机制来以防万一。
“不泄露”是用户对云服务最基本的要求。云服务商必须做出承诺,能否做到依赖于云服务商的技术和管理水平。事实上,云服务出现以前,各种数据泄露和黑客攻击事件就时有发生。从2006年AWS S3正式发布至今的8年时间里,我们看到各家服务商提供的“云”并不是导致类似泄露事故的原因所在。相比之下,更受关注的是偶尔发生的云宕机事件。云服务商也在不断发展和完善各种防网络攻击和数据加密等技术。可以肯定的是,无论用不用云,黑客和数据泄露事故将长期存在,天下无贼只是善良人们的梦想。因此,用户在选用云服务时需要对云服务商提供的加密等技术服务和管理有基本的了解。
在讨论云规划中的性能方面以前,让我们先缩小一下讨论的范围。我们主要基于IaaS公有云的云主机来讨论性能规划,PaaS、SaaS、私有云也可作参考。
也有些各种名称的云服务和下面的讨论关系不大,毕竟云计算至今没有一个唯一的定义。这其实一点也不奇怪,因为IT行业是一个快速发展的行业。快速发展就意味着不断变化,换一种说法就是“很不稳定”。每家厂家都在发展自己独特的产品和技术,每天都有创新发生。一些IT企业可能10年前还是市值领先的新星,10年后却被收购了。为了使各种软件之间方便交互、互相兼容,DMTF、SNIA等行业组织也发展出了OVF等一些规范。但是总的来说,标准化还是非常困难的。所以,用户需要在选用云服务时区分它们之间的不同,不同定语下的云可能完全没有关系。
任何IT系统都会有性能的需求。资源少了运行不起来或响应时间过长,资源多了浪费。所以需要先进行性能容量规划。对于打算使用公有云的用户来说,性能容量规划又会有所不同。
也许有人会说“云的资源是动态的,需要了就增加,不用了就减少,付费是按照使用量来进行的,所以不需要性能容量规划。”是这样吗?
貌似正确,但其实原因推不出这样的结论。待我慢慢道来…
首先我们要注意应用部署到云上以后,表现出的性能由三部分来决定:网络性能、应用特性和云主机性能。
用户使用云后,必然要通过WAN网络来访问应用系统。在购买网络服务时仅仅关注网络带宽(上行带宽和下行带宽)是不够的。网络延时也非常重要。受光速限制,距离每增加100Km延时增加约1ms。路由器等网络设备会增加延时,不同的网络设备延时不同。用常用的Ping命令即可看到延时大小。
也许有人觉得即使到200ms不过是0.2s,应用会感觉到吗?这要看应用的客户端程序(通常是使用者的浏览器)与服务器(在云上)需要交互几次来完成一个请求。以一个常见的网络游戏为例,游戏的参与者都会尽量选择那些ping值小(如20ms)的虚拟房间进入,然后选择发起者ping值也较小(如35ms)的进行参与。因为如果ping值较大(如150ms)就有可能进行起来“很卡”,无法正常进行。如果您没有玩过魔兽争霸之类的网游,也许可以和您的小孩或者年青的朋友聊一下,他们一定深有体会。
所以,在向电信运营商购买服务时,您需要在关心上/下行带宽的同时,明确网络延时,并保证服务质量QoS。通常,减少延时的手段是更换网络设备,替换掉延时长的路由器等。顺便提一下,为提高可用性,也为了降低IP网络性能波动对应用的影响,您也许应该同时购买两家电信运行商的线路,毕竟如果网络断了,一切云服务都不可访问了。
现在谈一下应用特性。应用是千差万别的,即使同是人事管理系统,每家公司都会有不同的流程和功能,而在不同模块下活动用户的比例差异也会影响到应用系统的表现。上面提到的处理一个请求时服务器与客户端程序交互次数就是一种应用特性。这些应用的特性也许需要针对云服务特点来优化。比如减少与客户端的交互次数。
每类应用对资源的需求和消耗都是不同的,有的应用对CPU要求更高,有的需要大内存作为cache,有的需要高IOPS来支撑随机数据访问,有的需要高MB/s来批量吞吐数据。不同的应用对响应时间的期望也是不同的。一般对于在线的会话,平均3秒以内的响应时间是可以接受的,当然如果能做到1秒以内就非常好了。对于财务月结或者一些BI报表分析,也许3-5小时,甚至更长的处理时间都是可以接受的。
所以,用户在规划云服务时需要对自己的应用特性进行分析,如果有条件的话,进行相应的压力测试并针对云的特点进行优化就更好了。
现在谈一下最后一点“云主机性能”。真正的云主机的确是按使用收费,动态扩展的。如果您是类似初创企业的小应用,用户数很少,那的确不用花费精力去规划云主机的性能。但是,如果您的应用是企业级的关键应用,或者将来可能成为关键应用,下面这些信息相信对您还是有用的。
云的动态扩展是有技术局限性的。经常可以看到类似的描述“云计算是将计算资源聚合调度,以服务的形式提供给用户”。这话本身没有问题,但是如果您理解成您原来运行在1台server上的sql server单机版应用可以直接部署到云中,并自动扩展到使用超过1台物理服务器的资源的话,那就错了。云的基础是虚拟化技术。现有的虚拟化技术都是能够将单个server虚拟出多个虚拟机,但是不能将多台server聚合成1个虚拟机。现在的聚合应用都是通过分布式软件(如Hadoop Mapreduce)来实现的,而这需要改写应用软件,而且不同类型的应用改写难度也不一样。如果您购买的某款软件没有并发版本,您恐怕难以要求厂家专门为您做一个。这已经超出了IaaS云的范围。IaaS管理大量服务器,并按预定策略将某个虚拟机部署在某台服务器上,通过预定策略来扩展甚至迁移这个虚拟机。如果开始时部署在一台小Server上,系统压力上升时如果要满足扩展需求,就要动态迁移到更大的Server上,这必然会导致迁移过程中的性能问题,同时也增加了风险和云管理的开销。所以,预估应用中每个虚拟机需要的最大CPU需求是完全有必要的。
关于单机内的资源动态调整,与CPU动态增减较为容易相比,内存的增减就比较困难了。应用一般需要更改运行参数,甚至重启才能使用增加的内存。而减少内存更加难以实现,往往需要应用释放后才能慢慢减下来。所以,我建议尽量将内存需求估算准确,并基本固定。
对于磁盘IO方面,不同的应用差别很大。如果是Web应用,往往不需要自身有共享存储。而对于数据库来说,存储的冗余和高性能就是必须的了。一般企业级的应用在上到云中时,总是在购买云主机的同时也要购买高性能存储云服务。他们之间的IO性能(IOPS和MB/s)也是用户需要重点关心的。毕竟,数据为王嘛,如果数据堵在路上,再快的CPU也只有等待。
综上所述,规划很有必要,特别是对关键的企业级应用,更是如此。“Fail to plan is planning to failure.”