微服务系列--聊聊微服务治理中的一些感悟

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务系列--聊聊微服务治理中的一些感悟

今年的大多数技术工作基本都是在围绕着技术功能开发进行,关于微服务治理相关部分从事了较多的研究,今晚想做个自己过去一段时间中遇到过的微服务治理问题做一些总结。


微服务的调用链路思考



自己所在的公司采用的微服务远程调用技术主要是基于Dubbo这款RPC开源框架,所以大部分的项目结构都基本是consumer,provider,interface这样的三个模块。


然后早期在做微服务治理的时候,需要观测不同的微服务之间的调用了链路分析,于是就需要深入到各个微服务内部去研究。


微服务的调用链路通常都会呈现如下图所示:


网络异常,图片无法展示
|


一个A服务调用了B服务,B服务调用再进行远程调用了D,C,E服务,这就造成了一个特点,一个小而简单的数据包请求,换取了大量的响应数据信息。通常我们称请求调用的数据流量为“入度”,响应回来的数据信息流量为“出度”。而微服务调用链路里通常都是出度大于入度许多的一个特点。


但是在进行微服务设计的时候,这样的设计思路又是否合适呢?举个场景来介绍:

用户个人页面大致设计如下所示(画得有些潦草了…)


网络异常,图片无法展示
|


此时前端需要通过一个get-user-info接口来返回这个页面的数据,那么如果在设计微服务接口时没有过多考虑的话,就有可能会出现以下设计:


网络异常,图片无法展示
|


大致如图所示,这样的设计会带来的问题有:


Dubbo的getUserInfo函数所返回的UserInfoDTO内部包含了太多业务性的字段,例如用户的等级查询,用户资料查询是属于用户服务provider领域的,周边的人查询则是属于定位服务provider领域的,猜你喜欢数据查询是属于推荐provider领域的。现有的这种链路设计则是同时在用户服务模块中嵌入了额外几个不相干的服务模块关系,这样会把各个微服务之间的关系整得比较复杂。


同时也会带来一些问题:


接口设计的单一原则性没有满足


各个不同的微服务内部的接口比较合理的设计应该是每个接口都各自有各自的职责,尽量互不侵入,职责单一。


无形中增大了出度的数据流量


在返回的UserInfoDTO中,包含了除了用户服务需要关心的字段之外,还会夹杂有特别多的其他业务领域字段代码,导致单个微服务的带宽占用提升。假设用户基础信息只有10个字段,但是额外的推荐数据,周边的人数据占用了200个字段,那么此时额外字段占用的流量则会是核心业务字段的20倍,这些细节点在高并发场景中会对用户查询provider的链接带宽造成不小的压力,如果将这些额外的流量分散到不同的微服务调用连接上则能减少不少的压力。


调用链路耗时增加


在查询周边的人基础信息的时候,web层需要多经过一轮用户provider层,反而会加大整个链路的执行耗时。


综合了以上几点整理,我们不妨可以尝试将接口的设计改良为如下所示:


网络异常,图片无法展示
|


尽量在web层中做远程调用数据结果集的拼凑组合,这样的好处有:


接口耗时降低,方便接口调用的优化,例如以后这个http接口耗时较久,可以通过异步调用的思路进行优化。


尽量满足微服务接口的单一职责设计。


方便后续的服务扩展。当http的调用流量增大时候,各个微服务的流量承载不会相互牵扯,倘若按照第一种设计,当http层流量增大之后,该调用链路在provider层的流量瓶颈会存在于user-provider的网络带宽中,而现如今拆散之后则将出度流量分散到了各个子服务中,更加方便后续进行优化改良,


微服务相互依赖方面的一些思考


从我早期实习的一家互联网金融企业,再到现在的这家社交产品企业,都是在使用Dubbo作为Rpc通讯技术框架。整体在使用方式上大同小异,都是需要引入第三方应用的interface层依赖包,然后才能获取对应Service对象内部的各类接口信息。


例如一个简单的电商系统,内部按照业务领域划分为多个微服,然后各个微服务内部都会将自己要暴露出现的内容写在interface层模块。


网络异常,图片无法展示
|


但是如果不对interface层设计做一定的规定就容易出现,mall-user服务的interface层中引入了mall-pay服务的interface层依赖,随着后续不断地迭代会造成微服务相互冗余地越来越严重。


所以尽量要保证interface层的依赖单一,不要引入过多的额外信息。上半年的时候经厉了一次微服务耦合依赖大清理工作,就是将各种相互耦合dependency全部清空了。


除了interface层会有相互依赖之外,在provider层也尽量减少对于第三者微服务的依赖,如果http请求接口中需要用到不同微服务数据的字段信息进行渲染的话,尽量在consumer层进行调用组合,具体的好处在文章上方也有提及过。


监控系统的接入



一家合格的互联网企业,通常都要有一套完善的异常监控系统。就这些年的工作经验来说,个人感觉监控的指标也有一定的讲究。


