近年来,云原生
一词越来越流行,甚至到了火爆的程度,谈论技术如果不涉及云原生似乎就OUT了,而不支持云原生的软件或者项目似乎也显得与当前时代格格不入,那到底什么是云原生呢?我们怎样设计、开发出来的软件就是为云原生而生的呢?
云原生从字面意思上来看可以分成云和原生两个部分。
云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。
原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。
如何开发出适合于在云环境里面部署的程序呢?其实主要是需要遵循几个开发原则:
微服务解决的是我们软件开发中一直追求的低耦合+高内聚,与微服务对应的是我们传统的单体应用,例如一个tomcat容器中部署一个超大型管理系统的场景,而微服务的本质是把一块大饼分成若干块低耦合的小饼,比如一块小饼专门负责接收外部的数据,一块小饼专门负责响应前台的操作,小饼可以进一步拆分,比如负责接收外部数据的小饼可以继续分成多块负责接收不同类型数据的小饼,这样每个小饼出问题了,其它小饼还能正常对外提供服务。
微服务还建议使用RESTful API通信,且局限于某一门开发语言,而是在系统的不同层次上选择最适合的语言进行,流行的微服务开发语言有: Go、Java、NodeJS、Python等。
DevOps的意思就是开发和运维不再是分开的两个团队,而是你中有我,我中有你的一个团队。开发和运维由一个团队完成,快速适应业务变化,以更加定制化的方式实现客户需求,提供超出客户预期的产品。
开发和运维在一个团队,团队需要对开发和运维两头抓,存在一定的技术挑战,但是其最终受益的还是整个团队。
持续交付的意思就是在不影响用户使用服务的前提下频繁把新功能发布给用户使用,要做到这点非常非常难。要做到对用户不受影响,对于研发的设计要求是非常高的,我们很多时候可能因为前期某一个不合理的表设计就会让用户感觉到明显的产品变化,这块儿只能在团队中持续打磨,再有了一定抽象能力和产品能力以后才能有所进步。
容器化的好处在于运维的时候不需要再关心每个服务所使用的技术栈了,每个服务都被无差别地封装在容器里,可以被无差别地管理和维护,现在比较流行的工具是docker和k8s。
因此我们也可以简单地把云原生理解为:云原生 = 微服务 + DevOps + 持续交付 + 容器化
而针对容器化,他就和我们下面要聊的CNCF的话题有着密切联系。
CNCF,英文全称为Cloud Native Computing Foundation,中文译为“云原生计算基金会”。成立于2015年12月11日。
CNCF是Linux基金会旗下的基金会,可以理解为一个非盈利组织。
当年谷歌内部一直用于编排容器的Borg项目开源了,为了该项目更好的发展,谷歌与Linux基金会一起创办了CNCF。同时,谷歌把Borg用Go语言重写,更名为Kubernetes并捐赠给了CNCF。
成立这个组织的初衷或者愿景,简单说:
推动云原生计算可持续发展;
帮助云原生技术开发人员快速地构建出色的产品;
CNCF通过建立社区、管理众多开源项目等手段来推广技术和生态系统发展。
云原生计算技术栈非常宽阔,它囊括了存储、计算、编排、调度、CI/CD、DevOps、服务治理、服务网关等诸多领域。因此与之相对应的开源项目就非常多。CNCF基金会与Linux基金会、Apache基金会类似,负责社区的管理、技术的推广,使得云原生领域的技术不断成长。
比如,源于谷歌的Kubernetes(容器编排引擎)开源项目就被吸收到CNCF,Kubernetes也因此受到更多的人关注。
再比如,源于华为的KubeEdge(边缘计算平台)开源项目也被CNCF吸纳,也吸引了很多人参与进来。
很多公司很乐于把自已的项目贡献给CNCF,这样能吸引到更多的专家参与进来一起开发。只有足够优秀的项目CNCF才会接纳,源创公司会在该项目上保持技术上的领先,也能扩大技术影响力,所以公司愿意分享项目到CNCF。
CNCF的愿景: 为云原生软件构建可持续生态系统
CNCF基于著名的鸿沟理论开展项目管理,将项目分为沙盒项目(Sandbox)、孵化项目(Incubating)、毕业项目(Graduated)。分别对应于鸿沟图的创新者、早起采用者和早期多数者。
CNCF项目阶段与鸿沟图对应关系如下图所示:
基于该理论,CNCF技术监督委员会制定了严格的项目管理制度和项目毕业标准,保证毕业的项目具有采用率、健康的变化率以及来自多个组织的提交人等。
著名的毕业项目有: Kubernetes、etcd、containerd、Prometheus、Helm等。
处于孵化阶段的流行项目有: CRI-O、gRPC、Argo、Dragonfly、KubeEdge、Thanos等。
完整的项目列表查看地址: https://www.cncf.io/projects/
Trail Map只是对云原生应用做一个大体的梳理,而每个阶段所关联的服务商和产品等详细信息则需要从全景图Landscape中确认。CNCF有一个很大的愿景,而且包含的内容也越来越丰富,截止2021年4月3号,全景图已经包含了云原生应用所关联的方方面面,共计913个卡片,与之对应的开源项目一共达到了2,530,085个star, 市值为14.4T和资金156.8亿美元。
原始图片地址: https://landscape.cncf.io/images/landscape.png
分模块查看地址: https://landscape.cncf.io/
这样的全景图可以指导我们的项目开发工作,选择云原生就绪的开源项目,将有助于我们构建自己的云原生就绪的项目。这张图中主流的项目也是将来的技术热点,是我们学习的方向。
我们不难发现,云原生是一个很宽泛的概念,想要开发一个支持云原生的应用并不难,可能就是简单的实现可基于容器部署、使用Kubernetes进行编排与调度,集成CI/CD工具以及Prometheus监控工具等。
但是,想要构建一个真正云原生的系统,要求我们考虑到系统的方方面面,我们不仅要掌握简单的开发技能,还要在SDN、SDS、分布式调度甚至计算机基础架构等诸多领域有所了解,要能够根据场景制定出最合适的架构方案。
各方面的综合能力的提升才能在云原生时代构建出云原生就绪的应用或系统。