
第1章 云原生环境下的制品管理
计算机技术的发展历史,可以归结为人类对计算效率不断追求和提升的历史。效率体现在两方面:完成计算所需的时间越短越好;完成计算所用的资源越少越好。自通用电子计算机诞生以来,计算机的体系架构就包含硬件和软件两部分,一项计算任务由不可改变的通用硬件执行可变的软件共同实现。硬件和软件是相辅相成、相互促进的两条发展主线。
纵观应用软件架构的变迁历程,各个时期的主流软件架构都是和当时的计算基础设施相匹配的。20世纪50~80年代大中小型主机盛行,软件架构是集中式的,靠单机的处理能力和垂直扩展性满足应用的需要。尽管有CPU时间分片、计算虚拟化和内存虚拟化等提高系统利用率的技术,但成本始终居高不下。
在20世纪80年代崛起的个人计算机(PC)及局域网的成熟,促成了20世纪90年代C/S(Client/Server,客户端/服务器)分布式架构的盛行。PC作为客户端分担了主机的部分工作,增强了整个系统的处理能力。相应地,采用了C/S架构的软件由客户端和服务器端两部分组成,通过局域网的协议连接,不仅降低了系统成本,也提高了应用的响应速度。
在20世纪90年代中后期出现的互联网,形成了全球性的信息网络。这个时期的应用从C/S架构逐渐转为B/S(浏览器/服务器)架构。从本质上说,B/S架构是C/S架构的延伸,浏览器是一种通用的轻量客户端,为用户展现HTML页面和脚本结果。服务器端则从一两台主机转为多台X86服务器。系统的成本进一步降低,也具备了水平扩展能力。
进入21世纪以来,移动互联网的出现带来了爆发性的用户量增长和全天候访问服务的需求,应用往往需要应对极速增长的服务请求和海量数据的处理能力,传统的软硬件架构很难适应这种动态变化的用户需求,云计算服务应运而生。云计算让用户通过网络按需访问共享的计算资源池(计算、网络、存储和应用等),对用户来说资源能够迅速供给和释放,无须太多管理成本。云计算由服务商对计算资源池提供集中化管理和运维,为用户提供了权衡成本和效率的交付方式。
经过十多年发展,云计算已经成为像自来水和电力一样无处不在的公共计算服务设施,现代化的应用软件架构也向着C/C(客户端/云端)模式转变,借助云服务的弹性、容错性和易管理性等特点,缩短了开发、测试、部署和运维的迭代周期,以响应瞬息万变的用户需求。现代应用的架构需要“向云而生”,即以云时代的思维和概念来设计,尽其所能地发挥云的潜力,这就是云原生(Cloud Native)架构。
云原生并不特指某项具体技术,而是一系列思想和技术的集合,包括虚拟化、容器、微服务、持续集成和交付(CI/CD)和DevOps等。其中,容器成为云原生领域最重要的基础性技术,已经衍生出庞大的生态系统,其他相关技术大多围绕容器来做文章,比如Kubernetes负责容器编排平台,微服务依赖容器来落地,DevOps使用容器贯穿流程等。
容器的本质是对应用的运行环境进行封装,包括可执行代码、配置文件、依赖软件包等,应用封装后产生的静态文件被称为镜像。相当大一部分容器相关的操作是基于容器镜像的,因此容器镜像的管理成为云原生应用中的重要环节之一。
本章主要讲解云原生技术和容器的原理,介绍容器镜像等云原生制品的规范,并说明容器镜像仓库在容器管理中的关键作用,以帮助读者理解后续章节中Harbor功能的设计理念。