5张图,带你了解微服务架构治理

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 5张图,带你了解微服务架构治理

导读

随着公司业务规模的扩大,越来越多的公司选择了从单体架构转向微服务架构,将单体应用拆分成多个微服务更适合“较大”规模的业务。拆分成微服务后,各服务所负责的业务独立性更强,管理更方便,代码冲突更少,版本迭代更快,更能推动业务快速向前发展。

但是微服务化也带来了新的问题,在单体应用中所有的一切都发生在同一个进程内,业务间交互仅仅是方法间的调用,而拆分成微服务后,各业务间的交互就要通过rpc调用来进行,系统变得更为复杂,这就需要就引入服务治理的概念来对各服务及服务间的交互进行管理,例如:服务注册与发现、监控、鉴权&限流等。

本文从转转公司的服务治理实践出发,带领读者揭开服务治理的神秘面纱。

1 整体架构

image.png转转服务管理平台是集服务注册与发现配置中心监控中心报警鉴权&限流于一体的综合性服务治理平台,rpc框架与服务管理平台通过sdk进行交互。

当服务方启动时会向管理平台进行节点注册,并且向服务管理平台订阅调用关系用于调用鉴权、限流等功能。而订阅该服务方的调用方将收到服务方节点上线、下线事件通知,并重新通过sdk拉取服务方的节点列表。

在进行调用时,调用方和服务方都通过sdk向服务管理平台上报调用耗时、超时、异常、耗时分布、top百分位等指标。

同时服务管理平台还具有配置中心的功能,调用方可以通过服务管理平台配置rpc调用相关的参数,例如超时时间、序列化协议等参数,修改后将实时生效。

2 服务注册与发现

2.1 AP模型还是CP模型

注册中心为了高可用,往往会有多个节点,在分布式系统CAP理论中,不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),往往我们会在AP和CP之间做出选择设计我们的系统。典型的注册中心如zookeeper、etcd是CP模型,而eureka是AP模型,nacos既可以工作在CP模式下也可以工作在AP模式下。

我们模拟一种场景来看看注册中心应该是CP还是AP系统。现有注册中心R1和R2,调用方C1和C2,C1和R1建立长连接,C2和R2建立长连接。

  1. 服务方S1注册到R1上,R1通知C1 S1的上线事件,再通知R2 S1的上线事件,而R2又将S1的上线事件通知到C2,此时C1和C2都获取到了S1的上线事件,C1和C2都可以调用到S1节点。
    image.png又有服务方S2注册到R2上,R2通知C2 S2的上线事件,再通知R1 S1的上线事件,此时发生了异常导致R2未能通知到R1 S2的上线事件,显然C1也未能得到S2的上线事件。C1只能调用S1节点,而C2可以调用S1和S2节点。image.png我们看到此时出现了不一致性,如果是CP系统,在解决不一致性问题之前是不能进行下一步操作的,也就是说不能有新的节点注册上来,此时注册功能已经不可用了。而仔细思考一下,这种情况下rpc调用还能正常进行吗,答案是肯定的。即使出现不一致性,我们也是可以容忍的,所以注册中心应该是一个AP系统。
  1. 出现了上述不一致问题怎么解决呢?我们在服务管理平台sdk中设置了定时任务,在未收到节点上线/下线通知时,仍然定时拉取最新的节点列表,以达到最终一致性。

结论:注册中心应该设计为AP系统,中间短暂的不一致是可以容忍的,只要在短时间内达到最终一致性即可,参考:阿里巴巴为什么不用 ZooKeeper 做服务发现[1]

2.2 节点分组

当服务方有多个调用方,且调用方重要性等级不一样时,我们需要提供服务方节点隔离能力,即对服务方节点进行分组,不同的分组提供给不同的调用方使用。

例如服务方A有节点A-S1、A-S2、A-S3、A-S4,有调用方B、C和D,B重要性远高于C和D,我们期望对B提供更稳定的服务,就可以将A-S1、A-S2、A-S3、A-S4进行分组,例如:A-S1、A-S2分到“服务B专用”组供服务B调用,而A-S3、A-S4在“默认组”供服务C和D调用,如下图所示:image.png

2.3 灰度发现

灰度发现功能是指让某些调用方发现服务方的某些指定节点,一般的用途为规划一条固定的调用链路做灰度验证。如下图所示,有服务A、B、C、D,某次需求修改了服务B、C、D,服务B、C、D从v1版本升级到了v2版本,而且B-v2依赖C-v2,C-v2依赖D-v2。在没有灰度发现功能时,需要将D全量升级至v2,再将C全量升级至v2,最后将B全量升级至v2,如新版本出现bug,回滚耗时长、损失大。

使用灰度发现功能可仅部署B-v2、C-v2、D-v2各一个节点,B-v2只能发现C-v2节点,C-v2只能发现D-v2节点。再配合权重功能将B-v2的权重调低,就可以小流量验证本次需求的正确性,即使出现问题,只需在管理平台操作将B-v2节点移出分组或权重调为零,无须回滚,可保留现场排查问题,损失微小。image.png

3 配置中心

在rpc调用过程中有一系列参数是用户可以配置的,如tcp连接超时时间、请求超时时间(服务级&函数级)、序列化协议、rpc协议版本等。

