云原生架构定义与原则是什么?

云原生架构是云原生中非常重要的一个领域,其带来的优点可以帮助企业和开发人员改善应用的技术体系,降低现代化应用的构建复杂性,更好地适配与运用云计算平台的能力和体系的关键,那么很多人都不了解云原生架构到底是什么,今天小编就来跟大家一起来学习下。

云原生架构的构建和演进都是围绕云计算的核心价值(弹性、自动化、韧性)进行的,必然在实践中有一定的规律可循,来一起看下行业内典型的架构原则。

从技术角度来说,云原生架构就是基于云原生技术的一组架构原则和设计模式的集合,主要是为了帮助企业和开发充分利用云平台所提供的平台化能力和弹性资源能力,使得开发人员将精力聚焦于业务。

当然,云原生架构对比我们传统架构有很大不同,有以下优点:

可以最大化地剥离云应用中的非业务代码部分,让云设施接管应用中原有的大量非功能特性(例如,弹性、韧性、安全、可观测性、灰度等)

具备轻量、敏捷、高度自动化等特点

可以通过与基础设施深度整合与优化,将计算、存储、网络资源管理以及相应的自动化部署和运维能力,交由云基础设施执行

应用自身会更为灵活,可只聚焦业务代码,且具有弹性和韧性

1、降低研发成本

云原生架构大幅度降低了研发成本和项目维护复杂度,那我们就来看下到底做了些什么。

首先,所有的应用都有两类特性:

功能性特性:比如,如何建立客户资料、如何处理订单、如何安全支付

非功能性特性:指虽不能为业务实现带来直接价值,但又必不可少的特性。比如,高可用能力、容灾能力、安全特性、可运维性、易用性、可测试性、灰度发布能力等

如上图,在传统架构和云原生架构中代码通常包含的三个部分:

非功能性代码:指实现高可用、安全、可观测性等非功能特性的代码

业务代码:指实现业务逻辑的核心代码

三方软件调用:指业务代码中依赖的所有第三方软件库,包括业务库和基础库

其中业务代码最为核心,是真正能为业务带来直接价值的,另外两部分都是用于支持业务代码的实现。

但由于软件和业务规模的不断扩大,部署环境也越来越复杂,分布式复杂性也持续增强。

为了因对这些变化带来的挑战,应用中的支持型代码在整个研发流程中占比越来越大,直接导致了软件构建变得越来越复杂,也对开发人员的技能要求越来越苛刻。

相对于传统架构,云原生架构强调业务研发应充分利用云平台所提供的IaaS和PaaS的通用能力。虽然云计算不能解决所有的非功能性问题,但云平台确实帮助我们解决了大量非功能性问题,特别是分布式环境下的复杂非功能性问题。

举个例子,比如最具有挑战的高可用问题,云平台在多个层面为应用提供了解决方案,如下:

1)虚拟机层面

当虚拟机检测到底层硬件异常时,可以自动将应用热迁移,且迁移后的应用无须重新启动就具备对外服务的能力,应用对整个迁移过程甚至都不会有任何感知。

2)容器层面

有时,虽然应用所在的物理机运行正常,但应用由于自身的问题(比如,出现Bug、资源耗尽等)而无法正常对外提供服务。

对于这种情况,如果采用容器,就能够通过监控探测到进程的异常状态,从而实施异常节点下线、新节点上线和生产流量切换等操作。

整个过程自动完成,无须运维人员人工干预

3)云服务层面

如果应用采用的是N-M对等架构模式,那么结合负载均衡产品则可获得几乎无损的高可用能力

2、加快迭代速度

云原生架构的应用,能够最大程度地利用云服务提升软件的交付能力,进一步加快软件的迭代速度,降低管理和运行的成本

1)面向单机资源变为面向云服务与云API研发

云原生架构对开发人员的最大影响就是,它使编程模型发生了巨大变化。

大部分编程语言都包含文件、网络、线程等技术细节,这些技术点可以帮助开发者充分利用单机资源,但也为开发带来了复杂性,因此出现大量的框架和产品来为我们解决分布式环境中网络调用、高可用、CPU竞争、分布式存储等问题。

