2023-12-29 8:27:36
云原生是一个很新的概念,笔者并没有搜集到这一概念的原始文献。不过目前最认可的定义通常如下:
云原生(Cloud Native)是一种软件开发和部署的方法,它利用云计算的特性,如弹性、自动化、可扩展性和微服务。云原生的应用程序可以在不同的云平台上运行,无需修改代码或配置。云原生的目标是提高软件的质量、效率和安全性,以适应快速变化的市场需求。
因此这种开发和部署模式相当适合如今对于业务需求繁复,且对于开发效率的要求很高的现状。举个例子,比如一个云原生应用的开发流程可以是这样:先根据需求设计系统架构,随后根据云原生应用的设计准则将应用划分为一系列无状态的微服务并将状态统一管理。完成代码编写后,通过Docker Images的形式发布,最后通过Kubernetes等部署在云服务器上,交付给客户。之后的测试环节也可以使用云原生平台的基础设施来完成后续的运维。
要更好地理解云原生,就得知道原来的开发模式是什么样的。传统的开发模式下,开发者通常得自己考虑数据库的配置和部署,软件发布后需要自己部署到目标计算机上,并且大部分的运维工作都需要手动完成,而这其中大部分的运维工作往往都是重复的,比如数据库的备份恢复,扩容,服务的扩容等等。传统架构下,需要开发者/运维根据文档手动添加系统的各部分,并修改系统的配置,甚至修改系统本身的部分实现。可以说,传统的架构就是直接在裸服务器环境下手动管理服务进程和系统的各部分软件。
从全球云计算技术发展历程来看,大致经历了三个阶段:1.0是云计算培育期,以资源虚拟化和集中管理为核心技术特点;2.0是云计算成熟期,以云原生和资源编排为核心技术特点,大数据和人工智能成为热点;3.0是云计算发展深化期,进入算力时代,政府和企业应用加速上云,应用领域触及到政府和中大型企业核心系统,以云网融合、云边端协同为核心技术特点。
云的本质是对算力的妥协,以及对于用户体验的平衡,进而演进出的一种解决方案。当信息行业服务提供者的业务复杂到一定程度后,就必然会面对运维,也就是Ops的复杂度急剧上升的问题。云计算的诞生就是为了借助云将Ops的负担转移,让企业专注于业务本身,免于花费精力于服务端的维护上。
云计算、5G、AI、大数据、区块链等新技术的应用和数字化进程的加速,带来了丰富业务的同时也对网络功能提出了极高的挑战,传统网络仅提供纯粹的管道功能,已不能满足云上业务应用对网络资源的调度需求,因此催生了网络功能虚拟化和资源化的架构模式,以满足云业务对网络的调度需求。云原生技术的提出和发展,带来应用敏捷交付、快速弹性、平滑迁移、无损容灾等特点,被越来越多的企业用户所接受,企业关注点已经从以资源为中心转移到以应用为中心,网络需要同步演进,通过构筑敏捷、安全、开放、弹性、灵活的云原生网络更好地支持业务应用,推进数字时代的发展。
云原生作为网络演进的一个阶段,它的前两个阶段分别是单机互联时代和上云时代。这二者中,前者只是将各个机器使用网络连接起来,上云时代则将一部分资源从网络中抽离出来,以接口的形式暴露在网络中供网络使用。而云原生和网络的结合,也就是云原生网络,是利用云原生技术构建与云能够天然融合的新型网络架构。
传统的可变基础设施是指应用服务基于物理机或虚拟服务器进行部署,运行环境的构建依赖很多变量,诸如一些服务器上的配置、基础软件等,在不同环境之间可以通过动态配置下发或实时访问外部服务更新应用的状态,整个应用服务所依赖的基础设施一直处于变化之中,当出现需要进行应急回滚的场景时,运维人员处理流程往往会比较复杂,容易出错。
而云原生的通常做法是将应用依赖的基础设施(如安全插件、日志组件、JDK 基础软件等)打包成不可变的镜像,实现了多环境统一镜像,在应用发布时,只需对容器镜像进行变更即可,极大地降低了应用多环境的部署成本,同时对自动轮转替换、自动回滚等运维动作更友好,提升了基础设施运维的自动化水平。
软件和硬件的关系,服务器和终端的关系,算力和网络的关系。这几个对象在技术上互相融合,市场上互相补充,互相竞争。
服务器高算力,但是终端数量巨大,二者之间可以说是在进行着算力的博弈。云计算希望承载更多的算力并将终端变成瘦终端,终端希望承载更多的智能算力以进一步提升用户体验,边缘计算实际上是云计算和终端算力竞争下出现的一种阶段性产物。这样的竞争本质上是围绕需求和体验,保证算力无缝流转的问题。
也就是因为边缘设备的数量占比巨大,所以出现了边缘计算这个从端侧入手的算力利用方法,如何通过云的方式来结合二者的优势是一个问题。
云原生本质还是一种服务交付和运维方式,它的底座还是云计算。而想要发展云计算,现阶段就必须面对这几个问题:
云原生虽然是一个比较新的概念,但是它的技术底座不少都是复用了已经相对成熟的解决方案,因此概念虽然新,但是借助着架构的合理抽象设计,云原生却有着很高的可用性和可靠性。
随着互联网技术的发展,大型 IT 系统一般采用分布式计算模式,以优化资源配置并提高系统可靠性、可用性和灵活性等。为了便于分布式信息系统的设计、开发与集成,以及提高系统架构的灵活性、复用性和可增长性,面向服务的体系结构 SOA 因此产生。SOA 体系结构将定义良好的,具有开放接口并独立于软硬件平台以及实现技术的单个服务组件关联起来,以构造整体应用并采用松耦合的方式保护既有 IT 基础设施。实际上,SOA 只是一种架构思想,而 Web 服务及其相关标准和 SOAP、WSDL、UDDI 等协议的出现,则为 SOA 的具体 实 践 提 供 了 技 术 支 撑 和 处 理 方 案 。 Web 服 务 基 于SOA 架构理念,采用一套标准技术实现了对企业间服务资源的共享和复用。SOA 体系结构及 Web 服务等相关标准和技术的产生,为构造松耦合的大型分布式应用指明了较好的方向,并做了开拓性工作。
尽管 Web 服务为跨平台的企业开发提供了方便,但是在开发模式上,仍然采用的是单体架构。单体架构由于自身特点较适合小型应用的开发,并不适用于业务复杂度较高、业务需求量较大的中、大型企业。微服务体系结构思想的出现,则较好地解决了上述难题。其核心要义在于基于面向服务的思想,对传统大型应用系统进行 功 能 分 解 ,推 动 细 粒 度 服 务 的 使 用 。 微 服 务 架 构(MicroServices Architecture,MSA)则指根据应用系统的业务需求,通过对预定义的微服务进行重组而形成企业级应用的分布式体系结构。它主要将传统概念上的单体应用在功能、数据等方面进行分解,划分为多个具有明确边界并可被自由重组的小规模子服务。这些子服务间采用轻量级通信方式实现交互、协作,每个服务都有自己的数据库并可在独立进程中被部署、运行等,服务之间保持技术异构性,可由不同的团队选择合适的工具、语言进行开发。与单体架构相比,微服务架构的优势在于:(1)微服务按业务功能划分,每个服务都具备特定的功能,易于开发、维护等;(2)每个独立的微服务可以由不同的语言基于不同的平台开发,灵活性较好;(3)子服务可独立部署,能够实现可持续集成及交付;(4)容错能力强大,单个微服务出现问题不会影响系统其他服务的运行;(5)可实现动态按需实时扩展等。目前,微服务体系结构的思想已被应用于很多大型公司的分布式应用系统中。
如果要指出云原生的一个代表性技术的话,那就是以Docker为代表的轻量级虚拟化技术了。容器是一种新的软件分发方式,同时也是一种新的虚拟化运行时环境技术。近几年以Docker等为代表的轻量级虚拟化容器技术迅速兴起。作为一种新的软件交付方式,它给出了一种高可用的,十分简单的一体化部署和运维方案。
容器 (container) 技术作为一种轻量级的操作系统层面的虚拟化技术, 能够为软件应用及其依赖组件提供一个资源独立的运行环境 . 在容器化过程中, 应用程序及其所有必要的依赖关系 (代码、运行时、系统工具和系统库等) 会被打包成一个可重用的镜像 (image), 镜像内容可以通过配置文件 (例如 Dockerfile 和 docker-compose.yml)中的指令定义 , 镜像运行环境不与主操作系统共享内存、CPU 和硬盘空间, 由此也保证了容器内部进程与容器外部进程的独立关系 . 与传统虚拟机相比, 容器技术具有快速启动、运行环境可移植、弹性伸缩、快速部署以及低系统资源消耗等优点 . 随着云原生 、DevOps、CI/CD等愈发流行与普及, 容器技术在软件开发和运维方面有着广阔的应用前景 , 已经引起了业内的广泛关注 . 许多云服务提供商已经开始提供基于容器的云服务, 以满足其不断增长的需求, 例如谷歌容器引擎 (Google GKE)、亚马逊弹性容器服务 (Amazon ECS) 和 Azure容器服务 (Azure ACS).
在众多容器技术中, Docker 无疑是最受欢迎的容器化技术, 已成为工业界的行业标准. Docker 本身是一个基于 LXC (Linux 容器)、操作系统虚拟化 等技术实现的开源项目, 通过提供标准化的运行时环境, 可以将同一个软件构建版本用于开发、测试、预发布、生产等任何环境, 并且与底层操作系统解耦, 从而实现“构建一次, 随处运行”的目标. Docker 容器技术有希望将开发人员从繁重的开发运维负担中解脱出来, 其主要原因有 3 个:(1) Docker 可以很好地解决代码运行环境变更问题, 从而降低依赖时的复杂度; (2) Docker 可以通过定义环境, 很好地解决环境不一致的问题; (3) Docker 可以帮助开发者精简部署流程, 使代码部署更加透明、高效.
自 2013 年诞生至今, Docker 容器镜像已经被下载超过 1 300 亿次 (https://www.docker.com/company). 《Flexera 2021 年云计算报告》发现, 76% 的公司受访者表示正在或计划使用 Docker 容器技术. 目前 Docker 受到越来越多的公司和开发者欢迎, 被广泛地应用于软件开发和运维过程 , 也在各种实际应用中部署, 例如智能汽车、物联网和雾/边缘计算 (fog/edge computing). 近年来, Docker 容器技术也逐渐成为学术界一个热门的研究领域, 相关论文发表在软件工程领域的高质量会议和期刊上, 如 ICSE、FSE 和 ESE 等. 此外, 在并行与分布计算 (如 TPDS) 以及存储系统 (如 FAST) 等领域的高质量会议上也有相关论文发表。
轻量级虚拟化技术可以应用在边缘和泛智能终端上,解决云边端协同场景下边缘和终端侧资源和性能有限的问题。在一些算力协同调度场景下,如视频识别场景下,可以将智能识别的算力从中心到边缘到终端进行卸载,如图像渲染场景下,可以将算力从终端迁移到边缘或者云端上。通过轻量级虚拟化技术实现一致的运行环境,配合云边端资源调度技术,保证算力自由流动提升云边端算力的整体使用效率。
虚拟化技术本质上是一种资源隔离技术,现阶段轻量级虚拟化有三条技术路线,一是针对传统虚拟化的裁剪和硬件卸载方案,适用于公有云场景,解决公有云高虚拟化损耗、网络和存储性能瓶颈等问题;二是轻量化容器技术,针对容器虚拟化进行裁剪,可以解决云边端协同场景下边缘和终端侧部署容器引擎占用资源过高的问题,前期研究测试表明,基于Containerd裁剪和结构优化后的轻量级容器引擎部署在树莓派开发板上进行测试,可使flash使用量减少80%,内存平均占用减少45%,可解决容器运行在边缘或终端上的储存空间和内存空间的不足问题;三是WASM(WebAssembly)技术,是一种新型代码运行隔离技术,基于web引擎运行C/C++、Java等多语言程序,具有性能好、占用资源少、多语言兼容的特点,可解决边缘和终端场景下资源隔离性能和效率问题,近期CNCF社区也出现基于WebAssembly标准的开源项目,可以基于云原生生态和工具,在容器环境下实现WASM技术和Kubernetes的集成,经过对比测试,资源占用量减少一个数量级,其性能对比传统容器技术有较大提升,执行效率提升20%,冷启动时间大幅缩短。以上三条技术路线不是替代的关系,而是场景有侧重、技术补充和协同的关系。
截至2023年底,业界已经有许多大型商业公司借助诸如Kubernetes等容器化方式来构建大规模的互联网服务了。比如滴滴出行等。“上云”因为其自身的高可用等优势,已经成为了一种必然的技术趋势。不过现阶段轻量级虚拟化的生态仍然在发展中,需要云计算产业界的继续推进才能达到更大规模的落地应用。
无服务器架构并不是说,未来不再需要服务器,而是不再着重关注底层的基础架构,更多的注意力可以放在和业务更相关的一些逻辑实现上,例如一些函数的代码片段,平台自动根据负载按需部署和启动,以及自动伸缩代码逻辑来满足业务处理的需求。
这项新兴计算模式专注于基础设施透明化,减轻服务器管理负担,解耦应用程序,节省云服务成本,让开发者更关注自身业务创新。“Serverless”常与“Serverful”一词相对,用于描述具有服务器透明化特性的技术与应用。2014年Serverless首次以云服务概念被提出,它实现了应用开发者与服务器的分离,减轻了开发者在服务器管理、安全等方面的负担;另一方面,云提供商托管所有基础设施,消除了底层设备差异对上层应用造成的不良影响。Serverless服务主要指函数即服务FaaS(Function as a Service),通常还包括了为FaaS配套的后端即服务BaaS(Backend as a Service)。FaaS提供函数管理平台和运行平台,前者包含函数代码托管与调度工具,兼容多种主流编程语言与开发库;后者本质是改进的PaaS,维持一批函数专用容器,支持事件驱动、自动伸缩等能力。与传统中心化单体应用相比,FaaS函数应用由互相独立的函数显式编排组成,能直观地表现应用的业务逻辑控制流和数据流。 BaaS本质是后端服务(认证鉴权、安全控制和云存储等)的集成库,可适应多种应用场景,如支持移动应用的M-BaaS(Mobile BaaS)。
DevOps是个组合词,DevOps,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。
持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。
服务网格是近年兴起的一个话题,在容器微服务的基础上,通过服务网格可以让用户更精细、更智能的去管理服务之间的通讯。Service Mesh社区的旗舰项目Istio,当前的热度正在迅速的飙升。
作为云计算的最新技术成果,云原生技术可以为通信运营商网络提供更加经济、便捷的部署和运营方法,随着运营商云网融合工作推进,云原生成为运营商网络云化的核心技术和关键抓手。基于云原生技术实现云网融合成为业界共识,现阶段云网融合最迫切的问题就是网络上云,目前正处于5G网络规模部署和5G专网大力发展阶段,网络云原生当前的抓手就是5GC的云原生化。需要深入研究5GC系统架构、组网、高可靠、转发加速等CT属性,研究云原生承载5GC的技术要求,为各专业网元云原生化改造提供技术指引及范例。进一步结合技术要求,聚焦网元微服务化、高性能多网络平面、承载网络感知、资源编排等关键技术进行重点攻关,提供满足网络云化需求的云原生底座。后续依托云原生底座,实现5GC上公有云,为公有云全面解耦承接各专业网络上云打造良好开端。
目前中国电信依托自研高性能虚拟化平台,已经完成全面的5GC异厂家三层解耦测试并正在开展现网实验,即将在全网有序开展全云化5GC商用部署,并且正在积极推进5GC云原生化改造和轻量级5GC上天翼云的工作。云原生技术从本质上来说是软件技术,网络运营商一定要用IT软件的视角来看待未来的网络研发、建设和运维,积极拥抱这一变化,才可能在未来国家新基建领域中承担主力军的角色。
作为一个新兴技术,首先的研究方向就是它自身的基线技术。这方面有上面提到的容器化和虚拟化技术,微服务架构,服务网格(Service Mesh),无服务架构,DevOps和持续集成/持续部署(CI/CD)等。
除去这些作为云原生基座的技术之外,剩下的研究方向就是着眼于云原生自身的优势,问题和需求了。比如有如下这几点:
这些是目前几个比较流行的研究方向,总结起来,他们在研究的就是如何提高架构的可靠性,提高云原生架构本身的性能和资源利用率,如何让新的软件能最大化利用云原生架构的优势,如何设计云原生架构的规范,以及云原生的最佳实践这几点。当然,新的领域不可能全部套用老一套的方法论,一定还会有新的问题使得新的研究方向出现。
从历史来看,云原生的发展是随着软件工程的发展而出现的一种必然产物。在软件工业中,当人们面对过高的复杂度时,往往会借助新的抽象和设计去消除或者是转化、统一复杂度。云原生的出现,就是为了更好地解耦大规模软件系统,降低运维和部署的复杂度,让容器和集群等技术充当解决这些复杂度的工具来降低开发者的心智负担,以及运维的成本和难度。
放眼未来,受限于摩尔定律在物理上的失效,以及边缘计算的发展,同时网络基座进一步降低成本,提升质量,单体集群的算力达到顶峰,必然会导致算力走向分布式,并走向基数庞大的边缘设备集群。因此,云原生架构所要解决的问题还会长期存在,并且必然会随着未来的云拓展向边缘设备集群而变得更加复杂。届时,对于云原生架构的中间件必然会提出更高的要求,同时,云的定义发生扩展也会导致软件架构的设计出现新的,能更充分利用边缘设备集群算力等资源的软件架构设计范式的出现。所以,未来很长一段时间之内,云原生架构应该会成为软件工业体系内的一套最佳实践,对应的基础设施和中间件研发,以及对应软件生命周期在云原生上的实践也会在长期的实践中得到沉淀。但是,一旦云原生架构无法适应未来出现的平台/系统,或者安全性难以保障,亦或者是云原生也无法解决未来的软件工业的架构复杂性,那时可能就是云原生架构的谢幕之时吧。