我代表编程导航,向大家道歉!

对不起,我代表编程导航,向大家道歉!

大家最近访问网站可能会遇到很多莫名其妙的 Bug。

幸运的话,还可能会看到 "薛定谔的网站"!

诶,一会儿新页面、一会儿老页面、一会儿又来个报错,不知道你们遇到没有?

具体的 Bug 表现可以看:bilibili.com/video/BV1Ng...

怎么回事儿呢?

最近我们网站前端正在进行技术升级,为了保险起见,我们选择 灰度发布,先让一小部分用户使用新版本,而不是全量上线。

但是无奈我们目前使用的项目部署平台不支持按比例灰度发布。

为了降低灰度的实现成本,团队心生一计:既然用户访问网站时,要先通过 DNS 服务器解析域名为 IP 地址。

那我只需要在 DNS 解析这边动动手脚,给同一个域名配置 2 条相同类型的解析记录,一条指向新网站、一条指向老网站,再设置不同的权重,这样就通过 DNS 轮询的方式分配了流量。

过程如图:

结果翻车了!

哪怕是同一个用户、同一台电脑访问我们的网站,都有可能出现一会儿新页面、一会儿老页面的情况,用户体验很差;而且由于新老网站技术栈不兼容,还出现了一些奇奇怪怪的 Bug。

这是因为 DNS 轮询本质上是 随机分配,无法绑定用户身份。哪怕同一台电脑,DNS 缓存过期后再次解析,也可能拿到新网站服务器的 IP,导致版本切换。

不过目前这个问题应该已经解决了,大家可以帮我试试看。

编程导航:codefather.cn

解决办法很简单,我们临时更改了 DNS 解析规则的线路类型,将某一运营商(比如电信)的用户统一解析到新版本,其他用户解析到老版本。这样避免了完全随机的情况,解决了同一用户反复切换的问题,达到了按用户群体灰度的效果。

我承认基于 DNS 实现灰度并不优雅,也导致了一些线上 Bug。理想情况下应该根据用户 ID、Cookie 等标识进行一致性分流,可以利用网关、容器编排、或者 CDN 等技术实现灰度。

但标准的灰度方案需要更复杂的基础设施和更高的成本,对于俺们小团队来说,在资源有限的情况下,还是选择了一个 "看似可行" 的简单方案,结果聪明反被聪明误了。

把这次的事故分享出来,也是希望能给同样是小团队的朋友们一些参考。

你们遇到过类似的情况吗?有什么更好的方案推荐?

更多

💻 编程学习交流:编程导航 📃 简历快速制作:老鱼简历 ✏️ 面试刷题神器:面试鸭

相关推荐
葫芦和十三5 小时前
图解 MongoDB 07|索引类型:七种索引,七种访问形状
后端·mongodb·agent
朦胧之7 小时前
AI 编程-老项目改造篇
java·前端·后端
Hyyy8 小时前
token是什么?为什么大模型会有上下文长度的限制
程序员·llm·ai编程
swipe9 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
爱勇宝10 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
甲维斯10 小时前
用AI还原《坦克大战》并3D化升级!
前端·人工智能·游戏开发
IT_陈寒11 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
SelectDB11 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
kyriewen11 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
SelectDB11 小时前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生