行业动态

防御吧作为15年知名老牌域名服务商,CNNIC和CANN双认证域名注册商,已经
持续为500多万个域名提供服务,包括智能DNS/自由转移/隐私保护等服务!
云原生架构定义与原则是什么?
2023-03-10 13:31:21 【

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




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


  云原生架构定义

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


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


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


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


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


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


  下面我们就来继续详细了解下云原生架构所带来的相关优势


  1、降低研发成本


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


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


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


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


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


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


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


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


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


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


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


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


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


  1)虚拟机层面


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


  2)容器层面


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


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


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


  3) 云服务层面


  云服务具备极强的高可用特性和7×24小时服务能力,如果应用把“有状态”部分(如缓存、数据库、对象存储等)全部交给云服务,加上进程内存中全局对象的持有小型化和应用快速重构能力(比如基于快照快速恢复到最新状态),那么应用本身就会变成更轻量的“无状态”应用,从而使可用性故障造成的业务中断时间降至分钟级;


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


  综上所述,借助云原生架构,业务研发可以降低原本大量耦合的非业务逻辑占比,缩减业务代码开发人员的技术关注范围,并通过云平台提供的服务提升应用的稳定性和可持续发展性


  2、加快迭代速度


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


  容器就像集装箱一样,以一种标准的方式对软件进行打包,利用容器及其相关技术屏蔽了不同环境之间的差异,提供了标准化的软件交付能力。


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


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


  云原生架构原则

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


  1、服务化原则


  在软件开发过程中,当代码数量与开发团队规模都扩张到一定程度后,就需要重构应用,通过模块化与组件化的手段分离关注点,降低应用的复杂度,提升软件的开发效率,降低维护成本


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


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


  服务化设计原则:


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


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


  在架构层面抽象化业务模块之间的关系,帮助业务模块实现基于服务流量(而非网络流量)的策略控制和治理,无须关注这些服务是基于何种编程语言开发的


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


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


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


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


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


  2、弹性原则


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


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


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


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


  1)按功能切割应用


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


  将相关的逻辑放到一起,不相关的逻辑拆解到独立的服务中


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


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


  2)支持水平切分


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


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


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


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


  3)自动化部署


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


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


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


  4)支持服务降级


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


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


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


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


  3、可观测原则


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


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


  在微服务架构中,系统的故障点可能出现在任何地方,因此我们需要针对可观测性进行体系化设计,以降低MTTR(故障平均修复时间)。


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


  1)数据的全面采集


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


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


  指标:


  是指在多个连续的时间周期里用于度量的KPI数值。一般情况下,指标会按软件架构进行分层,分为:


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


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


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


  链路跟踪


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


  日志


  日志通常用来记录应用运行的执行过程、代码调试、错误异常等信息,如Nginx日志可以记录远端IP、发生请求时间、数据大小等信息。日志数据需要集中化存储,并具备可检索的能力。


  2)数据的关联分析


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


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


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


  3)统一监控视图与展现


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


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


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


  4、韧性原则


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


  这些异常通常包括:


  ·硬件故障


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


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


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


  ·所依赖软件发生故障


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


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


  ·服务异步化能力


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


  ·主从模式


  ·集群模式


  ·多AZ(Availability Zone,可用区)的高可用


  ·单元化


  ·区域(Region)容灾


  ·异地多活容灾


  5、所有过程自动化原则


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


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


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


  1)标准化


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


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


  2)面向终态


  面向终态是指声明式地描述基础设施和应用的期望配置,持续关注应用的实际运行状态,使系统自身反复地变更和调整直至趋近终态的一种思想。


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


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


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


  3)关注点分离


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


  在描述系统终态时,要将应用研发、应用运维、基础设施运维这几种主要角色所关注的配置分离开来。


  各个角色只需要设置自己所关注和擅长的系统配置,以便确保设定的系统终态是合理的


  4)面向失败设计


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


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


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


  6、零信任原则


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


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


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


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


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


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


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


  在零信任模型下,每个请求都要经过强认证,并基于安全策略得到验证授权,与请求相关的用户身份、设备身份、应用身份等,都会作为核心信息来判断请求是否安全。


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


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


  显式验证:


  对每个访问请求都进行认证和授权。认证和授权需要基于用户身份、位置、设备信息、服务和工作负载信息以及数据分级和异常检测等信息来进行。


  例如,对于企业内部应用之间的通信,不能简单地判定来源IP是内部IP就直接授权访问,而是应该判断来源应用的身份和设备等信息,再结合当前的策略授权


  最少权限:


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


  例如,HR部门的员工应该拥有访问HR相关应用的权限,但不应该拥有访问财务部门应用的权限


  假设被攻破:


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


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


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


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


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


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


】【打印关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇没有了 下一篇Idc服务商是怎样防护网络坏意进犯..

立足首都,辐射全球,完美防御专注云防御及云计算服务15年!

联系我们

服务热线:010-56157787 ,010-56159998
企业QQ:4000043998
技术支持:010-56159998
Copyright ? 2003-2016 gnmianbeian.com. 免备案服务器网版权所有 增值许可:京B2-20140042号
售前咨询
公司总机:4000043998 01056155355
24小时电话:010-56159998
投诉电话:18910191973
值班售后/技术支持
售后服务/财务
备案专员
紧急电话:18610088800