接前一篇文章:软考 系统架构设计师系列知识点之云原生架构设计理论与实践(3)
所属章节:
第14章. 云原生架构设计理论与实践
第2节 云原生架构内涵
14.2 云原生架构内涵
关于云原生的定义有众多版本,对于云原生架构的理解也不尽相同。本节将根据广泛的云原生技术、产品和上云实践,给出一般性的理解。
14.2.1 云原生架构定义
从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具有轻量、敏捷、高度自动化的特点。由于云原生是面向“云”而设计的应用,因此,技术部分依赖于传统云计算的3层概念,即基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。
云原生的代码通常包括三部分:业务代码、三方软件、处理非功能特性的代码。其中,“业务代码”指实现业务逻辑的代码;“三方软件”是业务代码中所依赖的所有三方库,包括业务库和基础库;“处理非功能性的代码”指实现高可用、安全、可观测性等非功能性能力的代码。三部分中只有业务代码是核心,是对业务真正带来价值的,另外两个部分都只能算附属物。但是,随着软件规模的增大、业务模块规模变大、部署环境增多、分布式复杂性增强,使得今天的软件构建变得越来越复杂,对开发人员的技能要求也越来越高。云原生架构相比较传统架构进了一大步,从业务代码中剥离大量非功能性特性(不会是所有,比如易用性还不能剥离)到IaaS和PaaS中,从而减少业务代码开发人员的技术关注范围,通过云厂商的专业性提升应用的非功能性能力。
此外,具备云原生架构的应用可以最大程度利用云服务和提升软件交付能力,进一步加快软件开发。
1. 代码结构发生巨大变化
2. 非功能特性大量委托
任何应用都提供两类特性:功能特性和非功能特性。功能特性是真正为业务带来价值的代码,比如建立客户资料、处理订单、支付等。即使是一些通用的业务功能特性,比如组织管理、业务字典管理、搜索等也是紧贴业务需求的;非功能特性是没有给业务带来直接业务价值、但通常又是必不可少的特性,比如高可用能力、容灾能力、安全特性、可运维性、易用性、可测试性、灰度发布能力等。
云计算虽然没有解决所有非功能性问题,但确实有大量非功能性,特别是分布式环境下复杂非功能性问题,被云产品解决了。以大家最头疼的高可用为例,云产品在多个层面为应用提供了解决方案。
- 虚拟机
当虚拟机检测到底层硬件发生异常时,自动帮助应用做热迁移,迁移后的应用不需重新启动而仍然具备对外服务的能力,应用对整个迁移过程都不会有任何感知。
- 容器
有时应用所在的物理机是正常的,只是应用自身的问题(不如bug、资源耗尽等),而无法正常对外提供服务。容器通过监控检查探测到进程状态异常,从而实施异常节点的下线、新节点上线和生产流量的切换等操作,整个过程自动完成而无需运维人员干预。
- 云服务
如果应用把“有状态”部分都交给了云服务(如缓存、数据库、对象存储等),加上全局对象的持有小型化或具备从磁盘快速重建能力,由于云服务本身是具备极强的高可用能力的,那么应用本身会变成更薄的“无状态”应用,高可用故障带来的业务中断会降至分钟级;如果应用是N-M的对等架构模式,那么结合负载均衡产品可获得很强的高可用能力。
3. 高度自动化的软件交付
软件一旦开发完成,需要在公司内外部各类环境中部署和交付,以将软件价值交给最终客户。软件交付的困难在于开发环境到生产环境的差异(公司环境到客户环境之间的差异)以及软件交付和运维人员的技能差异,填补这些差异的是一大堆安装手册、运维手册和培训文档。容器以一种标准的方式对软件打包,容器及相关技术则帮助屏蔽不同环境之间的差异,进而基于容器做标准化的软件交付。
对自动化交付而言,还需要一种能够描述不同环境的工具,让软件能够“理解”目标环境、交付内容、配置清单,并通过代码去识别目标环境的差异,根据交付内容以“面向终态”的方式完成软件的安装、配置、运行和变更。
基于云原生的自动化软件交付相比较当前的人工软件交付是一个巨大的进步。以微服务为例,应用微服务化以后,往往被部署到成千上万个结点上,如果系统不具备高度的自动化能力,任何一次新业务的上线,都会带来极大的工作量挑战,严重时还会导致业务变更超过上线窗口而不可用。
更多内容请看下回。