视界
云-边-端一体化的计算新格局 浅谈开源云原生技术生态的发展

杨小虎/博士、研究员,1994年起任教浙江大学计算机系/计算机学院,曾任浙江大学软件学院常务副院长,现任浙江大学计算机软件研究所副所长,浙江大学互联网金融研究院副院长。长期从事软件工程、金融科技(FinTech)、云计算等方面的研发工作,自2001年起创建并领导的浙江大学道富技术中心成为国际化产学研合作成功典范,近年来组织团队积极开展云计算开源技术研发,对Kubernetes、Docker等重要开源项目的源代码贡献量超过1000万行,在全球容器云开源技术领域具有较大影响力。

浙江大学计算机科学与技术学院简介

浙江大学计算机科学与技术学院秉承“人为本,和为贵,变则通”的文化理念,以培养求是创新、与时俱进的具有国际视野的顶尖计算机人才为使命,先后培养了数位中国工程院院士和中国科学院院士。计算机学院下设5个系、4个研究所、2个中心,拥有计算机科学与技术、软件工程、网络空间安全、设计学4个国家一级学科。根据《基本科学指标》数据库(ESI)2018年5月公布数据,浙江大学计算机学科ESI学科排名进入世界前千分之一,列全球第25位。2017年12月教育部公布的全国第四次学科评估中,浙江大学计算机学科和软件工程学科均为A+,双双列全国并列第一。

近年来,新型开源云计算技术和社区蓬勃发展、影响巨大。包括浙江大学在内的大量机构和个人通过github、Stack Overflow等协同平台完成了大量新思想、新技术的交流,创造了前所未有的包括容器、微服务、AI等技术的开源云原生生态系统。

企业、高校、个人紧密协作,助力开源云原生生态发展

由浙江大学、Google、RedHat、华为等企业于2015年共同参与成立的云原生基金会(Cloud Native Computing Foundation,CNCF)秉承着协助、使能、鼓励(help, enable, encourage)的宗旨,海纳百川,是当前在容器、微服务、云原生领域最活跃的社区之一。CNCF通过构建并推广一系列的开源技术和标准,为在云原生时代构建动态(dynamic)、分布式(distributed)环境下的可伸缩(scalable)、可运维(operable)、可观测(observable)的敏捷应用与服务提供先进可靠的技术路线。

图 1 CNCF组织构建的云原生生态图谱

以CNCF社区第一个宣布毕业的开源容器编排项目Kubernetes的代码贡献量统计为例,我们可以观察到企业、高校和个人的紧密协作和贡献是CNCF社区得以蓬勃发展的基石,自社区创立以来浙大一直积极持续的在社区进行投入,贡献度始终排名全球第一梯队,与华为一起领跑国内Kubernetes社区生态。

技术标准化是开源社区健康发展的保障

如同生物多样性对生物界进化的作用一般,技术多样性同样是技术得以不断演化与进步的保证。当前CNCF社区已经包含了20多个开源项目,而由CNCF绘制的云原生生态图谱则包含了超过500种开源技术(图 1)。在这样充满技术多样性的生态系统中,技术标准保障了不同类型的技术无缝对接,防止出现同类技术恶意竞争的情况,是生态系统健康发展的重要保障。

2015年,CNCF成立之初,社区创始成员们就对技术标准化做出了富有建设性的设想,并做了CNCF社区未来工作范围的总体架构设计(见图2),其中包括了资源调度、分布式系统服务、应用定义与编排等技术组件与一系列技术间的对接标准。众多的尚处于设想中的技术标准,其中相当一部分,在2018年的今天都已经成为了现实,包括容器运行时接口标准(Container Runtime Interface)、容器存储接口标准(Container Storage Interface)和容器网络接口标准(Container Network Interface)。当然在当今丰富的生态系统中也包含了CNCF成立之初没有考虑到的技术标准,包括开放服务代理标准(Open Service Broker API)、云事件标准(Cloud Event)等等。

浙江大学一直关注并推进社区标准化工作的发展,曾参与OCI标准参考实现runc开源项目的研发,并作为maintainer参与cri-tools开源项目的研发,推进容器运行时标准(CRI)在社区的推广。

图 2 2015年 CNCF成立之初的架构设想

