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

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

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


微服务的调用链路思考


自己所在的公司采用的微服务远程调用技术主要是基于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层中做远程调用数据结果集的拼凑组合,这样的好处有:


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


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

方便后续的服务扩展。当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的各项指标,那么这个时候如果没有一套好的交互界面,整体的价值就会被人贬低。因为这些数据的价值不容易被使用者们发现。


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


流量监控


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


线上异常的告警


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


调用链路的分析


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


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

目录
相关文章
|
XML JSON Dubbo
《微服务零基础入门教程》一步一步,带你走进微服务的世界(上)
最近几个月,我会从“0”到“1”持续更新 微服务 技术栈以及其相关的技术,希望小伙伴们跟着我的脚步,让我们一步一步的拿下微服务 学微服务之前,先让大家看一下首先要学习哪些技术
1427 1
《微服务零基础入门教程》一步一步,带你走进微服务的世界(上)
|
5月前
|
消息中间件 前端开发 API
架构的未来:微前端与微服务的融合
架构的未来:微前端与微服务的融合
|
3月前
|
运维 Prometheus 监控
微服务架构下的服务治理实践
【7月更文挑战第27天】在微服务架构的浪潮中,服务治理作为确保系统稳定性和高可用性的关键手段,其重要性日益凸显。本文将探讨微服务架构下服务治理的核心要素,包括服务发现、配置管理、流量控制等,并结合实例分析如何有效实施服务治理策略,以提升系统的弹性、监控能力和安全性。通过本文,读者将获得一套实用的服务治理框架,以及面对复杂服务交互时保持清晰治理视野的方法。
|
5月前
|
运维 负载均衡 监控
探索微服务架构下的服务治理实践
【2月更文挑战第24天】 在当前软件开发领域,微服务架构已成为构建复杂系统的主流选择。它通过将大型单一应用程序分解为一组小的、松耦合的服务来提供灵活性和可维护性。然而,随之而来的是服务治理的挑战,包括服务发现、配置管理、负载均衡、熔断机制等。本文将深入探讨在微服务架构中实现有效服务治理的策略与技术实践,分享个人在这一过程中的感悟和经验教训。
|
5月前
|
Kubernetes Java 微服务
【从零开始学微服务】06.微服务架构的建设思路
大家好,欢迎来到万猫学社,跟我一起学,你也能成为微服务专家。
66 1
|
5月前
|
Dubbo Java 微服务
微服务框架(三十二)微服务系统架构
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为微服务系统架构
|
10月前
|
运维 资源调度 Kubernetes
服务治理之 关于服务治理的个人看法
在软件`开发`、`维护`过程中。软件的生命力总是从最初的`理想`状态,逐步趋向于`复杂`、`混乱`和`无序状态`发展,软件将会进入`寂静`状态(谁也不敢动),再到软件`不可维护`而被迫`下线`或`重构`。 这种损坏软件质量的因素的逐步增长,叫做软件的`熵增现象`。
|
运维 负载均衡 安全
微服务和 Serverless 架构-微服务架构和微服务框架
微服务和 Serverless 架构-微服务架构和微服务框架
微服务和 Serverless 架构-微服务架构和微服务框架
|
消息中间件 负载均衡 Java
微服务架构一文详解,微服务其实真的不难
最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。
|
自然语言处理 监控 Java
对于服务治理概念的一些总结和理解,我们应该如何实践服务治理
对于服务治理概念的一些总结和理解,我们应该如何实践服务治理
233 0