Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

23|集群扩展:发送请求遇到服务不可用,怎么办?

你好,我是何辉。
通过特色篇的学习,你可以在日常开发中横着走了,如果你继续深入掌握了源码篇,基本可以把 Dubbo 框架游刃有余地玩弄于鼓掌之中。接下来,我们将进入拓展篇,借助一些产线的真实案例,真枪实弹地教你如何充分挖掘 Dubbo 框架的扩展能力,来解决实际问题。
今天我们来实操第一个扩展,集群扩展。
你有没有遇到过这样的情况,对于多机房部署的系统应用,线上运行一直比较稳定,可是突然在某一段时间内,部分流量请求先出现一些超时异常,紧接着又出现一些无提供者的异常,最后部分功能就不可用了。
我们结合具体的调用链路图来看。
这是一张消费方调用提供方的简单调用链路图,消费方第一次调用时发生了超时异常,然后第二次调用时却发生了无提供者异常,无提供者异常从字面意思上理解,就是没有服务提供者,结果和服务不可用是一样的。
对于这样一个看似非常简单的异常现象,我们该怎么解决呢?

异常如何解决

要想知道怎么解决,首先就得弄清楚异常发生的原因。
调用链路图中可以看到有两个异常,一个是超时异常,一个是无提供者异常。我们先从超时异常开始分析。

1. 超时异常和原因

遇到异常,我们的第一反应就是去认真阅读异常堆栈的详细信息。
你回忆了下超时异常堆栈信息。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入分析了多机房部署系统应用中可能出现的超时异常和无提供者异常,并提出了解决方法。作者通过排查异常原因,包括服务方动态注销、节点宕机、接口变更等,探讨了消费者调用提供者的链路图,强调了不同机房之间的隔离性。文章提出了改善措施,通过自定义集群扩展来处理无提供者异常,使消费者能正常调用提供者获取结果。此外,还探讨了集群扩展的应用场景,包括同机房请求无法连通、内网本机请求测试环境无法连通、特殊业务需要对接口的多个提供者进行筛选、剔除、负载均衡等情况。总体而言,本文内容深入浅出,对于需要解决类似问题的读者具有很高的实用性。文章还详细分析了 encodeResponse 方法的逻辑,总结了与 encodeRequest 的异同点,包括响应码的设置、请求唯一 ID 的使用、异常处理等方面的区别。这些内容对于理解 Dubbo 协议格式编码为字节流的过程具有重要意义,为读者提供了深入的技术分析和实用指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 杨老师
    doTransferInvoke(invocation); 老师,这块调用转发服务的逻辑,大致思路是啥样的? 可以运用之前学到的点点直连吗?

    作者回复: 你好,杨老师:可以运用之前的点点直连。大致思路就是: 1、从 invocation 将原始的请求数据提取出来,attachment(技术属性)+ 业务属性; 2、通过 http、tcp 将提取出来的数据发送至可用服务器(比如:隔壁机房); 3、将 http、tcp 的返回数据又继续想办法封为 Result 对象返回即可; 4、若 1~3步还是报错拿不到结果,那作为备选方案都无法在通信层面建立连接的话,那就走到了最坏的情况,该抛异常的还是得抛异常。

    2023-03-09归属地:北京
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部