第1章 云原生架构
1.1 云计算的演化
在云原生概念之前,读者已经熟知虚拟化技术、云计算方法。虚拟化是将不存在的事物或现象虚拟成存在的事物或现象的方法,在计算机领域则是指软硬件资源的虚拟化。硬件资源的虚拟化包括计算资源虚拟化、存储资源虚拟化和网络资源虚拟化。利用虚拟化技术,可以将物理资源抽象为统一的逻辑表示,例如通过VMware的虚拟化技术,所有虚拟服务器都拥有统一的设备型号。利用虚拟化技术,也可以使得虚拟资源不受物理资源的限制,例如一台物理服务器可以虚拟成多台服务器,多台物理服务器也可以虚拟成一台服务器,从而整合硬件资源,提高资源利用率。虚拟化技术目前做得较好的公司有VMware、Citrix、Microsoft、RedHat和Oracle等公司。虚拟化技术的发展如图1-1所示。从1998年VMware引入x86虚拟化技术用于普通PC的虚拟,到2001年发布ESX实现服务器的虚拟,之后Citrix发布了Xen;Microsoft发布了VirtualPC和Hyper-V;RedHat借助Linux的优势发布了KVM;而Oracle则收购了VirtualBox。各大厂商都有了自己的虚拟化技术。

图1-1 虚拟化技术的发展
尽管虚拟化技术可以有效地简化数据中心管理,降低数据中心的运营成本,但是并不能取消为了使用IT系统而进行的数据中心构建、硬件采购、软件安装和系统维护等环节,企业仍需要配备较多IT运维人员去从事物理资源的相关准备工作、软件系统的部署工作。此时人们更希望出现一种能够对计算、存储和网络等资源的按需自动分配、按使用量付费的服务,这就催生了云计算模式。云计算借助虚拟化技术的伸缩性和灵活性,进一步提高了资源利用率,简化了资源和服务的管理与维护,减少了数据中心的运营成本。根据云计算服务提供的内容,业界把云计算分成三层:基础架构即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。根据云计算服务提供的来源和服务对象,云计算分为公有云和私有云。云计算的发展如图1-2所示。2006年Amazon(亚马逊)开始提供S3存储和EC2虚拟服务器的云服务;2009年Heroku提供了第一款PaaS云服务。2011年诞生了开源的IaaS实现——OpenStack,同年Pivotal开源了PaaS的实现——Cloud Foundry。2014年诞生了第一款商用函数即服务(FaaS),更加推动了云服务的深度应用。

图1-2 云计算的发展
在虚拟化计算和云计算服务蓬勃发展的阶段,人们也意识到了虚拟化技术的弊端。虚拟化技术虚拟出来的是一个完整操作系统,它的底层包括宿主机操作系统和虚拟化层,势必导致虚拟机的性能低于物理机的性能。此外,完整的操作系统所占用的存储空间较大,而且启动一个虚拟机,等同于启动一个完整操作系统。但是往往在虚拟服务器中可能仅仅是为了运行某一个软件而已。为此,LXC(Linux Container)技术和Docker技术开始出现。它摒弃了启动完整系统的弊端,在现有操作系统上对任务进行隔离,并实现资源按需分配。它允许多个容器共享一个操作系统内核,容器内存储的仅仅是与某个应用紧密相关的资源,其空间占用往往只有几十到几百MB。单独容器化如同虚拟PC一样会面临高可用性不足、管理低级等问题。为此,业界推出了容器编排技术,其发展如图1-3所示。2014年Google开源了Kubernetes(简称K8S),它是一种容器编排工具。容器编排工具将容器生命周期管理能力扩展到部署在大量机器集群上复杂的多容器工作负载,并且为开发人员和基础设施团队提供了一个抽象层来处理大规模的容器化部署。众多公司加入到了容器编排技术大战中,但是到了2017年,MESOS和Docker相继宣布支持Kubernetes,彻底奠定了Kubernetes在容器编排工具中的地位。2018年,Kubernetes从云原生计算基金会中毕业。

图1-3 容器技术和编排技术的发展
随着虚拟化技术、云计算服务以及容器化技术的发展,越来越多的开发者和IT设施运维人员开始团队协作,改变过往独立运作的传统,开始对现有基础架构、运维人员的职责、开发团队的文化以及软件开发模式进行思考和研究,逐渐形成了云原生的概念。