微服务治理正当时

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 随着微服务技术的发展,微服务的概念早已深入人心,越来越多的企业开始选择微服务架构来开发自己的业务应用,因为微服务架构可以让业务迭代更高效。

微服务治理正当时

——十眠

云原生应用平台

一、微服务治理的重要性与挑战

image.png

随着微服务技术的发展,微服务的概念早已深入人心,越来越多的企业开始选择微服务架构来开发自己的业务应用,因为微服务架构可以让业务迭代更高效。


依照微服务架构将业务进行解耦的过程中,微服务应用的数量会逐步增多,调用的链路也会越来越长,服务与服务之间的调用和依赖关系也变得愈加复杂。


在此过程中,如果不对微服务进行适当的治理,由于微服务间复杂的依赖关系,会导致很小的技术问题被放大,从而引发效率、稳定性等问题,最终导致的问题可能会远大于微服务架构本身带来的架构红利。


可见,微服务架构是一把双刃剑。


随着微服务架构的复杂化,大规模之下,再小的问题都会牵一发而动全身。因此,企业进行微服务化到一定程度之后,微服务治理是企业必然要面对的阶段,它是微服务发展的必经之路。架构越复杂,治理越是刚需。

image.png

原生微服务下,微服务治理需要面临以下三个方面的挑战:


第一,效率方面。

开发阶段需要考虑的是,应用上云之后,如何让本地的应用可以更好地部署到云上,对业务进行联调,包括流量需要能够轻松地从云上导到本地,便于做开发调试,或从本地很方便地调用到云上的微服务进行联调。通常微服务无法在本地完整地部署一整套系统,所以本地开发的应用只是微服务链路的一小部分。


微服务上云之后,与原先在自身机房进行开发联调相比,会变得更困难。同时在线上运维方面,通常需要频繁地对微服务进行变更,而这些变更可能会引发一系列问题。因此在白天的高峰期时往往无法做发布,因为发布过程中会有一些业务流量出现损失,使得研发人员不得不选择在半夜业务的低峰期进行变更。


此外,微服务框架通常会引入服务治理的逻辑,这些逻辑通常以 SDK 的方式被业务代码所依赖,因此涉及到此类逻辑的变更与升级都需要通过修改代码来实现,会造成非常大的升级成本。


   进入到云原生体系后,以 QPS 为主的云原生体系强调的是集群间的灵活调度,以 POD 为单位任意调度资源。被调度后 POD IP 会发生改变,因此,传统的服务治理面对 IP 进行的治理规则都会失效。所以,如何让服务治理体系更适应云原生体系,也是需要解决的问题。


第二,稳定性方面,稳定性大于一切。

高可用问题是业务必须面对的。业务通常会在多个可用区进行部署,甚至需要考虑异地多活。


同时,微服务之间的调用更需要安全可信。层出不穷的安全漏洞在一定程度上也反映了当前上云阶段在安全方面存在的问题。此外,安全漏洞出现之后,中间件 SDK 的升级也会变得异常困难。即使数据库层面做了非常多权限管控,但由于微服务被授予数据访问较高的权限,微服务的调用被恶意攻击,也可能会导致敏感的数据被泄露。


第三,成本方面。

业务面临高速增长的流量,迫切需要快速弹性来补充更多的资源以承载业务的高峰;业务进入低谷时,又希望能进行缩容来节省资源。因此云产品提供快速灵活的弹性机制是微服务上云之后急需的一项能力。


微服务迁移上云的成本也非常高。迁移到某个云上以后发现效果不符合预期,选择下云,也会产生极大的成本。

image.png


而如果选择自研微服务,考虑到对生产的应用进行微服务治理,微服务框架通常会引入服务治理的逻辑,会以 SDK 的方式被业务代码所依赖,逻辑的变更与升级都需要通过修改代码的方式来实现,会造成非常大的接入和升级成本。


此外,对微服务治理功能的研发意味着需要付出人力对其组件进行管理运维,同时自建的方式也会使得功能非常贴近业务,也意味着功能比较单一,未来的可扩展性较弱。

