本文系InfoQ中文站向ZStack项目创始人张鑫的约稿。2015年4月正式对外开源的ZStack项目宣称要解决在OpenStack中得不到解决的问题,并明确将项目目标指向目前前景似乎越来越不明朗的私有云市场。作为ZStack项目的架构师、CloudStack的前开发人员,张鑫对于私有云——或者说on-premise的企业IT——到底遇到了什么问题、此类服务到底应该怎么做,是如何构想的?本文将分享他对这个话题的思考。
写在前面:由于企业私有云市场迟迟未打开,近两年来已有多家IaaS企业被廉价收购甚至倒闭,业界已经开始出现一种质疑私有云是伪命题的声音。在此,作者想借ZStack发布的机会,梳理一下私有云的过去和现状,并展望一下它的未来。
从系统管理的角度来看,我们可以把企业IT市场分为三个阶段:前虚拟化纪元,虚拟化纪元,IaaS纪元(基础设施即服务纪元)。
前虚拟化纪元是指虚拟化技术出现以前的阶段,可以追溯到计算机出现到1998年VMWare的创立。在这个阶段,人们管理机器的方式主要是人工部署架构(包括安装物理机,网络部署等),配合分布式软件管理。这个时期由于没有虚拟化技术,一台物理机只能运行一个操作系统,网络拓扑也必须事先设计然后硬连线,整体上效率低下,不灵活。由于一旦部署就难以改变,底层架构往往会制约上层业务;软件方面也没有统一标准,多是由系统管理员自己开发的脚本来实现部分自动化。
1998年VMWare成立ethos并发布首款操作系统虚拟化产品后,市场进入了企业级虚拟化纪元。由于虚拟化技术允许同一物理机上运行多个操作系统,并且操作系统之间可以用虚拟化软件提供的虚拟网络连接,其灵活性让IT架构的部署极大简化。系统管理员在安装物理机后,网络拓扑可以使用扁平的二级网络,即所有物理机在同一个二级网络广播域(broadcast domain),然后在虚拟网络级别实现隔离。这阶段虽然有虚拟化软件的帮助,系统管理员仍然需要在虚拟机级别手动部署网络或存储。比如需要手动为同一个虚拟网络内的虚拟机配置DHCP/DNS服务器,需要在不同的虚拟网络之间手动配置路由等。
从Amazon在2006年发布EC2公有云,市场开始真正进入IaaS纪元。跟虚拟化纪元不同的是,IaaS软件借助虚拟化技术不仅提供池化资源,还将计算、存储、网络资源按服务的方式提供给用户,实现按需索取。同样是部署网络的例子,在IaaS纪元,管理员不再需要手动配置DHCP/DNS服务器、网络路由,而是向IaaS软件描述需求,由IaaS软件自动去配置部署。随着软件定义网络(SDN)、软件定义存储(SDS)等技术的出现和应用,管理员甚至不再需要手动安装虚拟软件到物理服务器(借助IPMI/PXE),不需要手动配置交换机,只需要把硬件安装在机架并连线,其余所有工作都交给软件处理。自此数据中心管理开始进入软件定义的全自动化时代。
作为CloudStack的前开发人员(作者于2010年加入Cloud.com,后被Citrix收购),作者曾多次作为CloudStack的代表参加了多家国际知名公司内部私有云项目的设计和策划,第一线地接触到客户的需求和痛点。在整个过程中,作者最深切的感受是:私有云市场的需求是真实存在的,但现有产品与客户需求的差距也是巨大的。除去加在私有云上的各种噱头,客户的核心需求是管理数据中心或企业IT架构中不断增加的硬件、实现自动化、减少底层架构的部署时间,从而加速企业在上层业务上的创新。用通俗的话说就是:
机器越来越多,人管不过来,得让软件去管;
老板急着上线业务,IT部门不能拖后腿说光架设机器部署网络就要一个月。
这个刚需是非常巨大的。调研机构TBR在2014年发布的报告中估算当年私有云市场的总份额在410亿美元上下,并预测2018年私有云市场份额将达到680亿美元。
IaaS技术出现以来,其最广泛最成功的应用当属公有云。一大批公有云厂商的出现加速了行业的发展和创新,催生了大量相关产业,同时也在一定程度上帮助很多客户从底层架构的依赖中解脱出来,实现了业务创新。例如很多成功的SaaS公司就是完全运行在公有云之中。公有云的宣传口号是“让云计算像水和电一样”,这是非常高明的文案,让人潜意识中以为有了公有云为我们提供按需供应的计算资源,就不需要自己建立和维护IT架构或数据中心,毕竟没人会去自己建自来水厂和发电站。但实际上公有云远没有达到自来水管道和供电网络那般完善和稳定,在数据安全和成本方面也并不占优势。我认为公有云之所以成功,是因为它去除了基础设施里众多的差异性,抽象出能够满足大部分客户需要的模型,例如业界事实标准的Amazon EC2模型。
但这个模型并不适合所有场景。例如像Facebook这样的公司,交换机间就需要40G的独享带宽,存储上还需要专门公司提供的闪存(Flash);而保险公司可能又希望数据库跑在物理机上,并且物理机网络要能够跟前端虚拟机的网络形成VPC。公有云是不能够在一个多租户的环境内去满足各个客户的差异性需求的。所以,公有云虽然是到目前为止IaaS领域发展最好也是最成功的例子,但要断言它必将统治世界还为时过早。如果哪天Intel和AMD的服务器芯片都被公有云厂商买走了,那么一个新时代必将开始;在此之前,我们仍然需要面对私有云市场的需求。
在过去几年跟不同客户打交道的过程中,作者深刻感觉到数据中心自动化以及企业IT架构云化的需求必须划分为两类。
一类是服务提供商的需求(service provider)。这类企业搭建私有云的目的是为了支撑上层业务的运行,例如电商公司的私有云、游戏公司的私有云。这类私有云对技术的要求跟公有云类似,因为他们的业务模式决定了基础架构需要有快速动态扩展的能力,存储需要是分布式以支撑数据的爆炸式增长等。这类公司通常有很强的DevOps能力,同时也面临着传统IT架构不能解决的问题,所以他们有能力部署不成熟的IaaS软件并追逐新技术。
另一类需求是传统企业,他们的IT架构主要停留在虚拟化纪元,多采用VMWare的产品。我们称这类需求为传统的企业虚拟化需求(enterprise virtualization)。云计算的三层结构中,面对终端用户的是SaaS,而IaaS、PaaS都是为之服务的。三者关系存在一种上层应用决定下层架构,下层架构又反过来制约或促进上层应用的关系。传统企业的特点在于他们仍然运行着大量传统应用,这些应用很多都是上个世纪的产品,它们并非为云环境所设计,简单的把它们搬迁到公有云模式中会导致很多技术上的困难。
在公有云模式中有两个重要的特点:一个是资源池化,一个是应用程序需要能容忍基础架构的失败。
资源池化是公有云去差异化的一个重要设计,它主张租户共享资源池,资源获取的过程不可定制。但传统应用在很多场合是需要能够进行差异化定制的。例如对于IO密集的传统应用,用户可能期望虚拟机的根磁盘(装有操作系统的磁盘)放在NFS上,数据磁盘通过专门的存储网络放在高速的IP SAN上面。这就要求对创建虚拟机的过程可以定制,用户可以选择不同的磁盘分配策略和不同的网络。又比如Citrix的远程桌面XenDesktop,它需要多租户即独享私有网络又共享扁平网络的拓扑,这就要求类似于Amazon VPC + Classic EC2的网络模型。当企业业务由众多传统应用构成时,这种差异性的定制需求会进一步加强。公有云提供商也认识到了这种需求,并在有限范围内修改以满足客户。例如Amazon VPC发布最初是不支持静态IP(static IP)的,后来在用户的强烈要求下才加入,但它的Classic EC2是不可能在多租户环境下支持这种功能的。去差异化是公有云的成功法宝,它无法也不会为了迎合传统程序而实现各种定制功能。
在公有云中运行良好的应用都是能够在应用层面容忍一定程度的基础架构失败(比如虚拟机崩溃,网络失联等)的。公有云厂商一直在反复向客户强调基础架构是会失效的,也提供多种手段帮助用户设计failover的应用,而这恰恰是传统应用的死穴,因为它们很多是单机应用,对下层架构的稳定性要求很高。所以大量传统企业因为稳定性而仍然依赖IOE(IBM、Oracle、EMC)的架构。企业客户在选择IaaS产品时,往往要求IaaS能够在架构层面提供容错手段,比如虚拟机级别的高可靠、网络层面的高可靠和冗余。这种由传统应用带来的需求不是云友好(cloud-friendly)和云感知(cloud-aware)的,公有云模式是不会对他们做出过多考虑的。
这也是为什么对于服务提供商来说,私有云可以很容易照搬公有云模式,但在面对传统企业客户的需求时,简单复制公有云模式是不够的——因为我们面对的是一个强大的、不可更改的传统应用生态。
《Why OpenStack is different from other open source projects》
《Keep OpenStack Weird》
《Why vendors can’t sell OpenStack to enterprises》
张鑫,2006年加入Intel上海开源技术中心(OTC),从事开源虚拟机项目XEN的开发,为社区共享了多个功能,例如XEN中E100网卡模拟器,XEN/IA64虚拟BIOS对Windows的支持等。同时也共享了大量bug修复的补丁。2010年赴硅谷加入Cloud.com(后被Citrix收购),从事CloudStack的开发工作,其间多次作为CloudStack代表参与客户私有云项目的设计和部署。在从Citrix退出后,和搭档一起创立ZStack。