基础设施的稳定化和上层生态的繁荣

云原生开源技术圈流行一句话:“infrastructure should be boring“,即IT基础设施相关技术逐渐趋于稳定。Open Container Initialitive(简称OCI)组织的出现,以及以containerd/runc为代表的基础容器运行时参考实现的广泛采用,标志着云原生时代的第一层基础设施的稳定化。而Kubernetes在容器编排领域的胜出,则代表了云原生时代的第二层技术设施的稳定化。

这些底层技术的稳定使得生态系统内的其他厂商有信心在相关技术上继续投入,同样也使得终端用户有信心尝试和采用云原生、微服务技术。更为重要的是为云原生生态内的上层技术的繁荣带来的强大的助推作用。

以Kubernetes API为基础,在CNCF社区中出现了大量Kubernetes-Native的上层技术,包括Service Mesh类的Istio、Linkerd等,云原生存储类的Rook项目,服务无计算/函数计算类的fission项目,快速部署管理深度学习框架的kubeflow项目,大数据类框架管理的Spark on Kubernetes,复杂应用定义与管理类的ksonnet、Helm项目等。这些上层技术的出现使得云原生可以被应用到更为广泛的场景中,除了常见的无状态/有状态应用之外,也包括serverless、AI、大数据等多种场景,并反过来推进了Kubernetes等云原生技术的进一步推广。

需要指出的是,在基础设施稳定化的大趋势下,也存在一些底层的新兴力量,比如近期Google发布的gVisor运行时技术,在遵循OCI运行时标准的同时,为容器运行时的实现带来了全新的思路。

无服务的兴起和云计算抽象层次的提升

无服务计算(serverless)是新近加入到云原生生态图谱中的一大类新兴技术(图 4)。我们不应把无服务计算等价为某项具体的技术(比如亚马逊的Lambda),也不应该将它等价为某类具体的技术(比如函数计算)。无服务技术代表了云计算服务抽象层次的提升。作为终端用户,不再需要关于底层技术设施(如虚拟机集群的规格定义和管理),而将注意力集中到更高抽象层次的应用开发上去。

图 3 CNCF社区中的服务无生态图谱

从这个角度理解无服务计算,我们可以认为无服务计算是新的也是旧的。说它是旧的,因为它包括IT领域之前早就出现过的Mobile-Backend-as-a-Service(MBaaS),也包括2011年开源的经典PaaS技术Cloud Foundry+BOSH+IaaS(虽然当时并未从serverless角度考虑,但通过BOSH自动调用IaaS层接口,我们可以实现基础设施的透明化管理,即实现根据工作负载动态调整Cloud Foundry所使用的IaaS虚拟机集群的规模,因此虽然PaaS和FaaS等serverless技术有所区别,我们将Cloud Foundry+BOSH+IaaS技术也归类到无服务计算中)。说它是新的,因为以AWS Lambda为代表的函数计算,以及更为近期的AWS Fargate和Azure ACI(Azure Container Instances)以及华为云CCI(Cloud Container Instance)服务正在不断扩充无服务计算的内涵。浙江大学一直致力于新型云计算技术的研发,早在2011年就开始参与Cloud Foundry开源项目,而在近期又参与到fission等开源FaaS项目中。

无服务计算符合云计算一直以来细化分工、提升生产力的总体思想,我们可以预测,无服务计算将不仅限于函数计算,而将在未来演化出多种形式的计算模式,而面向无服务计算的安全、监控等多方面相关技术生态将进一步繁荣(当前CNCF的无服务生态图谱中仅仅包含工具、框架等少数类别,如图 4所示)。由于涉及到应用架构的演进,无服务计算的落地不会发生在一夜之间,而将结合微服务技术,在未来的几年里缓慢推进。而在此过程中类似CNCF社区中的virtual kubelet技术将作为新旧架构应用开发运维模式的衔接与桥梁。

云-边-端一体化的计算新格局

