- Cloud Foundry:从数字化战略到实现
- 冯雷等
- 877字
- 2023-02-22 19:52:37
1.2 云计算概述
用简单的语言讲清楚一个看似高深的科技领域非常有难度,对云计算更是如此。下面用一句话来解释什么是云计算。
云计算:计算资源可以随着计算业务的增长需求而弹性增长的基础设施。
围绕这句话,我们可以进行简单推导,从而得出一些比较有意思的推论。
推论1:计算资源可以随着计算业务的减少而释放。
推论1不难理解,其实就是定义的反向表述,这也是成立的。根据云计算的定义和推论1,我们可以得出一个更有意思的推论2。
推论2:软件(计算业务)可以独立于硬件(计算资源)
我们可以用如图1-6所示的例子来说明推论2,这里我们暂时不关心技术上如何实现。假设原来的计算业务需要服务器A和服务器B,现在因为计算高峰期而使计算业务量扩大1倍,按照定义,云计算可以使计算资源弹性增长,系统计算业务引入服务器C和D。后来高峰期结束,计算业务需求降为原来的1/2,这样云计算系统会释放1/2的计算资源。如果服务器A和B被释放,那么软件就运行在服务器C和D上。这等同于计算业务从原来的服务器A和B迁移到了服务器C和D,所以软件系统不依赖于特定的硬件资源。
图1-6 云计算软件业务独立于硬件
虽然云计算有很多种实现方法,但是都离不开推论2这个本质。软硬件独立是云计算中的关键问题,如果把信息世界比作人,软硬件独立就像人的意识可以独立于人的身体。我们从云计算的表述导出了有意思的推论,但是技术上如何做到这一点?为了达到这个设计目标,云计算中的软件栈大体分成如图1-7所示的三层:IaaS(也叫I层云)、PaaS(也叫P层云)和SaaS(也叫S层云)。
图1-7 云计算软件的分层
1)I层云(Infrastructure as a Service, IaaS)意为硬件设施即服务,I层云的主要代表为亚马逊的AWS云和阿里云。
2)P层云(Platform as a Service, PaaS)意为平台即服务,P层云是新型市场,企业版本的P层云的代表是Pivotal的Cloud Foundry,即本书将讨论的技术。截至本书完稿时,P层公有云的市场竞争格局还没有I层云那么明朗,几个美国的互联网大鳄对P层云都处于探索阶段。
3)S层云(Software as a Service, SaaS)意为软件即服务。在美国,S层云的典型代表是Salesforce的在线CRM系统、Google的Gmail、Doc套件和微软的Office365等。下面我们逐一介绍各层云,并着重推理P层云存在的必要性。
1.2.1 I层云
一个事物在其出现之初通常很简单,也容易被理解和接受。2006年,作者刚刚从卡内基梅隆大学(Carnegie Mellon University)毕业,进入硅谷的甲骨文(Oracle)公司服务器技术部门下的网格控制(Grid Control)产品组工作。我们当时的工作目标就是对计算资源进行分配和监控。2006年,云计算(Cloud Computing)这个词不断升温,亚马逊在那一年提出了弹性云计算(Elastic Computing, EC2)的Beta版本,将I层云计算落地。当时,我们对业界计算资源调控方法进行跟踪和分析,总结了云计算概念背后的几种计算资源调控方法:谷歌的基于GFS和MapReduce的方法以及亚马逊和VMware的基于虚拟机(Virtual Machine)的方法。
谷歌的方法更像为其搜索引擎服务,后来慢慢演化为大数据系统的典范。亚马逊和VMware的方法看上去更加有计算的普适性。虽然VMware和亚马逊在虚拟化领域创建了很强大的技术,但是甲骨文公司对于计算资源的调控更有经验。用电网打个比方,单个计算机资源池可以看作一个电厂,而整个计算资源的调度更像电网的调度。当时对我们来说,原来网格控制是对CPU、内存和存储分别调控,但云控制只要对一个虚拟机单位(CPU、内存和存储的组合)进行调控,工作简单了很多。于是大家欣然接受云计算,产品名字也从网格控制转变为云控制。
本书着重讨论基于虚拟机的云计算技术,因此需要先谈谈什么是虚拟机。有虚拟机经验的用户可以跳过这部分。简单来说,虚拟机就是把用户计算机上的整个硬盘数据当作一个文件。假设你打算告别Windows和Linux转到苹果操作系统(Max OS X),由于过渡阶段还需要不时访问原来的两个系统,所以希望在新的苹果计算机上能打开这两个操作系统。这时就可以利用虚拟化技术提供的P2V技术,把你原来的Windows系统作为一个文件(例如Win.vmwarevm),把Linux系统当作另一个文件(Linux.vmwarevm),然后把这两个文件复制到Mac OS X下。在你的Mac OS X上安装一个类似于VMware Fusion虚拟机运行软件,就可以打开这两个文件。打开后可以看到其界面和原来的Windows/Linux操作系统几乎一样。图1-8给出了用户在Mac OS X上打开一个Windows虚拟机的效果。
图1-8 Windows虚拟机运行在Mac OS X系统上的效果
在这个例子中,新的Mac OS叫作宿主机(Host Machine), Windows和Linux叫做客户机(Guest OS)。在一个企业的云计算环境中,为了保证把硬件资源尽可能分配给客户机,一般把宿主机裁剪到最简单,称为分割器(Hypervisor)。一个分割器通常可以支持多个客户机运行。在图1-9展现的环境中,一个服务器安装了一个分割器,在这个分割器上运行了多个虚拟机。
图1-9 一个企业服务器安装分割器以后支持多个虚拟机
在介绍了虚拟机以后,我们现在看看云计算是如何衍生出来的。虚拟机的好处是可以把它看成一个文件,作为一个文件,它就可以被复制。例如,我们上面说到的文件win. vmwarevm可以被复制成win1.vmwarevm、win2.vmwarevm……每个文件在分割器上运行后,对用户呈现出几乎一样的Windows系统,只是细微之处会有差异,例如以太网地址。随着业务的增长,我们复制出来的虚拟机越来越多。更多的虚拟机分享分割器下的同一个硬件环境,每个虚拟机获得的资源平均而言就会减少,虚拟机的性能就会下降,这个时候我们希望安装更多的服务器组成一个资源池集群。图1-10是带有两个资源池集群的小型I层云计算机服务。
图1-10 带有两个资源池集群的云计算机服务
在这个I层云计算机中心中,需要解决以下几个问题:
1)我们怎么让一个虚拟机文件快速地在任何一个物理服务器的分割器上运行?
2)如果一个集群中的某个服务器发生故障,如何保证虚拟机可以转到另外一个分割器?
3)我们如何决定哪个虚拟机运行在哪个服务器?原则是什么?目标是什么?
对于问题1,读者不需要太多的计算机知识也可以想到把虚拟机文件放在共享存储里面,把虚拟机文件挂载到任何一个分割器上就可以解决问题。共享存储怎么保证里面的虚拟机文件可靠地挂载到任何一个服务器上?这又是一个非常大的课题,易安信(EMC,也是Pivotal和VMware的投资公司)已经提供出完整的方案,我们在这里不作讨论。有了问题1的解决方法,问题2就迎刃而解。由于一个集群中的所有服务器都能访问共享存储里面的虚拟机文件,如果一个分割器下的物理硬件被损坏,我们可以把虚拟机文件挂载到另外一个物理服务器的分割器上。在解决问题2的过程中,我们不会人工进行切换,所以需要引入管理服务器。我们再看管理服务器如何解决问题3。每个分隔器都有一个通信接口,服从管理系统的指挥调度。管理服务器的算法决定了调度原则。管理服务器的设计目标是保证计算机硬件资源的最大化利用和用户服务的稳定。例如,假设第一个资源池中第一台服务器的分割器运行了一个Linux1和Windows1,第二台服务器运行了一个Linux2虚拟机,第三台服务器运行了一个Windows2。如果Linux1和Windows1的运算非常繁忙,Windows2非常空闲,这时管理服务器就可以把Windows1从第一台服务器挂载到第三台服务器。假设数据中心的管理员在第一个资源池插入第四台服务器的时候,管理服务器会在第四台服务器安装分割器,然后把Windows2迁移到第四台服务器。当数据中心的虚拟机越来越多的时候,管理员只需要插入服务器,管理服务器会自动将虚拟机迁移到新插入的服务器上运行以达到每个服务器负载的最佳分配。每个集群的设计容量有限,当需求不断增加时,我们就可以引入更多的集群来不断拓展计算资源,云计算中心的规模也随之不断扩大。
上面剖析了一个简单的I层云计算中心,当然,设计一个真实的I层云计算中心会更加复杂,但是其原理基本符合前面的介绍,这并不难理解。至此,读者会发现,I层云计算中心极大地方便了数据中心的管理员,但是对于开发人员而言,I层云上的虚拟机开发软件与早些年在托管于IDC数据中心的硬件服务器上开发应用相比,并没有太大差别。如果开发人员不懂得设计弹性的SaaS应用,I层云本身并不会自动帮助开发人员实现,而P层云的引入则可以帮助普通开发人员自动实现有弹性的SaaS应用。为了理解P层云如何做到这一点,我们先来看开发一个弹性的SaaS应用有哪些挑战。
1.2.2 S层云
S层云是通过软件即服务的方式满足用户需求的。从用户的角度来看,不需要安装服务器端软件,在手机APP或者浏览器里面就能使用软件,典型应用是云邮箱。用户可以在手机APP或者浏览器里面收发电子邮件,而不需要担心邮箱数据、通信录的备份等。是不是所有基于B/S(浏览器/服务器)结构的APP都是SaaS云服务呢?要回答这个问题还是要回到云计算的定义:“计算资源随着计算业务的需求增长可以弹性增长。”举个例子,当APP支持的在线用户数量从1千增长到1万再到10万的时候,软件是否能自动申请硬件资源来满足用户数量的几何式增长?这听上去容易,很多非技术出身的企业家也是在遭遇失败后才发现自己极大地低估了直接在I层云上开发SaaS应用的成本和时间。可以学习Netflix公司用混沌猴子来检验自己的B/S应用是否达到SaaS级的方式,在产品环境中拔掉几根服务器的网线或者重启几个虚拟机,看应用是否可以正常运行。如果服务出现问题,意味着系统依赖于那几个脱离系统的服务器,业务就无法实现弹性增长。那么如何设计一个真正的SaaS的服务呢?12factor.net网站给出了一个SaaS应用应该满足的12项准则,其中的几个准则对软件工程师设计水平的要求是非常高的。我们以简单的一个日志准则为例,因为在任何一个服务器宕机时系统日志不能丢失,这就意味着工程师不能在服务器本地写日志,这对于单机写B/S应用的工程师明显是个新的要求。即使是高水平的S层云开发团队,虽然他们不需要在P层云上开发一个满足全部12项准则的S层云APP,也需要花费大量时间来搭建框架和设施,这些工作对于大部分S层云团队而言是重复性工作。在软件世界,只要有重复性和低效率工作,就有一个软件需求,这就引出了P层云的市场需求。
1.2.3 P层云
顾名思义,P层云就是平台即服务,它的用户是软件开发人员。它在I层云上提供一个平台,使得在其上面开发的服务器端应用自动成为SaaS。P层云极大地降低了SaaS应用的开发门槛并提高了开发效率。根据前面的讨论,我们不难分析出P层云的设计目标:
□ 它可以运行在各个I层云上,例如微软的Azure、亚马逊的AWS、开源的OpenStack和私有云vSphere等。这样P层云就有一定的独立性,开发人员只要熟悉一个P层平台,就能落地到各个厂商的I层云。
□ 它应该有一个可以伸缩的大数据套件,以支持现代应用的大数据需求。现在很多应用是数据驱动的,也就是先有数据再做数据分析,根据分析结论来开发应用。从数据到分析再到应用敏捷迭代,这个话题我们将在后续著作讨论。这是Pivotal的大数据套件的另外一个设计目标。
□ 它应该支持各种服务器端的应用开发的主流语言和运行环境,例如Java、Ruby和Go等高级语言以及像Docker这样的容器型运行环境。如果容器的颗粒比虚拟机更小,它更容易适配于各个I层云。各个厂商的I层云虽然不尽相同,但是他们提供的虚拟机服务还是以标准的操作系统(Linux和Windows)来交付的。
□ 它应该尽可能满足前述SaaS层APP开发的12项要求,帮助开发人员屏蔽底层I层云的细节。开发人员只要按照P层云的规则开发应用,他们就能得到弹性的SaaS层应用。
PaaS的流行相对于IaaS和SaaS要晚一些。截至本书完稿时,所有的产品战略人员和资本市场分析人员都在问同样的问题:PaaS会不会成为云计算的下一个风口?对于是否应该创建一个P层云产品,产品战略决策者基于下面几个方面的判断给出了答案。
1)趋势:它是否代表未来?趋势通常有渐进式演进和突破式演进两类结果。对于渐进式演进的趋势,通常是现有竞争格局下的行业领导者占有绝对优势。而对于突破式演进,最先察觉到商机的企业通常会获得竞争优势。如果我们对趋势的判断正确,即使执行一般,也会有不错的结果。如果我们对趋势判断错误,即使执行得很好,结果也不会太好。通常的做法是尝试对未来5年进行前景想象,然后决定今天是否应该起步。
2)时机:对一个新产品的投入要平衡远近。在趋势判断正确的情况下,如果布局太早,可能在最终市场发展起来之前由于资金匮乏而倒在黎明到来之前。如果布局太晚,市场竞争格局已经建立,用户已经接受主流厂商,同样会面临失败的结局。
3)基因:产品战略要符合公司的优势和体量。优势不难理解,这里特别要谈一下体量。对于500强企业,投资者会要求一个足够大的TAM(Total Addressable Market)来满足公司发展的要求,所以大公司必须要在比较大的机会上布局,也更加容易成功。反之,如果一个创业公司最初就布局在500强公司看得到的大市场,多半会因为没有足够多的资源竞争而导致失败。所以小公司在看到趋势后,需要找到适合自己的切入点,侧面切入到这个大市场。
从趋势上看,P层云使云计算技术平民化,并提高了开发效能,完全顺应了未来软件开发的潮流。
(1)平民化
作者在2009年底离开甲骨文公司的时候一度认为云计算的竞争格局已经完成,所以投身到大数据领域。但是大数据和云计算都遇到了同一个瓶颈:平民化。现在能够驾驭大数据和云计算的技术人员和企业还是少数。一方面,非技术类的企业有应用云计算转型的需求,但没有很强的技术团队来实现;另一方面,未来的编程会下沉到中学甚至小学教育阶段,云平台需要平民化到中学生都可以在其上开发出S层云APP的程度。当前的云计算还远远不能满足这样的需求。
(2)开发的高效性
有不少朋友认为,现在高水平的S层云应用开发人员还是有一些,他们可以直接在I层云上开发S层云APP,因此没必要创造P层云产品。但是,就像单机时代的应用开发,虽然高水平的计算机科学家可以在硬件上直接用机器汇编语言开发出一个好的应用,但是这要花费他几年到几十年的时间,远远不如基于现成的工具开发应用。同理,在云计算时代,基于PaaS开发的效率会更高。另外,S层云的商业模型是建立在用户需求的快速响应上面,市场也不允许一个S层云开发团队花费太多精力从头搭建类似于P层云的框架和设施。
《跨越鸿沟》一书对于技术对于新兴技术市场扩展有很好描述。一个新型技术产品的用户群推广分成四个阶段:技术粉及视野家、实用派、保守派和怀疑派。很多新技术产品在技术粉和视野家圈内最终没有推广到实用派,这个现象被认为技术没有跨越鸿沟,例如红极一时的摩托罗拉铱星计划。铱星计划尝试用66颗卫星覆盖地球无线通信,但实际上大部分用户使用基站无线通信,此项技术最终没有走向大众,铱星公司在1999年宣布破产。所以,战略决策者面临的难题是必须在一个新技术够跨越鸿沟前完成布局。如果在市场上,技术已经跨越了鸿沟,产品已经为主流实用派接受,这个时候市场领导者已经建立,再进入市场就非常困难。而在产品跨越鸿沟之前进行投入,就需承担产品无法跨越鸿沟的风险,所以决策者需要在逻辑上缜密地推敲一个新型技术是否可以跨越鸿沟。作者认为,从前面讨论可以推断出,P层云可以走向实用派。严格来说,一个S层应用无非是有意识地使用了一个P层云产品,或者不自觉地重新写了大部分的P层云功能。截至本书完稿时,微软投资了Pivotal公司以在Azure云(I层云)上拥抱Cloud Foundry(P层云),谷歌也宣布成为Cloud Foundry基金会成员。阿里巴巴也宣布了和Docker的合作,在阿里云上提供Docker服务。P层云产品不仅为互联网这样的技术粉公司所采用和提供,也开始为汽车和金融等稳健型客户所采用。
I层云在今天看来已经获得了巨大的成功,AWS云给亚马逊、Azure云给微软、阿里云给阿里巴巴都带来了巨大的价值提升。罗马帝国并非一日建成,这些企业的成功不仅依靠他们巨大的投入,还有赖于他们能够在质疑声下承担亏损并坚持不懈。根据前面的讨论,P层云或将是云计算的下一个浪潮,这样巨大的市场机会势必引来各大技术公司的关注,但是哪些技术公司的基因能更好地拥抱这样的机会?因为巨鳄进入,意味着广大创业公司需要从更细微的角度切入这个市场,而不是架设一个面面俱到的PaaS云产品。但是对于技术巨鳄公司而言,P层云却又是一个新兴市场。这意味着需要很长时间的投入,而回报却会很少,甚至不确定未来有巨大回报。更有挑战的是,大公司进入P层云可能要求他们放弃一些现有产品的利润,这种场景又非常符合《创新者的窘境》描述的突破性创新场景,大公司需要成立独立的机构来追逐这样的机会。目前,P层云的主要提供商包括Pivotal、GE的Predix软件、IBM BlueMix、谷歌AppEngine等。其中Pivotal公司是在VMWmare和EMC公司的基础上组建的新兴公司,Predix软件是GE Digital下新兴机构,这也印证了上述的论点。