与此同时,全链路灰度、无损上下线涉及的技术细节非常多。以全链路灰度为例,涉及到动态路由、节点打标、流量打标、分布式链路追踪等,技术实现成本非常高。


 基于DubboSpring Cloud 等服务框架本身的复杂性,随着微服务数量增多,调用链路也会越来越长,问题的定位与解决也成为了难以解决问题。


二、MSE 微服务治理

可以设想,如果依靠阿里巴巴或者阿帕奇等专业团队支持,企业在微服务深化的过程中是否会变得更加从容?


阿里云 MSE 微服务治理正是一款这样的产品。

image.png

MSE 微服务治理以无侵入的方式提供了全链路灰度、流量防护、离群实例摘除、金丝雀发布、微服务治理、流量可观测等核心能力。相比于自建系统,它提供了非常丰富的差异化能力,覆盖了从开发态、测试态、运行态的微服务全生命周期,同时无缝支持市面上近五年来全部 Spring Cloud Dubble框架,帮助企业以更经济、高效的路径在云上快速构建完整的微服务治理体系,能够有效提升微服务应用的开发效率和线上稳定性。

image.png

近日,阿里云MSE 微服务治理在原有的基础版和专业版之上推出了企业版,提供了微服务应用以及常用网关的流量管控与容错能力,从流量控制、并发控制、熔断降级、自适应保护、热点防控等多个维度保障业务的稳定性,帮助用户更好地应对流量激增或服务依赖不稳定的问题。企业版可以理解为开源了Sentinel 的商业版本。


同时, MSE 治理中心还增加了应用配置的能力,帮助用户动态管理代码中的配置项,可在多种业务场景下使用。一是业务逻辑预埋的功能开关,比如需要动态开启某个促销活动,将一些耗时的操作降级;二是无需应用重启就能动态调整应用操作级别,比如修改线上的日记级别,指定 AB Test 路径,动态调整线程池策略等;三是 list map 等复杂类型结构化的内容推送,比如可以定时推送大促商品名单,统一发放优惠券等。


上图右侧是基础版、专业版以及企业版的功能矩阵与功能区分。


MSE 服务治理希望助力企业构建完整的微服务治理体系,包括以下几个比较常用的能力:


无损上线:从微服务注册到服务预热,到Readiness 检查通过,再到正常的流量,通过全生命周期的全部方案来保证,无论业务在扩容、重启还是变更过程中,都能无损上线。


全链路灰度:提供了流量隔离的泳道能力,覆盖了网关、RPC Rocket MQ 等组件,提供了统一的打标切流能力、秒级的可观测能力、端到端的稳定基线环境,可以快速安全地验证新版本。


日常环境隔离:它是基于全灰度的扩展,可以进行端云联调,在本地快速拉起服务进行 future 测试。


三、全链路灰度


软件是以持续迭代的方法不断演进的,软件迭代速度过慢会影响其完善速度。所以,如何快速安全地验证新版本软件的稳定性,也是业内一直关心且在持续探索的。


先了解几个关键词:


泳道:相同版本应用定义的一套隔离环境,只有满足了流控路由规则的请求。流量才会路由到对应泳道里的打标应用。每条泳道与一个标签相对应,泳道组里标签相同的多个应用节点必定属于同一个泳道,一个应用可以属于多个泳道,一个泳道可以包含多个应用,应用和泳道是多对多的关系。


   基线环境:未打标的应用属于基线稳定版本的应用,即稳定的线上环境。


   流量回退:泳道中所部署的服务数量并非要求与基线环境完全一致,当泳道中不存在调用链中所依赖的其他服务时,流量需要回退至基线环境,进一步在必要的时候路由回对应标签的泳道。


泳道组:泳道的集合。泳道组的作用主要是为了区分不同团队或不同场景。

image.png

如上图,交易中心和商品中心各有两个新版本(12)在运行,需要对其进行灰度验证。分别创建了A泳道和B泳道,通过微服务网关将满足特定流控规则的请求流量路由到新版本,其余流量全部路由到线上(正式)版本,即基线环境。


假设某个应用只有线上基线环境,没有标签1、标签 2 的环境,则流量会打到基线环境中;若后续增加了标签1 标签2的环境,泳道的流量会回退到对应标签的应用里。

