查看原文
其他

啥,你问我程序员的悲哀是什么?

歪歪 why技术 2023-10-26

你好呀,我是歪歪。

前几天在 Dubbo 官网上闲逛的时候看到负载均衡的这部分,发现突然冒出来两个新家伙:

https://cn.dubbo.apache.org/zh-cn/overview/core-features/load-balance/

  • P2C LoadBalanc:Power of Two Choice 随机选择两个节点后,继续选择“连接数”较小的那个节点。
  • Adaptive LoadBalance:自适应负载均衡 在 P2C 算法基础上,选择二者中 load 最小的那个节点

老读者应该还记得,我最早最早写文章的时候写了很多 Dubbo 相关的文章,其中负载均衡策略的部分,我是每个都进行了详细的介绍:

《一文讲透Dubbo负载均衡之最小活跃数算法》

《Dubbo一致性哈希负载均衡的源码和Bug,了解一下?》

《Dubbo加权轮询负载均衡的源码和Bug,了解一下?》

现在回过头去看当年的文章,文笔非常稚嫩,行文比较混乱,可以明显看出一个成长的痕迹。

呃,扯远了...

看到 Dubbo 有了新的负载均衡策略,所以我决定盘一盘它。而且关于新增的这两个负载均衡策略,虽然官方没说,但是我知道这背后还有一个有点意思的故事。

时间线拉回到 2 年前,2021 年 9 月,天池大赛。

那一年,有一个赛道的题目叫做:实现一个柔性集群调度机制:

读完赛题之后,我知道这个题目的主要考点之一,就是要搞一个“牛逼”的负载均衡算法出来。

把官方提供的赛题 Demo 拉下来之后,我直接就是先上了一个 p2c 算法:

p2c,Power of Two Choice 算法非常简单,主要的思路如下:

  • 对于每次调用,从可用的provider列表中做两次随机选择,选出两个节点providerA和providerB。
  • 比较providerA和providerB两个节点,选择其“当前正在处理的连接数”较小的那个节点。

然后我当时属于第一波提交代码的选手,所以直接冲到了榜一,还水了一篇文章:《一不小心,用力过猛,成了榜一大哥...》

两年过去了,突然在官方网站上看到了支持新的负载均衡算法,一个是 p2c,一个是叫做 Adaptive LoadBalance,自适应负载均衡。

我就知道,这个算法肯定和当年的“柔性集群调度机制”有千丝万缕的关系。

基于此,我本来是想要写一篇关于“自适应负载均衡算法”的具体原理和源码解读的文章的。

但是......

我 TMD 电脑不知道扯什么拐了,这周一个劲儿的蓝屏,工作日的时候我就忍了,毕竟每次晚上下班回家都比较晚了,用不了太久的电脑。重启一下可以顶一会儿。

到了周末,好家伙,好几次写到高潮的地方,正自嗨呢,踏马蓝屏了,重启之后踏马高潮没了,不仅高潮没了,文章也丢一段。

为了写文章做 Demo,负载均衡嘛,肯定需要多搞几个服务提供方。每次蓝屏重启之后,我都得重新打开 idea,在 20880,20881,20882 端口各开一个服务提供方。

一个小时左右蓝屏一次,每次都要重新启动一堆服务,这玩意谁受得了啊。

所以,我实在受不了,决定先解决蓝屏问题。

最开始的时候,我每次蓝屏对应的终止代码都是这个玩意:

DPC_WATCHDOG_VIOLATION

然后我一顿搜索,在下载了 WinDbg,这个玩意说是微软官方出的专门看是什么文件导致蓝屏冲突的,类似于一个调试软件:

关键分析出来之后,我能看出来是汇编语言,但是你叫我分析也看不懂啊。

虽然我也是程序员,但是这玩意对我来说超纲了啊。

就像是我本来只是一个在工地上的无情打灰人,你非得叫我去开挖挖机,虽然都是修楼的,但是工种不一样啊。

没办法,反正就是一步一谷歌。最后还算是得到了一个好消息和一个坏消息。

好消息是 DPC_WATCHDOG_VIOLATION 终于不再出现了。

坏现象蓝屏并没有被解决,而且后面每次蓝屏的原因都各不一样了:

更坏的消息是,蓝屏的频率更快了。

每次蓝屏之后,系统都会在 C:\Windows\Minidump 路径下生产一个 dmp 文件。

我没修之前,还能保持连续的使用一小时的样子:

我修了之后,时间变成了这样:

分钟级别的蓝屏速度...

然后又是进入到安全模式一顿瞎搞。最后,定位到分钟级别蓝屏的原因是我下载了“联想安全管家”。

是的,我就是怕野鸡网站下载出问题,我专门到官方上去下载了“联想安全管家”,然后他给我干蓝屏了。

这一套搞完之后,已经没时间也没心情写技术文章了。

而且到现在还是没彻底搞定,只是说回到了我没折腾的状态,蓝屏还是会突然的来那么一下子。

所以,本来好好的一篇技术文章就变成了这样,不是我不写,属实是装备跟不上。(好耶,这个鸽的理由无懈可击。)

这几天我应该还会和蓝屏持续作战,但是我已经做好了重装系统的准备。

说起重装系统...

呃...

虽然我是一个程序员,但是我确实从来没有重装过系统,

所以,

我也不会。

但是我已经查好了,万能的某宝,20 元钱,买个系统 U 盘,包教包会。

在修复蓝屏这个问题期间,刷知乎也刷到了一个话题:程序员的悲哀是什么?

https://www.zhihu.com/question/399148081/answer/3022694360

这下面有一个高赞回答,很戳中我的“心巴”:

但是,那一刻,我好想回答:

程序员的悲哀,就是电脑蓝屏了,自己还搞不定。

...

...

...

其实自始至终我害怕的都不是蓝屏。

我害怕的是,

如果线上系统出问题了,我的电脑因为蓝屏而不能远程连接,从而导致解决问题不及时,虽然这是一个正当的理由,但是还是过不去自己内心给自己设定的“就应该及时响应”的坎儿。

害怕手机出问题,别人联系不上。

害怕电脑出问题,远程连接不上。

随时 on call,这是程序员的责任,也是程序员的悲哀。

··············  END  ··············

推荐👍68行代码实现Bean的异步初始化,粘过去就能用。

推荐👍扯下@EventListener这个注解的神秘面纱。

推荐👍我试图通过这篇文章,教会你一种阅读源码的方式。

推荐👍这是一行牛逼的源码。

推荐👍一个普通程序员磕磕绊绊,又闪闪发光的十年。

你好呀,我是歪歪。我没进过一线大厂,没创过业,也没写过书,更不是技术专家,所以也没有什么亮眼的title。

当年高考,随缘调剂到了某二本院校计算机专业。纯属误打误撞,进入程序员的行列,之后开始了运气爆棚的程序员之路。

说起程序员之路还是有点意思,可以点击蓝字,查看我的程序员之路

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存