​在企业架构中,云原生是重要的是对基础设施复杂性进行抽象的技术平台。云原生让应用与基础资源解耦,让业务和技术的关注点分离,将越来越多的复杂性下沉到基础设施,云原生基础设施有有哪些?

云原生基础设施在从推进过程中,粒度被细化,不断具备云原生自动化运维程度高、高效弹性的特质与能力。云原生基础设施分类如下图:

云原生基础设施有哪些​_生命周期

我们可以看到迁移的成本和复杂性在增加,弹性、可用性、容错性等非功能性也在持续增加。同时,云原生给基础架构带来了巨大的变化,从基础设施下沉、无服务器化、可观测、系统的韧性、系统的自动化,无不体现了云原生是面向未来的架构,在这个过程中,云原生基础设施主要有以下特性:​

1.一切皆为资源

云原生延续K8s一切皆资源的设计理念,将所有关于应用运维的对象抽象成几类运维资源,并对于不同的运维资源抽象不同的状态机、进行不同的生命周期编排和数据关系查询等。与此同时,资源也伴随着生命周期的管理,比如资源的资源时间与状态如下图所示。​

在云原生中,资源由几种基本要素组成,会根据不同情况有所调整,主要有以下两个部分:​

● 基础部分∶ 元数据、规则、状态、日志、事件。​

● 扩展部分∶状态机、生命周期、健康检查、依赖关系。​

云原生基础设施有哪些​_基础设施_02

2.一切皆可编排

在云原生基础设施中,可以将所有可执行的代码抽象成不同类型的执行动作,同时将执行动作编排成为流水线,以便简化各类需要执行一定操作的功能,如环境升级、应用生命周期编排、发布流程等。一般,我们可以基于Kubernetes 的 Operator 进行编排处理,并逐步构建上层应用的流水线,云原生编排流水线如下图所示:​

云原生基础设施有哪些​_云原生_03

Operator的执行动作可以分为两部分∶Action和Trigger。Action 几乎包括当下常用的轻量化代码执行方式,而 Trigger 主要针对Kubernetes 资源定制了触发方式,并根据相关的执行动作进行编排,形成流水线。在这个过程中,可以增加一些能力,比如超时、重试次数、依赖任务、执行条件等判断,以及依赖关系配置等。​

3.依赖解耦,能力下沉

交付的稳定性是以容器作为不可变基础设施,让应用程序和运行环境解耦。不可变基础设施指的是任何基础设施的实例一旦创建之后便成为只读状态,不可对其进行任何更改。如果改变了某些实例,就需要创建对应的新实例。从而减少配置工作、避免配置漂移、易于解决部署环境间的差异、简化了CI/CD的流程及版本管理。​

在基于云原生的实践中,避免将静态环境信息与应用逻辑耦合,可以通过微服务组件、Service Mesh 等减少相关的依赖,提升应用架构的可伸缩性,云原生基础设施促进了资源能力下沉,节省工作量的同时,提升了安全性,开发人员只需关心业务逻辑代码的编写,基础设施加系统的高可用由云来承担,从而使开发人员的价值最大化。云原生能力下沉如下图所示:​

云原生基础设施有哪些​_基础设施_04

4. 弹性伸缩,韧性可靠

弹性伸缩可以让系统流量高峰的时候对应用进行扩容,同时当系统流量低峰的时候可以对应用进行缩容,减少资源浪费。可以通过资源应用实例数进行自动弹性来降低我们的成本,同时可以通过自适应弹性来支撑流量不稳定场景,最大化地利用机器资源来降低成本。弹性的前提是应用为无状态应用,可以把有状态应用部署到云服务中。​

5.观察追踪,自动运维

可观测性由日志、指标和追踪来构建,在云原生中,可观测性十分重要,我们需要通过可观测性分析在面向终态的执行中出现了什么异常,以便在特殊情况下快速介入,云原生可观测性如下图所示:​

云原生基础设施有哪些​_生命周期_05

●指标数据∶通过计数器、概要等,实现指标的高效传输和存储。​

●日志数据∶可通过日志中的声明日志采集功能,将重要的日志统一采集,并通过检索功能快速定位出问题。​

● 数据跟踪∶可以使用一些链路追踪的工具或产品进行监控,同时,基础设施通过自动化手段来提升运维能力,比如CI/CD 自动化流程、日志自动化清理、自动化弹性等。​