我给Apache顶级项目贡献了点源码。 (中)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 我给Apache顶级项目贡献了点源码。 (中)

另外一个 bug


回到最开始的地方,我为什么会在写 LFU 的时候联想到 Dubbo 呢?

因为在 2.7.7 这个版本发布的时候,我就关注到了它。

而当时关注到它的原因并不是 LFU ,而是新增了一种负载均衡策略:


微信图片_20220427222635.png


于是我把之前的文章进行了汇总,写下了这篇文章:

吐血输出:2万字长文带你细细盘点五种负载均衡策略。

而其中一致性哈希负载均衡策略,我在实践的时候也发现了一个 bug。

其实这个 bug 也是一个必现的 bug,为什么没有被爆出来的原因,我想是因为当前的版本使用的人不多,而使用一致性哈希负载均衡策略的就更少了,甚至没有。

这个 bug 具体是这样的:

https://github.com/apache/dubbo/issues/5429


image.png


我已经知道了在一致性哈希算法中的这行代码就是导致 bug 的原因:

System.identityHashCode(invokers)

甚至我也知道了,这行代码导致 bug 的原因是 invokers 这个集合的地址变了。

这个集合里面,放的就是服务提供者列表。

集合里面的服务者列表其实并没有变化,只是每次都用了一个新的 list 来装这些服务提供者。

而为什么每次都用一个新的 list 来装,我也找到了:

问题就出在 TagRouter 中:

org.apache.dubbo.rpc.cluster.router.tag.TagRouter#filterInvoker


image.png


基本上到这里,也就明确原因了。

但是我前面说了,更高一级的是了解这个框架的前世今生。

问题出在 TagRouter,那么这个 TagRouter 怎么来的呢?

如果了解 Dubbo 2.7.x 版本新特性的朋友可能知道,标签路由是 Dubbo2.7 引入的新功能。


image.png


巧就巧在我还真的清楚这个地方的来龙去脉。

因为我的第一篇技术文章就是写的 Dubbo 2.7 新特性,当时进行了一个了解。

没想到一年多以后,竟然还呼应上了。

而这个 bug,其实也是一行代码就能修复;


image.png


而我当时为什么没有去修复呢?

因为最开始找到这个 bug 的时候,我想到的解决方案是写个工具类。

思路也是只关心 List 里面的元素,而不关心 List 这个容器,但是实现方式比较复杂,改动点较多,还需要写一个工具类。

当时就没动手,想着先提个 issue 放着,有时间了再弄。

结果,没想到 issue 放上去的当天就有人回复并了一个我没有想到的解决方案:


image.png


看到这个回复的时候,我才一下回过神来,原来一行代码就能代替我写的工具类了啊。

而对于其中涉及到的知识点,我是知道的。

我反思了一下自己为什么没有想到这个方案。

其实就是对于已知道的知识点,掌握不够深刻导致的,没有达到融会贯通的地步。

知其然,也知其所以然,可惜在需要使用的场景稍稍一变的情况下,就想不起来了。

知道知识点,但是该用的时候却记不起来,这种情况其实挺常见的,那怎么解决呢?

于是我写下了这篇文章:

够强!一行代码就修复了我提的Dubbo的Bug。

这篇文章就是我的解决方案,记录下来嘛。

就像高中的时候人手一本的错题本,做错的题,不会的题都抄下来嘛。没事的时候翻一翻,总有下次碰到的时候。再次碰到时,就是“一雪前耻”的机会。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
57 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
3月前
|
Apache
多应用模式下,忽略项目的入口文件,重写Apache规则
本文介绍了在多应用模式下,如何通过编辑Apache的.htaccess文件来重写URL规则,从而实现忽略项目入口文件index.php进行访问的方法。
|
4月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
252 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
4月前
|
关系型数据库 Linux 网络安全
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
372 0
|
7月前
|
存储 分布式计算 Apache
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
Apache Paimon 在构建实时数据湖与流批处理技术领域取得了重大突破,数据湖步入实时新篇章!
3159 6
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
|
7月前
|
消息中间件 API Apache
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
本文整理自阿里云开源大数据平台徐榜江 (雪尽),关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会。
2102 2
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
|
7月前
|
Java API Apache
【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计
在阅读中,还发现了有个html文件忘记加了开源协议,我们提下PR修复下,又收获了一次开源贡献!!PR提交戳这。
【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计
|
7月前
|
存储 缓存 负载均衡
【Apache ShenYu源码】如何实现负载均衡模块设计
整个模块为ShenYu提供了什么功能。我们可以看下上文我们提到的工厂对象。/***/核心方法很清晰,我们传入Upsteam列表,通过这个模块的负载均衡算法,负载均衡地返回其中一个对象。这也就是这个模块提供的功能。
|
7月前
|
SQL 数据可视化 大数据
【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台
【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台
434 33
|
7月前
|
Java
apache-incubator-streampark源码编译本地运行(七)
apache-incubator-streampark源码编译本地运行(七)
116 1

推荐镜像

更多