image.png

全链路灰度常见的应用场景有如下几种:


日常/开发/项目/测试环境隔离:如果没有全链路灰度机制,开发环境需要进行物理隔离,需要部署整套微服务架构,无论是维护还是后续的运维、机器的成本都非常高。


全链路灰度发布:可以保障灰度流量在 N 个应用的灰度版本之间路由。


高可用同机房优先路由。


全链路压测。


全链路灰度可以让线上环境配合流量控制全链路灰度的能力,实现零机器成本、零维护成本地完成全链路压测。


MSE 微服务治理全链路灰度具有以下几个特性:

image.png

全链路隔离流量泳道:通过设置流量规则所需的流量进行染色,染色后的流量路由到灰度机器,灰度流量携带灰度标往下透传,形成专属环境的流量泳道。无灰度环境应用会默认选择未打标的基线环境。


端到端的稳定基线环境及线上的稳定环境。


流量一键动态切流:可以根据需求配置流量规则,配置完规则后可以一键停启,也可以同时进行增删改查。操作实时生效,使得灰度流量可以引流,更加便捷。


可观测能力:具备泳道级别的可观测能力,同时具备全链路应用的可观测能力,可以从全局视角观察到流量是否存在逃逸,对于流量是否灰到一目了然。


通过 Java Agent 技术实现,无需修改业务代码。通过字节码增强的方式可以无缝支持市面上近五年来所有 Spring CloudDubbo 版本,也无须改变业务的现有架构,可以做到随上随下、无绑定。只需开启MSE 服务治理专业版,在线配置,实时生效。


具备无损上下线能力,发布更丝滑,无论是在大流量场景下的发布、回滚,还是扩容缩容等场景,都可以保证业务流量无损。

image.png

上图为客户来电科技的业务架构。


最上层是移动端,最右侧是移动端的用户界面,通过 Nginx 网关作为接入层,使用Spring Cloud Dubbo 作为服务框架。


它的全链路灰度落地架构如下:在Nginx 层进行流量分流的配置,使其中 10% 流量进入灰度环境,其余 90% 流量进入未打标及线上的正式环境。经过灰度环境的流量会自动被MSE 染色,染上对应环境的标签颜色,从而进行全链路灰度路由,形成灰度环境的流量泳道,以此保证流量在灰度环境中闭环。如果没有灰度环境的机器,则流量会走到线上环境;而若数据中心又有了灰度环境的机器,灰度流量依然会重新回到数据中心的灰度环境中,即流量回退。


四、总结与展望


全链路灰度方面:

image.png

全链路灰度将不断覆盖生产环境所涉及到的各个场景,从前端网关到微服务,包括RPCMQRedis、分布式调度、数据库Database


同时MSE 服务会针对各个场景来打造完整的全链路相关解决方案,比如基于Ingress-nginx 网关、基于Apache PISIX网关、基于MSE 云原生、基于 Java 网关等。通过Jenkins 构建 CI/CD 实现金丝雀发布,还有端云互联相关的微服务敏捷开发最佳实践等。


此外,我们希望能够提供完整的产品化界面,将各个场景和各种解决方案以产品化的方式呈现给用户,同时不断打磨秒级的可观测能力、应用间的流量大盘使得灰度情况一目了然。


服务治理开源方面:

image.png

服务治理是微服务改造深入到一定阶段后的必经之路。此过程也不断会出现新的问题,比如除了全链路灰度,服务治理还有哪些能力?服务治理能力有没有标准的定义?多语言场景下有无全链路灰度最佳实践或标准?微服务如何统一治理?


服务治理主要以落地和解决问题为主,目前没有形成很好的标准和规范化,对研发有一定的理解成本。对接其他微服务时,如果服务治理体系不同,会对我们造成很多困扰,同时,打通两套或多套治理体系的成本也非常高昂。


为此我们提出了 OpenSergo,主要用于解决不同框架、不同语言在微服务治理上由于概念的碎片化无法互通的问题,它致力于帮助不同的微服务框架、语言以及通信协议之间达成共识,形成云原生服务治理的规范,使框架的使用者不会因为语言的不同和框架的不同而产生割裂,让企业的架构师能够用一种统一的规范来描述内部的微服务架构。

