网易首页 > 网易号 > 正文 申请入驻

微服务洞察,让微服务更透明

0
分享至

来 源 | 阿里云云原生团队

微服务作为云原生时代下一种开发软件的架构和组织方法,通过将明确定义的功能分成更小的服务,并让每个服务独立迭代,增加了应用程序的灵活性,允许开发者根据需要更轻松地更改部分应用程序。同时每个微服务可以由单独的团队进行管理,使用适当的语言编写,并根据需要进行独立扩缩容。但微服务同样也并非“银弹”,在带来如此多的优势的同时,逐渐膨胀的微服务数量也为系统带来了空前的复杂度,服务之间错综复杂的调用、协作关系如同一层迷雾笼罩在系统之上,借助 Trace、Log、Metric 三驾马车我们的系统具备了一定的可观测性,但所能得到信息是标准化且固定的,往往不能够满足复杂场景下的观测需求,比如微服务引擎 MSE(Microservices Engine)中的微服务治理功能模块为用户用好微服务提供了诸多帮助,但其中的很多功能,比如全链路灰度、无损上下线等会涉及多个应用,且所涉及的信息又不被标准的可观测系统覆盖。而微服务洞察通过动态的信息采集能够填补这其中的一部分空缺,更好地满足这些微服务场景的观测需求,同时也将他们纳入到标准的观测体系中来。

微服务洞察

设想这样一个问题现场,线上系统出现了一个奇怪的问题,某一个接口偶现错误,频率不高,出现时间毫无规律,但是没有发现任何有效的错误日志。这时,在通常的实践中,除非具备脑内 debug 的神力,不然我们往往需要在代码中增加日志逻辑,然后重启应用,静静等待问题复现后查询日志,如果定位了问题范围需要更多的信息,就需要我们不断循环 编写日志逻辑->重启应用->静静等待 的步骤直到解决 bug。但这还不是最令人头疼的,如果给这个问题加上问题触发伴随应用重启、pod 内日志丢失、重启后问题无法复现等 debuff,排查的难度将会进一步上升。

而由于微服务洞察具备任意位置类粒度的动态信息采集的核心能力,能够帮助我们解决上述场景中的一些痛点。首先在第一次发现这个问题后,我们可以直接在线上环境中通过配置一条微服务洞察的规则,来收集一些初步信息来帮助我们判断可能的问题原因。由于收集的信息会以调用链的形式组织,我们可以从中获取问题出现的频率、时间、参数分布、上下游调用信息等。同时由于信息会直接上报并集中存储到远端系统,因此不受应用重启的影响,我们也不需要一台一台实例去查询日志。

在对问题有了初步的判断之后,我们往往能够将问题定位到一个范围之内,这时我们可以进一步锁定某些方法,通过配置规则,打印它们的入参、返回值、调用堆栈等信息来判断其执行是否符合预期。

通过上述的举例可以发现,借助微服务洞察的能力,我们能够轻松地探知标准的可观测系统难以触达的角落,从而满足我们对一些微服务场景的观测需求。

洞察微服务场景

无损下线

无损下线是微服务治理中的一个功能,主要是为了解决在发布过程中的微服务在下线的过程中可能存在的流量损失。其大致流程如下图所示。

通过一系列的策略和措施,能够做到服务的完全无损下线。但这样就导致无损下线的流程比较复杂,同时还涉及到多个节点之间的通知机制,特别是在大规模之下,下线流程的完整性以及可靠性的确认变得非常复杂与繁琐。这就是前文所提到的难以触达的角落,我们可以通过微服务洞察的能力帮助我们观测这个场景。

针对无损下线的场景,微服务洞察提供了场景化的规则,简单配置一键开启。

在开启了规则之后,微服务洞察会收集无损下线流程中值得关心的信息,组织成调用链的形式展示。如下图场景,我们对 108 节点进行缩容操作,我们就可以得到一条 Tracing 链路,其中包含主动通知、服务注销、应用停止等几个步骤,并且我们可以在每个步骤中看到所需的信息。

在主动通知环节我们可以看到当前 Provider 节点对哪些 Consumer 进行 GoAway 请求的调用,如下图所示我们将主动通知 10.0.0.90、10.0.0.176 两个 Consumer 节点。

当 Consumer 收到 GoAway 调用后,会进行负载均衡列表的刷新以及路由的隔离,我们将在负载均衡地址列表中显示最新抓到的当前 Consumer 对于当前服务缓存的最新地址列表,我们可以在下图中看到,地址列表中只剩下 10.0.0.204 这个服务提供者节点的调用地址。

我们也可以看到 Spring Cloud 向 Nacos(注册中心)执行服务下线的调用结果,注销成功。

微服务洞察通过将无损下线的 workflow 抽象成 Tracing 结构的策略,可以帮助我们降低大规模场景、复杂链路下无损下线问题的排查成本。