监控的数据要有价值


市面上有很多各式各样的监控系统,但是为什么只有那么几家店监控系统能够存活下来。我认为监控的数据价值是个关键点。监控的指标如果过多,例如能够监控线上机器100个参数,细化到线程池的名称,cpu的各项指标,那么这个时候如果没有一套好的交互界面,整体的价值就会被人贬低。因为这些数据的价值不容易被使用者们发现。


使用监控的场景主要有哪些


流量监控

线上某些服务的调用流量流量的波动图,峰值统计。


线上异常的告警

告警并不是一旦有异常就通知,需要设置一定的阈值机制,保证告警的有效性。


调用链路的分析

整条调用链路的分析是在异常出现的场景下使用比较多的一个情况,能够通过监控系统去跟踪到整个异常链路的细节点,例如请求的参数,异常出现在哪个服务节点中,链路的各个节点中记录的日志信息。


还有很多东西想写,奈何时间已经比较晚了,剩余的内容后续再做整理吧。

目录
相关文章
|
4月前
|
监控 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第30天】在数字化转型的浪潮中,企业级应用正迅速向云原生架构迁移。本文将深入探讨云原生环境下微服务治理的最佳实践,包括服务发现、配置管理、流量控制等关键策略,并结合实例分析如何在保障系统弹性、可维护性的同时,优化资源利用效率和加快业务创新速度。
51 2
|
4月前
|
运维 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第20天】在数字化转型的浪潮中,企业纷纷拥抱云原生,以期实现更高效的资源利用、更快的业务迭代和更强的系统稳定性。本文将深入探讨如何通过云原生架构优化微服务的治理,确保系统的高可用性和可维护性,同时提升开发效率和运维灵活性。我们将从微服务治理的核心原则出发,结合具体案例,分析在云环境中实施微服务治理的策略与挑战。
53 2
|
4月前
|
监控 Cloud Native 安全
云原生架构下的微服务治理实践
在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为现代软件工程的基石。本文将深入探讨云原生架构下微服务治理的实践路径,从微服务的拆分、容器化部署、服务网格的应用到最终的监控与故障排除,提供一套全面的方法论。文章旨在为读者呈现一个清晰的云原生环境下,如何高效管理和维护微服务系统的全景图。
60 2
|
4月前
|
负载均衡 Cloud Native 云计算
云原生架构下的微服务治理与挑战
随着云计算技术的不断演进,云原生架构已成为现代应用开发的首选模式。本文将深入探讨在云原生环境下,微服务治理的重要性、实现方法及所面临的挑战。通过分析微服务治理的关键要素如服务发现、配置管理、负载均衡和故障转移等,揭示如何在高度动态的云环境中保持服务的高可用性和灵活性。同时,本文也将指出在实施微服务治理过程中可能遇到的技术难题和应对策略,为构建健壮的云原生应用提供指导。
|
4月前
|
存储 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第15天】本文将深入探讨在云原生架构下,如何高效地进行微服务的治理。我们将从微服务治理的基本原则出发,详细分析服务发现、配置管理、容错设计等关键实践,并结合具体案例,展示如何在云平台上构建和管理健壮、可扩展的微服务系统。文章旨在为开发者和架构师提供一套实用的方法论,以应对快速变化的市场需求和技术挑战。
44 0
|
4月前
|
监控 Kubernetes Cloud Native
云原生架构下的微服务治理之道
【7月更文挑战第12天】在数字化浪潮中,云原生技术以其灵活性、可扩展性成为企业转型的利器。本文深入探讨了云原生架构下微服务治理的核心要素,包括服务发现、配置管理、容错设计等,旨在为读者揭示在复杂云环境中实现高效治理的技术路径。我们将通过实际案例,展现如何在保障系统稳定性的同时,提升业务的敏捷性和创新速度。
|
4月前
|
负载均衡 监控 Java
Spring Boot与微服务治理框架的集成方法
Spring Boot与微服务治理框架的集成方法
|
4月前
|
存储 Java 数据中心
Spring Boot与微服务治理框架的集成成功案例
Spring Boot与微服务治理框架的集成成功案例
|
4月前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理之道
随着云计算技术的不断演进,云原生架构已成为现代软件开发的重要趋势。本文旨在探讨在云原生环境中微服务治理的关键策略和最佳实践。通过分析微服务架构的复杂性及其对治理机制的需求,文章将深入讨论如何利用云原生工具和技术实现高效的服务发现、配置管理、流量控制以及安全策略。我们将展示数据支持的分析结果,以证明采用这些治理措施能够显著提高系统的稳定性、可扩展性和安全性。此外,文章还将引用相关领域的科学研究和权威统计数据,以确保内容的科学性和严谨性。
|
4月前
|
负载均衡 Java Maven
Java中的微服务治理与服务注册
Java中的微服务治理与服务注册