1.1 概述
在经济学家马克 • 莱文森的著作《集装箱改变世界》中,我们看到一个不起眼的技术,因为进行了标准化和系统化的创新而彻底改变了全球的货物贸易运行体系,进而推动了20世纪贸易的全球化发展。
IT领域亦是如此。如果我们把互联网看作数字世界里的贸易航线,那么应用软件和其中的数据便是穿行在航线上的船只和货物。在传统的IT架构中,最小的应用单位可以视为单体应用(类比为船只)。不同的企业各自拥有自己的单体应用,每个单体应用上都要配备一整套IT基础设施(计算、存储及网络等)。单体应用需要依据业务系统规模提前规划。若业务量增加,需增补硬件设备;若业务量下降,则增补的设备只能搁置浪费。
在当今IT领域,云计算的兴起和发展推动了数字世界的全球化革新。随着云计算这种“集中式货运”的出现,一种适应云计算架构特点的应用开发技术和运维管理方式应运而生,这就是云原生(Cloud Native)。容器是云原生的核心技术之一,其创新之处就类似于集装箱的伟大发明。在云计算生态中,软件的最小单元不再是主机或虚拟机,而是容器。
云原生的概念最早由Pivotal公司的Matt Stine在2013年提出,经过短短的几年,已经成为当今热门的生态领域之一。
根据云原生计算基金会(CNCF)的官方定义,云原生有助于组织在公有云、私有云、混合云等新型动态环境中构建和运行可弹性扩展的应用程序。云原生采用容器、服务网格、微服务、不可变基础设施和声明式API等代表性技术,构建出容错性好、易于管理和便于观察的松耦合系统。同时,在可靠的自动化手段的驱动下,工程师团队能够轻松地对系统进行频繁和可预测的大规模变更,从而提高交付效率。
谈及云原生,不可避免地会提到云计算。云计算服务类型通常分为基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)三个层次。从IaaS到PaaS再到SaaS,云平台提供的工具和服务越来越多,购买云计算服务的企业所需承担的开发相关任务也越来越少。这为云原生的出现提供了技术基础和方向指引。
云的发展轨迹可参考图1-1。
图1-1 云的发展轨迹
1.云前时代
(1)开发模型
在早期的软件项目开发活动中,开发人员采用传统的瀑布式开发方法,开发过程中往往需要经历需求分析、设计、编码、测试等多个阶段。这些阶段必须按照顺序依次完成,每个阶段都需要等待前一个阶段完成后才能开始。这种开发方式导致需要数年时间才能完成软件的一个完整版本迭代,而且很难及时响应用户需求。
另外,开发、质量保证和运维通常由不同的组织负责,而这些组织之间往往缺乏有效的协作和沟通,导致软件开发过程中会出现许多问题,例如需求不清晰、代码质量差、测试不充分等。此外,针对同一个系统,新发布的功能较少,使软件无法快速适应市场变化和满足用户需求。
(2)基础设施
在过去,开发完成的系统往往被部署在本地的物理机上。然而,随着服务器虚拟化技术的出现,越来越多的系统被部署到虚拟服务器上,这些虚拟服务器通常会被整合到更少但更大的物理服务器上。由于系统之间相互依赖,相互影响,在部署和维护虚拟服务器时需要进行更加审慎和周密的考虑。
(3)维护模式
在系统维护的早期阶段,维护人员通常需要进行高强度的手动操作,这限制了系统的规模。随着技术的发展,配置管理工具逐渐被引入,可以更轻松地实现物理和虚拟基础设施的配置与维护。
2.云时代
(1)开发模型
进入云时代,敏捷开发和DevOps成为广大软件公司推崇的开发方法,取代了传统的瀑布式开发方法。相较于瀑布式开发,它们具有更高效地开发高质量软件的优点。
(2)基础设施
由于采用敏捷开发和DevOps开发方法,软件或系统的交付频率显著提升,而传统的物理或虚拟设备维护逐渐成为制约项目交付的瓶颈。为了实现在资源池设施方面的快速交付,云技术应运而生。公共云以服务的形式提供了运行应用程序所需的资源,赢得了市场的青睐。许多公司选择将云作为一种专注于核心业务和卸载部分IT基础设施的方式,以便只为消耗的资源付费。
(3)维护模式
基于云的革命性推动,自动化在云运营和管理中变得更加普遍,涉及配置、部署、扩展及自愈等多种新兴特性。除此之外,基于云平台,传统较为分散的各种平台都集中在统一的设施中,从而降低了维护成本,提升了交付质量。
3.云原生时代
(1)开发模型
巨石应用程序正在被微服务应用程序所取代。微服务应用程序开始利用云计算的关键特性,主要体现在如下几点。
1)基于服务的架构:模块化和基于服务的架构为应用程序开发提供了更大的灵活性和更快的交付速度,而不会增加复杂度。
2)应用程序编程接口(API):API使用轻量级标准连接服务,从而降低了部署、扩展和维护的复杂度和成本。通过将API与契约优先方法相结合,可以提高服务的协作性、独立性和一致性。
3)容器技术:容器和Kubernetes为所有流程提供了通用的运营模型,无论基础技术如何,都能减少多层和多云环境的管理成本。基于容器的部署还可以支持跨基础设施的应用程序移植,从而提高IT架构的敏捷性。
采用云原生技术开发应用程序时所做的组织、流程和技术更改可以向外扩展,以支持更大范围的转型计划。转型计划的成功可以证明云原生技术的价值,鼓励组织内的其他团队采用相同的做法。通过这种创新和改进,组织可以提高开发速度、增加收入和节约成本。
(2)基础设施
平台即服务(PaaS)是一种云计算服务类型,提供了一个基础架构,使开发人员能够在其中构建、部署和管理应用程序和服务。为了最大限度利用不同提供商的资源和服务,许多组织采用多云或混合云来运行应用程序和服务。
(3)维护模式
由于容器具有轻量级、可移植性和隔离性等特点,容器化的应用程序可以在任何支持容器的环境中运行,也可以很容易地进行扩展和升级。在容器编排平台的辅助下,开发人员可以轻松地管理应用程序,包括自动化部署、扩展、故障恢复等任务,从而减轻工作负担。
云原生系统开发模型如图1-2所示。
图1-2 云原生系统开发模型
企业业务要想真正地云化,不仅要在基础设施和平台层面实现,而且应用本身也应该基于云的特点进行开发,从架构设计、开发方式、部署维护等各个阶段重新设计,构建真正的云原生应用。
本质上讲,云原生生态体系是指建立在云原生技术基础上的一系列开源软件、工具和服务,旨在提供全面、高效、可靠的云原生应用开发、部署和管理解决方案。