天下武功唯快不破,传统的开发模式已经无法适应快节奏的市场需求,在此背景下催生出敏捷、精益、DevOps 等新概念的诞生。
尤其以云原生为代表的下一代架构更是进入火箭式发展阶段,以容器、Kubernetes、Serverless 等为代表的新技术引领移动互联网进入急速赛道。
一、什么是云原生?
“云原生”这个概念历史并不长,业内对它的理解也有很多版本。其中,认可度较高的是 CNCF(云原生计算基金会)给出的定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生是包括了容器、微服务、DevOps、CI/CD、敏捷、无服务器、应用现代化、企业数字化转型等等新概念为一体的技术体系,没有特别清晰的边界,且在持续演进发展之中。本质上来讲,云原生是为了应对企业 IT 场景一系列需求变化的产物:
在云计算技术普及之前,IT 系统主要以项目制的形式孤立建设,其需求和设计都是可规划的;但在今天的场景下,分布式的系统部署方式和池化的资源分配方式是非常大的变化,此外应用系统的处理峰值需求往往难以预估,对可扩展能力提出了非常高的要求。
传统 IT 系统以单体架构为主,云计算时代的技术则更多以分布式架构落地。带来了很多系统架构实现和业务实现方式、技术实现体系等的不同。
传统 IT 场景更重视稳定性,操作以工具 + 人工介入为主;如今企业更看重流水线的价值,希望通过全方位的自动化提升 IT 的运维和开发的生产率。
云计算时代的业务追求持续在线,尽量减少停机,催生了灰度、蓝绿、金丝雀等新一代发布流程。
云计算时代,开源软件盛行,利用开源软件的技术提升技术先进性,同时也带来了很多新的问题。
正是因为不同时期的需求与技术路径存在诸多差异,云计算业务场景需要针对性打造高效的实现方式,进而产生了云原生的理念:专为云计算场景设计的原生实现。
二、原生应用有什么 “关键特征”?
1、弹性伸缩性:根据业务负载自动伸缩,做到秒级扩缩容能力,灵活动态分配或释放资源,结合弹性计费策略,这是降低用户费用重要手段之一,对服务而言需要的关键技术点就是服务本身的 “轻量级容器化” 和以此为基础的 “不可变基础设施” 特征。
2、容错性:负载均衡,自动限流降级熔断,异常流量自动调度,故障隔离,宕机自动 迁移等。
3、可观测性:丰富且细粒度的监控(实时指标、链路追踪、日志),秒级监控能力,做到自动化报警,可持久化的提供查询。
4、发布稳定性:为应对频繁变更带来的稳定性风险,需建立无人值守的变更发布系统,具备自动化的灰度、蓝绿等发布策略,同时建立变更前中后的监控基线,具备异常变更的熔断和自动化回滚能力。
5、易于管理:需要从人工 运维到自动运维的转变,具备自动化异常分析诊断能力,无需登录服务器。
6、极致体验:包括应用分配/创建/资源申请/环境配置/开发测试/发布/监控报警/排障定位等需要做到通畅与简单,一站式体验,避免繁杂的搭积木式操作。
7、弹性计费:支持按量(如流量,存储量,调用次数,时长等),按天(固定的如年/月/日),预留式,抢占式等多种定价策略,业务可根据实际情况灵活动态切换匹配出一个最优计量模式。
三、云原生有哪些“关键技术”?
为便于读者在了解实践云原生架构的方法之前能有一个系统性的思维,在此详解云原生基础架构的代表技术,及利用云原生构建出来的云原生应用的特征。
1、容器
正如我们现实世界中的集装箱技术加速了贸易全球化的进程,容器技术的出现也解决了微服务架构下大量应用部署的问题,容器的环境自包含特性,可以让我们一次构建,到处运行,其不仅解决了虚拟机所能够解决的问题,同时也能够解决由于资源要求过高虚拟机无法解决的问题。
容器的特点主要包括:隔离应用依赖、创建应用镜像并进行复制、创建容易分发的即启即用的应用、支持实例简单、快速地扩展等。
2、不可变的基础设施
在传统的物理服务器或虚拟机部署方式,因其每个都有自己的特征,我们称之为宠物。
当部署在宿主机上的应用出现故障,我们需要对症下药,排除问题恢复业务,但是在云原生架构下,我们称部署方式为牲畜,一旦应用部署完成之后,那么这套应用基础设施就不会再修改了。
如果需要更新,那么需要现更改公共镜像来构建新服务直接替换旧服务。而我们之所以能够实现直接替换,就是因为容器提供了自包含的环境(包含应用运行所需的所有依赖),所以对于应用而言,完全不需要关心容器发生了什么变化,只需要把容器镜像本身修改即可。
因此,对于云友好的基础设施是随时可以替换和更换的,这就是因为容器具有敏捷和一致性的能力,也就是云时代的应用基础设施。
容器编排引擎相关工具有 Kubernetes 、Swarm 等,用以解决容器的管理和调度问题。
3、声明式的 API
声明式不同于命令式,通过向工具描述自己想要让事物达到的目标终态,然后由这个工具自己内部去计算和实现如何令这个事物达到目标状态。
简言之,声明式设计中,描述的是目标状态,其中就为我们极大的简化了实现过程中的异常情况及调度过程。
4、微服务
微服务相较于单体应用,将架构进行拆解,解决了单体应用后期难以扩展和低效的开发效率等问题。
根据领域模型将巨大的单体分成界限清晰的微服务,并保持每个服务独立可以迭代,具有服务高度自治、高效迭代、易于扩展和支持多语言编程等优点。
5、服务网格
微服务之间该如何实现调用,以及中间的调用策略该如何执行,此刻就需要用到服务网格。
目前服务网格架构有侵入式和非侵入式两种架构,区别在侵入式需要在开发框架中进行集成,需要使用 SDK 来实现一部分功能。
非侵入式架构在部署阶段以 sidecar 模式与业务运行结合,通过接管网络流量实现透明代理,从而实现一系列网络策略及监控,开发者仅需专注业务即可,无需对代码进行修改。
这种方式以服务网格(Service Mesh)为代表,让应用更加轻量,目前最火的服务网格技术有 Istio、Linkerd、Dubbo Mesh 等,将其下沉到基础设施层,用户可以快速编排出复杂环境、复杂依赖关系的应用程序。
同时开发者又无须过分关心应用程序的监控、扩展性、服务发现和分布式追踪这些烦琐的事情,从而更专注于自身业务程序开发。
网页名称:当下超火的“云原生”,究竟是什么?
文章源于:
http://njwzjz.com/article/sdsdoj.html