而在云平台中,“获取存储”变成了若干服务。比如,对象存储服务、块存储服务和文件存储服务的访问和使用等。

云原生为开发人员提供了解决上述问题的技术支持:

通过OpenAPI及开源SDK,提供了解决分布式场景中的高可用性、自动扩缩容、安全、运维升级等诸多挑战的界面

开发人员不用再关心诸如节点宕机后如何在代码中将本地保存的内容同步到远端

开发人员不用担心当业务峰值到来时如何对存储节点进行扩容

运维人员不用再考虑诸如在发现零安全天问题时如何紧急升级第三方存储软件等问题

这些改变不仅降低了开发者的工作难度,也大大提高了软件的性能和可维护性。

云平台将软硬件能力升级成了服务,使开发人员的开发复杂度和运维人员的运维工作量都得到了极大降低

开发人员不再需要掌握文件及其分布式处理技术,也不再需要掌握各种复杂的网络技术,技术栈的简化让业务开发变得更敏捷

2)高度自动化的软件交付能力

公司环境与客户环境之间的差异,以及软件交付与运维人员的技能差异,都会影响软件交付的质量。

以往用于填补这些差异的是各种用户手册、安装手册、运维手册和培训文档,容器的出现改变了这一现状。

基于云原生的自动化软件交付相较于当前的人工软件交付,是一个巨大的进步。

以微服务为例,应用微服务化以后,往往会被部署到成千上万个节点上,如果系统不具备高度的自动化能力,那么任何一次新业务的上线,都将带来极大的工作量挑战,严重时还会导致业务部署时长超过上线窗口期而不可用。

作为一种架构模式,云原生架构也必然有若干原则来对应用架构进行核心控制。这些原则可以帮助架构师在进行技术选型时更加高效、准确,下面一起来学习下。

1、服务化原则

如图,随着业务的不断发展,单体应用能够承载的容量将逐渐到达上限,即使通过应用改造来突破垂直扩展(ScaleUp)的瓶颈,并将其转化为支撑水平扩展(ScaleOut)的能力,在全局并发访问的情况下,也依然会面临数据计算复杂度和存储容量的问题。

因此,需要将单体应用进一步拆分,按业务边界重新划分成分布式应用,使应用与应用之间不再直接共享数据,而是通过约定好的契约进行通信,以提高扩展性

服务化设计原则:

通过服务化架构拆分不同生命周期的业务单元,实现业务单元的独立迭代,从而加快整体的迭代速度,保证迭代的稳定性

服务化架构采用的是面向接口编程方式,增加了软件的复用程度,增强了水平扩展的能力

虽然随着云原生兴起,服务化原则不断演进、落地于实际业务,但企业在实际落地过程中也会遇到不少的挑战。比如:

与自建数据中心相比,公有云下的服务化可能存在巨大的资源池,使得机器错误率显著提高;

按需付费增加了扩缩容的操作频度;

新的环境要求应用启动更快、应用与应用之间无强依赖关系、应用能够在不同规格的节点之间随意调度等诸多需要考虑的实际问题。

但可以预见的是,这些问题会随着云原生架构的不断演进而得到逐一解决。

2、弹性原则

弹性原则是指系统部署规模可以随着业务量变化自动调整大小,而无须根据事先的容量规划准备固定的硬件和软件资源。

优秀的弹性能力不仅能够改变企业的IT成本模式,使得企业不用再考虑额外的软硬件资源成本支出(闲置成本),也能更好地支持业务规模的爆发式扩张。

在云原生时代,企业在构建IT系统时,应该尽早考虑让应用架构具备弹性能力,以便在快速发展的业务规模面前灵活应对各种场景需求,充分利用云原生技术及成本优势。

要想构建弹性的系统架构,需要遵循如下四个基本原则:

1)按功能切割应用

大型复杂系统可能由成百上千个服务组成,架构师在设计架构时,需要遵循的原则是:

各服务之间通过标准的服务发现(ServiceDiscovery)找到对方,并使用标准的接口进行通信

各服务之间松耦合,每一个服务能够各自独立地完成弹性伸缩,从而避免服务上下游关联故障的发生

2)支持水平切分

