1.2 云原生的历史及其原则
云原生的历史不仅揭示了它的缘起,也揭示了它的未来。
1.云原生的演进历史
2010年,WSO2技术总监Paul Fremantle首次提出Cloud Native一词,这种架构描述了应用程序和中间件在云环境中具有良好的运行状态。他认为云原生有以下特性:分布式,弹性,多租户,子服务,按需计量和计费,增量部署和广义的测试能力。
2013年,Netflix云架构师Adrian Cockcroft介绍了Netflix在AWS上基于云原生的成功实践。他从目标、原则和措施3个方面进行了总结。
1)目标:可扩展性、高可用、敏捷、效率。
2)原则,具体如下。
原则一:不变性。服务一旦创建,不能修改,只能重建,因为修改的成本远远高于重建的成本。
原则二:关注点分离。服务通过微服务架构实现关注点分离,避免决策瓶颈,实现反脆弱性。
原则三:默认服务所有的依赖都可能会失效。这要求平台能够自动处理失效问题。
高信任的组织,倡导底层员工的自主决策权共享;透明的管理,共享能够促进技术人员的成长。
3)措施,具体如下。
❑利用云实现自动可扩展、高可用和可共享。
❑利用组织实现服务的关注点分离。
❑利用全息可观察性及时定位问题。
❑利用混沌工程实现反脆弱性。
❑利用开源实现敏捷和共享特性。
❑利用持续部署实现敏捷、不变性(将集成和部署自动化)。
❑利用DevOps实现高度信任和共享。
注意,云原生的原生概念开始并没有提到微服务和DevOps,但是后来却出现了。为什么?因为微服务以及DevOps正好契合了云原生的愿景和理念,并且它们一起证明了实际工程的效果。微服务和DevOps的历史比云原生更加久远。
所以无论是新的还是旧的思想或者技术,只要符合云原生的理念,只要有利于云原生的实践,现在都可以称为云原生的思想或者技术。因此云原生是一种架构范式,以一种非常宽容的态度兼容了新旧技术并为己所用。
2015年,来自Pivotal的Matt Stine进一步阐述了云原生的概念,他认为单体架构向云原生架构演进的过程中,流程、文化、技术需要共同变革。他把云原生描述为一组最佳实践,具体包含如下内容:十二因子、微服务、子服务敏捷基础设施、基于API的协作,以及反脆弱性。
2016年,无论是从市场接纳度还是从技术成熟度,云计算都已经进入成熟期。人们开始关注云原生,这是因为云原生填补了应用到云之间的缝隙。
2017年,Matt Stine在接受媒体采访时将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6个特质。而Pivotal官网又将云原生概括为4个要点:DevOps+持续交付+微服务+容器。
读者应注意,在云原生概念出现的同时,容器也被纳入云原生的生态。在不可变基础设施(不变性、模块化、可部署、可替换等)思想的推进过程中,人们发现容器非常适配云原生的架构理念,所以这个20世纪80年代提出的技术被纳入云原生体系中。这也导致一段时间内,凡程序员必谈容器。此刻的云原生已从概念开始全面落地。
2018年,开源基础设施领域翘楚Google、Redhat等共同牵头组建了一个云原生计算基金会(CNCF)。CNCF的目标非常明确,就是为了对抗容器圈一家独大的Docker公司。后来,CNCF通过Kubernetes在开源容器编排领域一骑绝尘,成了容器编排领域事实上的标准。同时期有Docker Compose、Docker Swarm、Mesos等容器编排平台或者工具,经过激烈的竞争,最终Kubernetes成了目前唯一的选择。为什么会如此?正是因为它符合云原生的核心价值:为云而生,以应用为中心。
Kubernetes也在此时被无可争议地纳入云原生体系中,明确了云原生分布式操作系统的发展方向。
2019年,阿里巴巴集团的所有业务全面上云。
2020年,阿里巴巴的核心技术进行了云原生化改造,即全面使用云产品支撑业务发展。
与此同时,工业领域的云原生技术开始落地。为什么云原生会在此刻受到如此多的关注呢?
回顾历史,Web Service得到某巨头(作为供应商)的大力推广,但企业实际并不需要这种复杂的方案,所以Web Service并没有真正流行起来。而云原生不存在这样的问题,它一开始就是由开源界提出的概念,而开源界一直以来都非常关注商业界的需求,并与之密切互动。因为开源产品主要由企业的开发人员来选择,如果他们用不好或者不会用,那么这个开源产品是不会流行的。说白了,开源产品是基于民主的选择机制来确定地位的。商业组织为了适应新经济形态的快速变化,就更加需要技术创新。与此同时,业务开发人员之所以选择云原生开源产品来构建自己的数字化平台,原因就在于云原生的低成本与高效。因此,云原生作为一种技术架构,顺势而为,在2019年自下而上地爆发了。
而IT行业公认的云原生“元年”是2015年,但爆发于2019年,这一进程仅相隔4年。反观云、计算框架等的推进,整体的演化时间都大大地超过这个时间。这说明业界对云原生的认可度是非常高的。
2.云原生的原则
云原生的强大能力,让人们愿意将所有类型的应用都搬到云上来。因为企业存在不同类型的应用,而不同类型的应用会相互调用,如果仅有一小部分应用被云原生化了,那么云原生就无法为企业整体赋能。表1-1整理了云原生功能,也可以说是原则。
表1-1 云原生功能(原则)
表1-1中的原则会贯穿全书,这些原则都基于云原生能力,经过了本土化,使得云原生更接地气。