image.png

MSE服务治理方面:


首先,持续打磨核心能力,提升性能以及用户体验,增加产品厚度,拓宽使用场景,不断打磨完善最佳实践。


其次,打造一套完整的微服务体系,以开源为基础支持开源到云上的平滑迁移。


最后,将 MSE 打造成一个阿里巴巴实践输出的阵地,将阿里开源技术不断输出,同时将阿里内部的最佳实践以及客户的实践案例以完整的方案对外输出,打造云上永不停机的业务。

 

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
4月前
|
监控 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第30天】在数字化转型的浪潮中,企业级应用正迅速向云原生架构迁移。本文将深入探讨云原生环境下微服务治理的最佳实践,包括服务发现、配置管理、流量控制等关键策略,并结合实例分析如何在保障系统弹性、可维护性的同时,优化资源利用效率和加快业务创新速度。
52 2
|
4月前
|
运维 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第20天】在数字化转型的浪潮中,企业纷纷拥抱云原生,以期实现更高效的资源利用、更快的业务迭代和更强的系统稳定性。本文将深入探讨如何通过云原生架构优化微服务的治理,确保系统的高可用性和可维护性,同时提升开发效率和运维灵活性。我们将从微服务治理的核心原则出发,结合具体案例,分析在云环境中实施微服务治理的策略与挑战。
53 2
|
4月前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为现代软件工程的基石。本文将深入探讨云原生架构下微服务治理的实践路径,从微服务的拆分、容器化部署、服务网格的应用到最终的监控与故障排除,提供一套全面的方法论。文章旨在为读者呈现一个清晰的云原生环境下,如何高效管理和维护微服务系统的全景图。
63 2
|
4月前
|
负载均衡 Cloud Native 云计算
云原生架构下的微服务治理与挑战
随着云计算技术的不断演进,云原生架构已成为现代应用开发的首选模式。本文将深入探讨在云原生环境下,微服务治理的重要性、实现方法及所面临的挑战。通过分析微服务治理的关键要素如服务发现、配置管理、负载均衡和故障转移等,揭示如何在高度动态的云环境中保持服务的高可用性和灵活性。同时,本文也将指出在实施微服务治理过程中可能遇到的技术难题和应对策略,为构建健壮的云原生应用提供指导。
|
4月前
|
监控 负载均衡 Java
Spring Boot与微服务治理框架的集成
Spring Boot与微服务治理框架的集成
|
5月前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
132 2
|
4月前
|
负载均衡 Java Nacos
Spring Boot与微服务治理框架的集成策略
Spring Boot与微服务治理框架的集成策略
|
5月前
|
Kubernetes 监控 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第23天】在云计算的浪潮中,云原生架构以其弹性、可扩展性和高效性成为企业数字化转型的重要推手。本文将深入探讨如何利用云原生技术实现微服务的治理与优化,确保系统的稳定性和高可用性。我们将从微服务的基本概念出发,通过具体案例分析,揭示云原生环境下微服务治理的关键策略,并分享实践经验,旨在为读者提供一套完整的微服务治理解决方案。
|
5月前
|
运维 负载均衡 Cloud Native
云原生架构下的微服务治理实践
【6月更文挑战第24天】在云原生的浪潮下,微服务治理成为确保系统弹性、可维护性和可观测性的关键。本文通过深入分析微服务治理的核心要素与挑战,结合前沿技术和工具,提出一套实用的微服务治理策略,旨在帮助开发者和架构师构建更加稳定、高效且易于管理的分布式系统。
|
4月前
|
存储 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第15天】本文将深入探讨在云原生架构下,如何高效地进行微服务的治理。我们将从微服务治理的基本原则出发,详细分析服务发现、配置管理、容错设计等关键实践,并结合具体案例,展示如何在云平台上构建和管理健壮、可扩展的微服务系统。文章旨在为开发者和架构师提供一套实用的方法论,以应对快速变化的市场需求和技术挑战。
45 0
下一篇
无影云桌面