按功能切割应用并没有完全解决弹性的问题。一个应用被拆解为众多服务后,随着用户流量的增长,单个服务最终也会遇到系统瓶颈。

因此在设计上,每个服务都需要具备可水平切分的能力,以便将服务切分为不同的逻辑单元,由每个单元处理一部分用户流量,从而使服务自身具备良好的扩展能力。

这其中最大的挑战在于数据库系统,因为数据库系统自身是有状态的,所以合理地切分数据并提供正确的事务机制将是一个非常复杂的工程。

在云原生时代,云平台所提供的云原生数据库服务可以解决大部分复杂的分布式系统问题,因此,如果企业是通过云平台提供的能力来构建弹性系统,自然就会拥有数据库系统的弹性能力。

3)自动化部署

系统突发流量通常无法预计,因此常用的解决方案是,通过人工扩容系统的方式,使系统具备支持更大规模用户访问的能力。

在完成架构拆分之后,弹性系统还需要具备自动化部署能力,以便根据既定的规则或者外部流量突发信号触发系统的自动化扩容功能。

满足系统对于缩短突发流量影响时长的及时性要求,同时在峰值时段结束后自动缩容系统,降低系统运行的资源占用成本。

4)支持服务降级

弹性系统需要提前设计异常应对方案。

比如,对服务进行分级治理,在弹性机制失效、弹性资源不足或者流量峰值超出预期等异常情况下,系统架构需要具备服务降级的能力。

通过降低部分非关键服务的质量,或者关闭部分增强功能来让出资源,并扩容重要功能对应的服务容量,以确保产品的主要功能不受影响。

随着云原生技术的发展,FaaS、Serverless等技术生态逐步成熟,构建大规模弹性系统的难度逐步降低。当企业以FaaS、Serverless等技术理念作为系统架构的设计原则时,系统就具备了弹性伸缩的能力。

3、可观测原则

与监控、业务探活、APM(ApplicationPerformanceManagement,应用性能管理)等系统提供的被动能力不同,可观测性更强调主动性。

在云计算这样的分布式系统中,主动通过日志、链路跟踪和度量等手段,让一次App点击所产生的多次服务调用耗时、返回值和参数都清晰可见,甚至可以下钻到每次第三方软件调用、SQL请求、节点拓扑、网络响应等信息中。

构建可观测性体系,需要遵循如下三个基本原则:

1)数据的全面采集

指标(Metric)、链路跟踪(Tracing)和日志(Logging)这三类数据是构建一个完整的可观测性系统的“三大支柱”。

而系统的可观测性就是需要完整地采集、分析和展示这三类数据。

指标:

系统资源指标(如CPU使用率、磁盘使用率和网络带宽情况等)

应用指标(如出错率、服务等级协议SLA、服务满意度APDEX、平均延时等)

业务指标(如用户会话数、订单数量和营业额等)

链路跟踪

链路跟踪是指通过TraceId的唯一标识来记录并还原发生一次分布式调用的完整过程,贯穿数据从浏览器或移动端经过服务器处理,到执行SQL或发起远程调用的整个过程。

日志

2)数据的关联分析

让各数据之间产生更多的关联,这一点对于一个可观测性系统而言尤为重要。

出现故障时,有效的关联分析可以实现对故障的快速定界与定位,从而提升故障处理效率,减少不必要的损失。

一般情况下,会将应用的服务器地址、服务接口等信息作为附加属性,与指标、调用链、日志等信息绑定,并且赋予可观测系统一定的定制能力,以便灵活满足更加复杂的运维场景需求。

3)统一监控视图与展现

多种形式、多个维度的监控视图可以帮助运维和开发人员快速发现系统瓶颈,消除系统隐患。

监控数据的呈现形式应该不仅仅是指标趋势图表、柱状图等,还需要结合复杂的实际应用场景需要,让视图具备下钻分析和定制能力,以满足运维监控、版本发布管理、故障排除等多场景需求。

随着云原生技术的发展,基于异构微服务架构的场景会越来越多、越来越复杂,而可观测性是一切自动化能力构建的基础。只有实现全面的可观测性,才能真正提升系统的稳定性、降低MTTR。

4、韧性原则