IDC此前的数据显示,随着5G的到来和IoT的发展,到2020年,将有超过500亿的终端设备联网。而考虑到带宽的消耗、网络的延迟、以及数据隐私性保护等挑战,在智慧城市、智慧医疗、智能制造、智能家居等数据量庞大、对处理延迟敏感、对数据隐私敏感的场景下,终端设备产生的数据中有超过半数需要在终端设备或网络边缘侧就近分析处理,而中心化的云端只处理计算资源需求大、实时性要求不高的计算任务,如AI模型训练。未来的计算不仅仅局限在大型数据中心,而将分布在由云-边-端构成的一体化连续频谱上。

从计算平台的角度看,云-边-端一体化的计算新格局至少提出了以下两大挑战:边缘操作系统和端云一体化管理平台。

当我们把终端设备和接入网关等构成的集群当做一个个的小型数据中心,每个边缘节点不再运行单一的任务,而是变成一个可以动态执行被调度该节点的多类型任务的通用计算节点。因此边缘操作系统不仅仅需要负责边缘设备上的任务调度、存储网络管理等传统操作系统职责,也需要提供一套完整的安全隔离机制,以防止动态调度到同一边缘设备上任务之间的相互影响。

而容器作为一类轻量级的操作系统隔离技术就可以在这里发挥作用。根据不同场景下资源的丰富程度和功能需求,在具体做法上我们可以看到部署完整的Docker方案的实践,也可以看到更加轻量化的以containerd/runc为基础构建的开源IoT平台eliot,或者类似百度IoT Intelligent Edge平台那样基于Linux内核的namespace,cgroup技术直接构建定制化容器隔离的技术方案。浙江大学在这方面的研究主要围绕着unikernel技术,相比常见的containerd/runc容器技术,通过rumpkernel,OSv等unikernel技术可以进一步减少攻击面,减少资源占用和加快响应速度,实现边缘设备上安全计算环境。

端云一体化管理平台负责管理边缘设备构成的大量小型数据中心。开源社区已经有关于如何将Kubernetes等优秀的容器编排引擎应用到大量小型数据中心的管理上。2018年5月在丹麦哥本哈根举行的KubeCon+CloudNativeCon大会上开辟了专门的session讨论Kubernetes与边缘计算话题。跟CNCF同在Linux基金会下的EdgeX Foundry社区也发起了EdgeX Foundry on Kubernetes,即将该社区的边缘计算平台EdgeX运行在Kubernetes之上,利用Kubernetes完成资源调度管理的技术讨论。微软的IoT Edge Virtual Kubelet开源项目(图 5)旨在讨论如何使用Kubernetes构建包含传统数据中心和边缘计算的混合端云一体化管理平台。浙江大学在CNCF社区的frakti项目中将unikernel作为Kubernetes的一个运行时,为Kubernetes在边缘计算场景下的应用做出了有益的尝试。

图 4 微软的IoT Edge Virtual Kubelet开源项目架构,使用Kubernetes构建包含传统数据中心和边缘计算的混合端云一体化管理平台。图片来源:github.com/azure/iot-edge-virtual-kubelet-provider

学术界对云原生的关注与推动

近5年以来以容器、微服务技术为代表,在IT工业界蓬勃发展的云原生技术浪潮也吸引了学术界的注意力。一方面,来自Google的行业专家发表的《Large-scale cluster management at Google with Borg》、《Design patterns for container-based distributed systems》等论文让学者了解了容器、微服务技术如何支持Google等大型互联网公司高可靠、高伸缩性的全球服务体系。各行各业的研究者正在创造性地使用容器等云原生技术推动资源调度、边缘计算、物联网、大数据、AI等各领域的发展。另一方面,软件工程领域的学者也高度关注这场基于开源协作开发平台的新技术浪潮,纷纷开始研究开源项目的演化迭代,开源社区的形成以及开源社区的内部交流如何促进高质量开源软件的研发。

IEEE Cloud Computing Initiative在2017年特地出版了针对云原生技术的专刊(2017 vol.4 Issue 5)鼓励学术界更多地参与到这场云原生运动中。在该增刊的引言部分美国Indiana大学的Dennis Gannon教授与来自亚马逊、微软的云计算行业专家共同探讨了云原生技术的定义,列举了当前业界基于云原生架构构建的大型软件系统,总结了容器技术、service fabric、serverless等云原生核心技术,并探讨云原生技术对于IT行业的重大影响以及未来云原生技术在边缘计算等新方向的应用与挑战。