全链路灰度

全链路灰度是微服务治理中的另一个功能。有时某个功能发版依赖多个服务同时升级上线,我们希望可以对这些服务的新版本同时进行小流量灰度验证,这就是微服务架构中特有的全链路灰度场景,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证。在发布过程中,我们只需部署服务的灰度版本,流量在调用链路上流转时,由流经的网关、各个中间件以及各个微服务来识别灰度流量,并动态转发至对应服务的灰度版本。如下图:

而在使用该能力的时候,要想探清流量的匹配情况以及流量的走向具有较大的难度。而借助微服务洞察的能力可以帮助我们便捷地感知这些信息。

这部分的示例将基于 A、B、C 三个应用,其中 A、B 应用分别部署一个基线版本和一个灰度版本,其内部存在 /a -> /b -> /c 的调用链路。

我们只需要配置如下的规则可以看到流量的路径,以及实例和流量的标签信息。

从所展示的信息中可以看到,灰度流量正确地流经了灰度实例而不是非灰度实例(其中 mse.app.tag 是应用的标签,mse.tag 是流量的标签)

全链路灰度支持按照 headers 中的信息来匹配灰度流量,因此我们也在上一条规则的基础上,增加如下的规则来观测灰度流量的 headers 信息,来帮助我们判断流量匹配是否符合预期。

开启规则后,对于 /a -> /b -> /c 链路中的带有 gray 全链路灰度标签的流量,会在采集上一条规则所定义的信息的基础上,同时采集 Headers 信息,在链路展示页面详情展示如下:

借助微服务洞察的能力,我们只需要简单的规则配置,就可以完成对复杂的全链路灰度场景的观测,让我们在使用全链路灰度时不再提心吊胆。

引用的框架/组件内部

微服务架构下的开发往往会使用很多框架或是中间件,这些框架和中间件的内部无法添加日志逻辑,因此在使用时对开发者来说时黑盒的,极大地增加了观测的难度。而借助微服务洞察,任意位置都只需要通过配置规则的方式就可以获取到现场信息。接下来以负载均衡和 Nacos 为例。

Nacos

Nacos 借用官网的描述,致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。处于微服务架构中的关键位置,但是目前在可观测方面 Nacos 服务端能够获取一些信息,但是客户端则成了黑暗的角落,开发者也不能随意地添加日志信息,想要关注其中的信息难上加难。而在微服务洞察的帮助下,通过简单的规则配置,就可以获取到客户端内部的信息,来补全这部分的观测需求。

我们以服务变更回调的方法以及收取订阅服务内容的方法为例,前者会在所订阅的服务发生变更时被触发,后者会在收到订阅的服务内容时被触发,通过关注这两个方法的入参,我们便可以获取到此时服务的详细信息。

负载均衡

以 Spring Cloud 常用的客户端负载均衡组件 Ribbon 作为示例,Ribbon 位于客户端一侧,通过服务注册中心(本文中为 Nacos)获取到一份服务端提供的可用服务列表。随后,在客户端发送请求时通过负载均衡算法选择一个服务端实例再进行访问,以达到负载均衡的目的。通过分析代码可以发现,Ribbon 内部的 updateZoneServerMapping 方法的参数 Map> map 基本等同于每次更新动作最后所更新的可用服务列表。我们只需要配置一条规则来获取这个方法的入参就可以获取到当时真实的可用服务列表信息。

小节

本文以一个假象的场景出发,介绍了微服务引擎 MSE(Microservices Engine)微服务治理功能模块中微服务洞察功能的应用场景和简单的使用介绍。借助微服务洞察,我们可以便捷地观测到一些不被标准可观测系统覆盖的角落。在提供任意位置类粒度的动态信息采集这一核心能力的同时,我们也会结合微服务开发者们的微服务开发运维经验,不断去探索更多有价值的微服务场景,在核心能力的基础上以更加贴近场景的方式收集并采集信息,旨在帮助我们更好地治理我们的微服务应用,助力于云上帮助企业构建完整的微服务体系。欢迎大家尝鲜与体验~

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
东莞:卢炽华主动投案

东莞:卢炽华主动投案

南方都市报
2026-06-02 09:41:55
突发!黄仁勋拿下宇树科技

突发!黄仁勋拿下宇树科技

李东阳朋友圈
2026-06-02 13:43:42
六神新包装撞脸人民币!网友不淡定了

六神新包装撞脸人民币!网友不淡定了

李东阳朋友圈
2026-06-02 18:16:17
中日在香会激烈交锋!小泉信口开河讽刺中国,被韩方问得哑口无言

中日在香会激烈交锋!小泉信口开河讽刺中国,被韩方问得哑口无言