韧性是指当软件所依赖的软硬件组件出现异常时,软件所表现出来的抵御能力。

这些异常通常包括:

·硬件故障

·硬件资源瓶颈(如CPU或网卡带宽耗尽)

·业务流量超出软件设计承受能力

·影响机房正常工作的故障或灾难

·所依赖软件发生故障

韧性能力的核心设计理念是面向失败设计,即考虑如何在各种依赖不正常的情况下,减小异常对系统及服务质量的影响并尽快恢复正常。

韧性原则的实践与常见架构主要包括:

·服务异步化能力

·重试/限流/降级/熔断/反压

·主从模式

·集群模式

·多AZ(AvailabilityZone,可用区)的高可用

·单元化

·区域(Region)容灾

·异地多活容灾

5、所有过程自动化原则

技术是把“双刃剑”,容器、微服务、DevOps以及大量第三方组件的使用,在降低分布式复杂性和提升迭代速度的同时,也提高了软件技术栈的复杂度,加大了组件规模,从而不可避免地导致了软件交付的复杂性。

如果控制不当,应用就会无法体会到云原生技术的优势。不过通过IaC、GitOps、OAM、Operator和大量自动化交付工具在CI/CD(持续集成/持续交付)流水线中的实践,企业可以标准化企业内部的软件交付过程,也可以在标准化的基础上实现自动化。

要想实现大规模的自动化,需要遵循如下四个基本原则:

1)标准化

实施自动化,首先要通过容器化、IaC、OAM等手段,标准化业务运行的基础设施,并进一步标准化对应用的定义乃至交付的流程。

只有实现了标准化,才能解除业务对特定的人员和平台的依赖,实现业务统一和大规模的自动化操作。

2)面向终态

面向终态的原则强调应该避免直接通过工单系统、工作流系统组装一系列过程式的命令来变更应用,而是通过设置终态,让系统自己决策如何执行变更。

以系统为例,面向终态描述了系统的最终形态,用户只需要描述自己需要什么,不需要详细规划执行路径,系统会根据线上的实时状况以及运维知识库来动态调整,来达到系统安全稳定的目的。

举个通俗易懂的例子,在灰度过程中,会根据灰度的需求来自动执行灰度策略来动态分配流量

自动化最终所能达到的效果不只取决于工具和系统的能力,更取决于为系统设置目标的人,因此要确保找到正确的目标设置人。

4)面向失败设计

要想实现全部过程自动化,一定要保证自动化的过程是可控的,对系统的影响是可预期的。

我们不能期望自动化系统不犯错误,但可以保证即使是在出现异常的情况下,错误的影响范围也是可控的、可接受的。

因此,自动化系统在执行变更时,同样需要遵循人工变更的最佳实践,保证变更是可灰度执行的、执行结果是可观测的、变更是可快速回滚的、变更影响是可追溯的。

6、零信任原则

基于边界模型的传统安全架构设计,是在可信和不可信的资源之间架设一道墙,例如,公司内网是可信的,而因特网则是不可信的。

在这种安全架构设计模式下,一旦入侵者渗透到边界内,就能够随意访问边界内的资源了

云原生架构的应用、员工远程办公模式的普及以及用手机等移动设备处理工作的现状,已经完全打破了传统安全架构下的物理边界。员工在家办公也可以实现与合作方共享数据,因为应用和数据被托管到了云上。

如今,边界不再是由组织的物理位置来定义,而是已经扩展到了需要访问组织资源和服务的所有地方,传统的防火墙和VPN已经无法可靠且灵活地应对这种新边界。

因此,我们需要一种全新的安全架构,来灵活适应云原生和移动时代环境的特性,不论员工在哪里办公,设备在哪里接入,应用部署在哪里,数据的安全性都能够得到有效保护。如果要实现这种新的安全架构,就要依托零信任模型

零信任模型假设防火墙边界已经被攻破,且每个请求都来自于不可信网络,因此每个请求都需要经过验证。

简单来说,“永不信任,永远验证”。

如果围绕边界来讨论安全架构,那么传统安全架构的边界是物理网络,而零信任安全架构的边界则是身份,这个身份包括人的身份、设备的身份、应用的身份等。

