故事背景
昨天上午,我像往常一样打开电脑,准备刷会掘金,结果网页一直卡在登录界面,疯狂转圈圈就是不加载。
我还以为是我自己电脑网络出了问题,但上百度、知乎啥的都没问题。
用手机一打开掘金,秒进!问了下同事,他们也都能正常登录。
一开始还以为是 DNS 出了点幺蛾子,我立刻祭出经典网络排障大招:
bash
ipconfig /flushdns
刷新 DNS 配置后重启浏览器,一点用都没有,还是转圈转圈转圈...
🤔 是不是掘金在精准打击我?
我开始怀疑是不是掘金搞了什么 AB 测试,或者我成了某种「灰度用户」?
于是我在手机端打开掘金,发了个沸点,问问是不是有人也遇到这个问题。
结果还真有几个网友评论说上不去,但大部分人都没啥问题。
这时候我感觉自己可能是那万分之一被眷顾的倒霉蛋。
🔍 开始排查:ping 一下 juejin.cn
等到下午4点钟都还没修复,我等不急了,看看能不能自己修复一下这个问题。先ping一下juejin.cn看看咋回事。
我再让同事帮忙ping一下,他是可以ping通的。我才意识到我们访问的是不同的节点,我ping他的地址也能ping通,我脑海里突然有一个绝妙的想法。
tips: 过一段时间ping掘金都是不同的ip,但是他的ip都能ping通,我的ip都ping不通,估计是某个集群的节点都挂了。
💡 灵机一动:改 hosts 文件!
既然我同事的 IP 能正常访问,那我可以:
- 拿到他 ping 通的 IP;
- 修改本地
hosts
文件,把 juejin.cn 指向这个 IP。
Windows 下 hosts 文件路径:
makefile
C:\Windows\System32\drivers\etc\hosts
我加了一行:
bash
x.x.x.222 juejin.cn
保存之后清缓存,重启浏览器,奇迹出现了:
✨ 掘金网页终于可以正常访问了!
🔄 继续深挖:负载均衡的问题?
掘金 Web 后端肯定是有用负载均衡的,常见的几种策略有:
round-robin
:轮询分发ip_hash
:按 IP 分发weight
:加权分发
我和同事的公网 IP 是一样的,那就不应该被分到不同节点。
我开始怀疑是不是用了 源端口 来参与 Hash 了。
查了下资料,像 LVS 或某些 Nginx 配置,确实可能用五元组(源 IP、目标 IP、源端口、目标端口、协议) 来决定访问哪个节点。但是每次访问HTTP请求,端口应该都是会变的,所以也不应该是端口的问题。最后怀疑大概率是用的MAC地址做HASH,因为MAC地址是不变的,所以我试了很多次都登录不了。
🧠 小结:可能是某个网关节点挂了
综合判断,很可能是:
- 掘金某个后端节点挂了;
- 但 DNS 解析或者负载策略还会把小部分用户分发到这个挂掉的节点;
- 所以只有"极少部分人"打不开掘金;
- 修改 hosts 指向健康 IP 是临时绕过方法。
📢 想对掘金说几句话
如果掘金的朋友看到这篇文章:
👉 你们后端某个节点可能挂了,可以检查下是不是健康检查没生效;
👉 顺便问问,要不要给我来个内推?我都给你们排完错了😂
📌 最后
这次经历虽然只是一次小问题,但也提醒了我们:
- 平常多学一点网络知识真的能救命;
- 多一些动手排查的勇气;
- 最后别忘了写成文章分享出来,也许就能帮到别人啦。
如果你也遇到类似情况,欢迎评论区一起交流!