“云原生”到底啥意思?为何很重要?
Cloud Foundry基金会的首席执行官Sam Ramji解释,“云原生”(Cloud native)开始具有一系列特定的含义,影响到公司将如何在软件上运行。
惠普公司在去年7月28日宣布收购ActiveState的平台即服务(PaaS)业务时,高级副总裁Bill Hilf表示,这么做一方面出于这个目的:为了弥补传统IT与“云原生应用程序”之间的差距。
“云原生应用程序”这个术语不仅更频繁地出现在厂商宣布的公告中,还被普遍接受,成为了总结许多企业开发人员和运维人员认为未来前进方向的一个短语。“云原生”不仅是个时髦词,它还有了自己的基金会:7月21日成立的云原生计算基金会(Cloud Native Computing Foundation)。
一些读者可能还不太清楚这个术语到底啥意思,本文简要解释了为何这个术语当下很流行,为何经常被用来总结过去属于谷歌或Facebook的一系列目标和优先事项。
“云原生”的核心是Linux、Linux容器,以及应用程序被装配成容器中的微服务这个概念。的确,Linux基金会已成立了云原生计算基金会。但是云原生的含义绝不是实施Linux集群、运行容器这么简单。这个术语认识到,让软件在云端工作起来需要一系列广泛的组件协同运行。它还需要一种有别于传统企业应用程序设计的架构。云原生计算基金会将努力让人们更容易装配这些活动组件。
这项任务非常艰巨,以至于Cloud Foundry基金会的首席执行官Sam Ramji在7月20日至24日召开的年度开源大会(OSCON)上专门探讨了“云原生”的含义。Ramji擅长让不同部分协同运行,曾在微软主持内部项目,将微软代码库与开源代码协调起来,并为开源项目贡献代码。暂且不说别的,这番经历就让他有资格解释如何避免云原生方面的一些陷阱。
云原生计算基金会是紧随开放容器计划(Open Container Initiative)之后成立的,该组织于6月22日宣布成立,是一个看似重叠的行业组织。Ramji不断听到有人问:为啥有那么多的基金会、众多技术该如何协同工作,于是他重写了OSCON演讲稿,逐一解答那些问题。因而,他说:“我得到了迄今为止作过的任何演讲中最积极的反馈。”
下面是他阐明的几个观点。
云计算高度依赖开源代码;开源已经胜过商业代码,用于下一代应用程序,甚至在企业内部都是如此。大有前途的开源项目吸引了风险投资,从而鼓励项目变成公司,对代码进行一番包装后,开始销售获利。Ramji在OSCON主题演讲中说:“我们过去共享代码、改进代码、构建代码是为了声誉。”而如今,开源项目可能是初创公司与贡献代码的公司之间的一个竞争元素,后者希望能够采用开源代码,谋取自身利益。某个项目变得至关重要,多家厂商愿意支持它时,就会成立基金会,那样没有一家厂商控制得了该项目。所有参与者都想让代码进入到中立面,那样大家可以共享代码,不会有哪一家获得控制权或者竞争优势。Ramji表示,开源基金会之所以迎来发展,原因是初创公司在项目中往往起到更重大的直接作用。
一个例子就是Docker这家Linux容器公司。“Docker已遍布世界各地,”它的成功已在对容器有其他想法的开发人员当中产生了不安情绪,导致了Docker和CoreOS的Rocket之间家喻户晓的竞争。IT经理们告诉Ramji,他们不得不开展为期九个月的项目,确定到底使用哪种容器。他回答:在必须不断适应不断变化的情形的商业界,“这段时间听起来不短”。他对OSCON与会者说:“有时候竞争导致创新,有时候竞争带来破坏。”许多公司不希望缠身于这个难题:究竟选择哪一种竞争性的开源项目才好。6月22日,Docker和CoreOS都力挺开放容器计划,同意遵守一种通用容器文件格式和通用运行时环境,为采用容器的企业用户简化今后的任务。
如今的开源项目其驱动力不仅仅在于开发替代商业代码的方案。现在驱动力成了需要“持续创新”,企业需要能够在一周、甚至短短一天之内频繁调整软件,以适应业务要求。Ramji说:“Zynga过去常说,他们一天之内要部署40次代码。现在亚马逊表示,每7秒钟就部署代码。我们为什么这么做?这么做是为了让代码可以在云端运行,可以连接到任何设备,”不断更新云端应用程序,以适应业务要求。要是开发人员和运维人员花费大量的时间来试图搞清楚开源代码组件会如何协同工作,不可能实现持续创新。 Cloud Foundry、Docker、Kubernetes(源自谷歌的容器编排系统)、Mesos(Twitter、苹果和Airbnb使用的容器集群管理系统)及其他容器项目将持续创新作为根本目标。“如果我们能把所有项目聚集起来,如果我们能够将Kubernetes和Mesos协调起来,就可以将调度程序想象成插件,”Ramji继续说,他在需要时使用这些容器项目。
只有单单一家厂商的开源项目不会以这种方式来运作。它们会由开发人员来运作,风险投资家将股票期权派发给开发人员,竭力要求获得短暂优势。他预测,只有多家厂商支持的项目才有机会发展成为一个重大项目,成为推动云使用方面发生变化的一股重大力量,这类项目正在构建新平台或者协同运行的一套新组件。
云原生应用程序本来就是为了在“无所不在、灵活的云计算环境”下运行。应用程序可以在云平台上进行开发,然后部署到不同的云,支撑性软件堆栈将帮助它们可以实现规模化运行。
Ramji得出结论,云原生应用程序无异于“规范的软件堆栈”( prescriptive software stacks),旨在可以协同运行,因为许多企业忙得没空自行装配组件。为了达到这个目的,许多公司将构建微服务(离散的应用程序服务),每个微服务在自己的容器中运行,然后通过网络将它们连接起来,构建企业所需的应用程序。云原生意味着“重新调整路线图,旨在开发用户驱动的系统”,这类系统将使用标准化部件,并遵循标准化的部署和运维程序。
云原生的支持者仍需要给出更多的例子,表明这一套想法在实践中效果如何,不过“云原生”能够造就一种不断变化的软件架构:让公司可以始终心系客户,而且能够保持竞争力。Ramji特别指出,自2000年以来,《财富》500强中52%已从榜单上消失。只有为数不多的措施让公司可以避免成为跌出榜单的下一个倒霉蛋,而持续创新和部署新软件正是其中之一。