井普独白
2026-06-02 13:38:25
血压飙升!上海父亲晒聊天记录,“巨婴”儿子强行索要2万旅游费

血压飙升!上海父亲晒聊天记录,“巨婴”儿子强行索要2万旅游费

火山詩话
2026-06-02 14:27:07
1夜4大转会!伊涅斯塔获官宣,法蒂告别巴萨,枪手酝酿多笔补强!

1夜4大转会!伊涅斯塔获官宣,法蒂告别巴萨,枪手酝酿多笔补强!

田先生篮球
2026-06-02 09:10:56
割四赔五后续:麦客撤了,麦烂了,农户跪了,这锅谁背?

割四赔五后续:麦客撤了,麦烂了,农户跪了,这锅谁背?

番外行
2026-06-02 14:19:47
形势到底有多严峻?国人心心念念的特斯拉竟会裁员,评论区炸锅…

形势到底有多严峻?国人心心念念的特斯拉竟会裁员,评论区炸锅…

慧翔百科
2026-06-02 08:27:57
广厦三核79分拒横扫:胡金秋30分大爆发 双小外49+14+15制胜

广厦三核79分拒横扫:胡金秋30分大爆发 双小外49+14+15制胜

醉卧浮生
2026-06-02 21:32:14
福建一县委书记任上被查,昨天还参加走访慰问

福建一县委书记任上被查,昨天还参加走访慰问

人民资讯
2026-06-02 21:13:30
娶妻娶贤又娶色,真的绝妻!

娶妻娶贤又娶色,真的绝妻!

贵圈真乱
2026-06-02 12:02:35
阿迪达斯“在城里办事”文案已删除,回应“进城办事”T恤被网友催上架:目前还没有售卖,后续可关注门店

阿迪达斯“在城里办事”文案已删除,回应“进城办事”T恤被网友催上架:目前还没有售卖,后续可关注门店

19楼
2026-06-02 15:37:57
挪威深海发现载有中国瓷器的18世纪沉船:大量青花瓷碗重见天日,文物达数千件,目前正开展船只溯源工作并努力还原历史真相

挪威深海发现载有中国瓷器的18世纪沉船:大量青花瓷碗重见天日,文物达数千件,目前正开展船只溯源工作并努力还原历史真相

大风新闻
2026-06-02 12:15:18
这4个行业,已经发不出工资了!真的很严重了

这4个行业,已经发不出工资了!真的很严重了

细说职场
2026-06-02 21:15:53
央视再曝新毒物!长期用会致癌,已流窜至全国,不少婴儿孕妇中招

央视再曝新毒物!长期用会致癌,已流窜至全国,不少婴儿孕妇中招

做一个合格的吃瓜群众
2026-06-02 14:36:43
诺贝尔经济学奖得主克鲁格曼:对中国经济的评估

诺贝尔经济学奖得主克鲁格曼:对中国经济的评估

生命可以承受之轻
2026-06-02 15:57:17
夏补钾,不疲惫,建议大家:夏天多吃这3种“补钾高手”,精神好

夏补钾,不疲惫,建议大家:夏天多吃这3种“补钾高手”,精神好

阿龙美食记
2026-05-31 20:23:07
肇庆男童深山走失13天奇迹生还!靠野果生存,获救紧搂救援者

肇庆男童深山走失13天奇迹生还!靠野果生存,获救紧搂救援者

奇思妙想草叶君
2026-06-02 19:15:06
25万亿!国家启动史无前例超级大基建,信号强烈

25万亿!国家启动史无前例超级大基建,信号强烈

前瞻网
2026-06-02 10:49:44
男子自驾青海失联9个月,家属再赴事发地寻找 救援人员计划向牧民发寻人信息寻找目击者

男子自驾青海失联9个月,家属再赴事发地寻找 救援人员计划向牧民发寻人信息寻找目击者

红星新闻
2026-06-02 17:40:41
2026-06-02 23:56:49
阿里云云栖号
阿里云云栖号
阿里云官方内容社区!
3478文章数 867关注度
往期回顾 全部

科技要闻

烧掉千亿后,美团、阿里、京东谁先止血?

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

体育要闻

1米74的业余联赛替补,在英超踢中卫

娱乐要闻

奚梦瑶何猷君补办婚礼超幸福

财经要闻

智元和宇树的“暗战”愈演愈烈

汽车要闻

星途神秘新车轮廓曝光 又一款性能SUV要来了?

态度原创

教育
亲子
家居
手机
公开课

教育要闻

“你知道几号高考吗?”18岁纹身女孩的生日美照,诠释了物以类聚

亲子要闻

进口针一支1.7万,年生长11厘米,国人怒了

家居要闻

流线型轮廓 包容多元身形

手机要闻

华为nova16系列线下体验:不吐不快,说说真实感受!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版