例如在版本迭代过程中某些方法的耗时增长,上线后需要调用方调整方法超时时间,如果将超时时间写在调用方代码中,将调用方重新上线是不太现实的,此时就需要参数热更新功能。转转管理平台支持rpc参数的下发,配合rpc框架支持rpc参数的热更新功能,可实现平台参数调整服务实时生效。

4 监控中心

监控是服务治理中至关重要的一环,面对服务数量小则几百、多则成千上万的场景,再加上各服务间的调用关系,共同组成一张庞大的微服务网络,完善的监控设施是我们洞察这张网的火眼金睛。监控一般包括调用量、异常量、耗时、耗时分布、耗时百分位等。

监控中的难点在于,如此庞大的数据量如何上报、存储与查询的问题。转转的解决方案是针对常用查询维度提前对数据进行多阶段聚合计算,以提升查询效率。

4.1 sdk聚合

在管理平台sdk中,对调用数据的总耗时、平均耗时、最大耗时、耗时百分位、耗时分布等进行提前计算,并以分钟为维度进行上报,大大减少监控数据上报量,节省带宽,减少资源占用。

4.2 后端存储前聚合

sdk上报的数据中仅包含当前节点的监控数据,如将这些数据直接存储,那么查询服务级监控数据时再进行实时聚合计算是不太现实的,庞大的数据量将直接导致数据库不可用。

对此我们以各个查询维度在数据存储之前再次进行聚合,例如sdk上报的原始数据为<C,CIP,S,SIP,Data>,我们期待以<C><S><C,S>等维度进行查询,那么就根据sdk上报的原始数据在存储前以这些维度进行聚合计算,直接存储计算后的结果。如此以来可实现毫秒级监控数据查询。

5 鉴权&限流

鉴权是指服务间的调用权限控制,限流是指服务间的调用量控制,转转管理平台具有服务级&方法级调用权限及调用量控制能力。

若想实现方法级的调用权限及调用量控制能力,需要有标识来定位唯一的rpc方法,我们提出methodKey概念来标识唯一的rpc方法,具体格式为:(${ServiceImpl})${ServiceInterface}.$method($parameterTypes)。例如某rpc接口UserService中有saveUser(User user)方法,其实现类为UserServiceImpl,则该方法的methodKey为(UserServiceImpl)UserService.saveUser(User),methodKey中所使用的类名均为简单类名,由rpc框架来校验每个服务中methodKey的唯一性。

在服务方启动时rpc框架将暴露出的rpc方法列表通过sdk上传至服务管理平台,在服务进行调用之前需要在服务管理平台申请对方法的调用权限及调用量配置。并通过sdk订阅其他调用方对本服务的调用关系,做到实时修改生效。

在rpc框架中通过Filter扩展并结合管理平台sdk即可实现对服务调用的权限校验及流量控制能力。

6 报警

报警也是服务治理中必不可少的一环,在服务治理中发挥着哨兵的作用。依托管理平台监控能力,在出现调用异常、超时、限流时及时向服务负责人发出警报。转转管理平台允许用户对告警进行手动配置,包括告警间隔时间、告警方法、告警的服务方和调用方等。

7 总结

本篇文章从转转服务治理的整体架构出发,又分篇介绍了服务治理中主要功能的实现,以便各位读者对服务治理有简单的认识。

当然,服务治理的能力并不仅限于文中所述,转转的管理平台也不是完美的,仍然有许多问题需要解决,例如通知机制的高可用问题、一致性问题,监控数据存储问题等。我们将继续前行在技术的道路上,生命不息,探索不止。


关于作者

王建新,转转架构部资深Java工程师,主要负责服务治理、RPC框架、分布式调用追踪、监控系统等,热衷于技术,有丰富的线上实战经验。

目录
相关文章
|
2月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
294 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
541 36
微服务架构解析:跨越传统架构的技术革命
|
8天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
30天前
|
人工智能 安全 Java
微服务引擎 MSE:打造通用的企业级微服务架构
微服务引擎MSE致力于打造通用的企业级微服务架构,涵盖四大核心内容:微服务技术趋势与挑战、MSE应对方案、拥抱开源及最佳实践。MSE通过流量入口、内部流量管理、服务治理等模块,提供高可用、跨语言支持和性能优化。此外,MSE坚持开放,推动云原生与AI融合,助力企业实现无缝迁移和高效运维。
|
2月前
|
监控 数据可视化 架构师
为什么企业需要开展架构治理?
随着数字化转型加速,企业面临的技术和业务环境日益复杂,传统架构难以应对快速变化的需求。企业架构治理成为数字化转型的关键,通过确保技术与战略对接、优化资源利用、降低风险和复杂性,提升企业灵活性、效率和创新能力,支持快速响应市场变化,推动数字化转型成功。
151 7
为什么企业需要开展架构治理?
|
2月前
|
监控 数据可视化
如何通过建模工具实现企业架构治理全流程管理
企业架构治理工具通过构建统一的架构语言、可视化建模、流程管理、资源整合和多场景分析,实现企业架构的全生命周期管理。该工具赋能企业数字化转型,确保业务、平台、数据及技术相互耦合闭环,提供从规划到决策的一站式服务,助力提升业务运营、优化组织管理和加速数字化建设。
55 2
如何通过建模工具实现企业架构治理全流程管理
|
1月前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
2月前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
2月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
108 8