要想实现零信任安全架构,需要遵循如下三个基本原则:

显式验证:

最少权限:

对于每个请求,只授予其在当下必需的权限,且权限策略应该能够基于当前请求上下文自适应。

假设被攻破:

假设物理边界被攻破,则需要严格控制安全爆炸半径,将一个整体的网络切割成对用户、设备、应用感知的多个部分。

对所有的会话加密,使用数据分析技术保证对安全状态的可见性。

总体来说,整个零信任模型的建设包括身份、设备、应用、基础设施、网络、数据等几个部分。

零信任的实现是一个循序渐进的过程。

例如,当组织内部传输的所有流量都没有加密的时候第一步应该先保证访问者访问应用的流量是加密的,然后再逐步实现所有流量的加密。

如果采用云原生架构,就可以直接使用云平台提供的安全基础设施和服务,以便帮助企业快速实现零信任架构。

THE END
1.深入解析:及时响应率如何计算?(及时响应率如何计算)在服务行业,及时响应率是一项重要的服务质量指标。那么,及时响应率究竟是如何计算的呢? 一、定义及重要性 及时响应率是指在规定时间内完成响应的次数与总响应次数的比值。它直接反映了服务团队的响应速度和工作效率,对于提升客户满意度具有重要意义。 二、计算方法 https://www.zaixianjisuan.com/jisuanzixun/shenrujiexi_jishixiangyinglvruhejisuan_.html
2.性能测试中常用的性能指标有哪些?每个指标的含义是什么一般,我们做性能测试的目标是,在大用户量、数据量的超负荷下,获得服务器运行时的相关数据,从而分析出系统瓶颈,提高系统的稳定性。 而在一份性能测试报告里,会看到以下的这些关键的数据指标: 最大并发用户数,HPS(点击率)、事务响应时间、每秒事务数、每秒点击量、吞吐量、CPU 使用率、物理内存使用、网络流量使用等https://maimai.cn/article/detail?fid=1833623923&efid=0gCSI9h2w6du71OY7-jdlw
3.性能指标有哪些性能指标是用来衡量系统或产品在特定方面的表现。以下是一些常见的性能指标: 响应时间(Response Time):系统对请求的响应所需的时间。 吞吐量(Throughput):系统在单位时间内处理的请求数量。 资源利用率(Resourcehttps://www.autohome.com.cn/ask/6920703.html
4.抖音商家要如何解读客服分析看板数据?抖音的客服分析看板支持商家查看最新客服水平概况,筛选时间段查看近期趋势,具体指标包括:三分钟平均回复率、接起率、平均响应时长、平均等待时长等客服效率指标,用户咨询量、转人工接待量、人工已接待量等客服量指标,客服销售额及满意率等用户指标。商家可实时监控以上关键数据指标判断当前客服水平,及时监控指标变化趋势来https://www.shuaishou.com/school/infos55035.html
5.最全的前端性能定位总结全栈前端精选(可以帮助我们捕获更多的首次渲染之后的加载性能,但这项指标过于复杂,而且很难解释,也经常出错,没办法确定主要内容什么时候加载完。) 长任务(Long Task) :当一个任务执行时间超过 50ms 时消耗到的任务 (50ms 阈值是从 RAIL 模型总结出来的结论,这个是 google 研究用户感知得出的结论,类似用户的感知/耐心的阈值https://www.shangyexinzhi.com/article/4580576.html
6.如何使用阿里云Prometheus监控查询原始压测指标阿里云Prometheus监控提供统一采集、存储和展示阿里云云服务监控数据的能力,并提供对应的Grafana监控大盘和告警。本文介绍使用阿里云Prometheus监控查询原始压测指标的方法。https://help.aliyun.com/document_detail/416784.html
7.性能测试性能需求挖掘性能方案制定及压测嘲设计之疑惑与性能指标: 1、吞吐量 服务端返给客户端的数据量,是指对网络单位时间内成功地传送数据的数量,是单位时间服务器处理事务的总数 Tps 是服务器每秒处理的事务字节数 随用户数逐渐增多,吞吐量应该是递增,如果吞吐量下降,服务器处理事务能力下降,响应时间变长,达到系统瓶颈 https://cloud.tencent.com/developer/article/1527489
8.抖店App上线客服数据透传快捷短语功能同时,平台数据表明,客服提升首次响应速度和平均响应速度后,能让消费者进线咨询时,对客服的满意度评价更高,所以首次响应时长和平均响应时长也能间接影响商家体验分。详情请参考>>《飞鸽体验分考核指标及提升手册》 如何使用客服数据 (1)查看客服实时数据 客服可以在【抖店App-接待】页的右上角点击查看「客服数据」https://school.jinritemai.com/doudian/wap/article/aHWrB32aEzDM
9.性能测试常见指标分析响应时间的指标取决于具体的服务。如智能提示一类的服务,返回的数据有效周期短(用户多输入一个字母就需要重新请求),对实时性要求比较高,响应时间的上限一般在100ms以内。而导航一类的服务,由于返回结果的使用周期比较长(整个导航过程中),响应时间的上限一般在2-5s。 https://zhuanlan.zhihu.com/p/405635123
10.神策数据正式推出智能预警分析,你的指标预警小管家上线啦分析师/运营/产品同学需要每日关注实时/离线数据,人工操作费时费力,效果不佳; 依赖业务人员经验设置预警规则,在特殊场景下难以精准定位,误报、漏报异常…… 以上场景有没有觉得很熟悉?在企业的业务开展过程中,运营人员希望能够得到“优惠券领取量”“新用户流失率”“广告位点击量”等关键指标变动的实时反馈,一方面提https://www.sensorsdata.cn/blog/20210826/
11.宁德市交通运输局关于印发《宁德市道路运输车辆动态监督管理与第三十三条道路运输车辆动态监督管理考核指标包括: (一)平台连通率:统计期内,下级平台与上级平台之间保持正常数据传输的时间总和占统计期间总时长的比率。 (二)车辆入网率:截至某一统计时点,至少向上级平台传输一次合格动态数据的重点营运车辆数占本辖区内或本企业重点营运车辆总数的比率。 https://jtj.ningde.gov.cn/xxgk/flfg/ghxwj/202109/t20210928_1529054.htm
12.响应时间MySQL数据库运维的五大指标数据库技术Linux公社响应时间是指一条查询或者更新语句从发出请求到接收完数据的时间。 因为最大响应时间的不确定性和不可重复性,所以一般使用X%的查询响应时间作为指标。如果值为95%为10ms,意味着95%的查询会在10ms内返回。对于OLTP查询来说,在50ms内返回是比较理想的结果。超过200ms的查询可以视为慢查询。 https://blog.csdn.net/weixin_28854085/article/details/113230810
13.华北高速:招商局公路网络科技控股股份有限公司换股吸收合并公司暨舍五入所致;本报告书摘要所引用的财务数据和财务指标,如无特殊说明,均指合并报 表口径的财务数据和根据该类财务数据计算的财务指标。 43 第二节 本次发行概况 一、本次发行的基本情况 (一)发行股票类型 人民币普通股(A 股) (二)发行股数 554,832,865 股 (三)每股面值 1.00 元/股 8.41 元/股(除息调整https://stock.stockstar.com/notice/JC2017100900000329_17.shtml
14.淘宝客服服务诊断分嘲提升解决方案预计纳入考核指标:咨询满意度、售后3日FCR、人工平均响应时长等,将分阶段上线。 为什么要看服务诊断: 市场竞争环境发生变化,从增量市场过度到存量市场,通过提升服务体验留住消费者已经势在必行。 好的服务会对转化和复购产生正面影响,反之,不好的服务会造成消费者流失、销售损失、品牌口碑下滑。https://www.maijia.com/article/564545
15.软考高级——信息系统项目管理师(第4版)思维导图模板系统实施阶段是将设计的系统付诸实施的阶段。这一阶段的任务包括计算机等设备的购置、安装和调试、程序的编写和调试、人员培训、数据文件转换、系统调试与转换等。系统实施是按实施计划分阶段完成的,每个阶段应写出实施进展报告。系统测试之后写出系统测试分析报告。 https://www.processon.com/view/654c455f8f11b40fe56ece43