23|集群扩展:发送请求遇到服务不可用,怎么办?
何辉
你好,我是何辉。
通过特色篇的学习,你可以在日常开发中横着走了,如果你继续深入掌握了源码篇,基本可以把 Dubbo 框架游刃有余地玩弄于鼓掌之中。接下来,我们将进入拓展篇,借助一些产线的真实案例,真枪实弹地教你如何充分挖掘 Dubbo 框架的扩展能力,来解决实际问题。
今天我们来实操第一个扩展,集群扩展。
你有没有遇到过这样的情况,对于多机房部署的系统应用,线上运行一直比较稳定,可是突然在某一段时间内,部分流量请求先出现一些超时异常,紧接着又出现一些无提供者的异常,最后部分功能就不可用了。
我们结合具体的调用链路图来看。
这是一张消费方调用提供方的简单调用链路图,消费方第一次调用时发生了超时异常,然后第二次调用时却发生了无提供者异常,无提供者异常从字面意思上理解,就是没有服务提供者,结果和服务不可用是一样的。
对于这样一个看似非常简单的异常现象,我们该怎么解决呢?
异常如何解决
要想知道怎么解决,首先就得弄清楚异常发生的原因。
调用链路图中可以看到有两个异常,一个是超时异常,一个是无提供者异常。我们先从超时异常开始分析。
1. 超时异常和原因
遇到异常,我们的第一反应就是去认真阅读异常堆栈的详细信息。
你回忆了下超时异常堆栈信息。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入分析了多机房部署系统应用中可能出现的超时异常和无提供者异常,并提出了解决方法。作者通过排查异常原因,包括服务方动态注销、节点宕机、接口变更等,探讨了消费者调用提供者的链路图,强调了不同机房之间的隔离性。文章提出了改善措施,通过自定义集群扩展来处理无提供者异常,使消费者能正常调用提供者获取结果。此外,还探讨了集群扩展的应用场景,包括同机房请求无法连通、内网本机请求测试环境无法连通、特殊业务需要对接口的多个提供者进行筛选、剔除、负载均衡等情况。总体而言,本文内容深入浅出,对于需要解决类似问题的读者具有很高的实用性。文章还详细分析了 encodeResponse 方法的逻辑,总结了与 encodeRequest 的异同点,包括响应码的设置、请求唯一 ID 的使用、异常处理等方面的区别。这些内容对于理解 Dubbo 协议格式编码为字节流的过程具有重要意义,为读者提供了深入的技术分析和实用指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》,新⼈⾸单¥59
《Dubbo 源码剖析与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 杨老师doTransferInvoke(invocation); 老师,这块调用转发服务的逻辑,大致思路是啥样的? 可以运用之前学到的点点直连吗?
作者回复: 你好,杨老师:可以运用之前的点点直连。大致思路就是: 1、从 invocation 将原始的请求数据提取出来,attachment(技术属性)+ 业务属性; 2、通过 http、tcp 将提取出来的数据发送至可用服务器(比如:隔壁机房); 3、将 http、tcp 的返回数据又继续想办法封为 Result 对象返回即可; 4、若 1~3步还是报错拿不到结果,那作为备选方案都无法在通信层面建立连接的话,那就走到了最坏的情况,该抛异常的还是得抛异常。
2023-03-09归属地:北京
收起评论