中间件服务上线,那跟电影里的拆炸弹一样刺激

作者:吴就业

原文链接:www.wujiuye.com/article/det...

墨菲定律:如果有可能出错的事情,那么它就一定会出错。

中国还有句俗语,叫"怕啥来啥"。

故事涉及RPC网关,这是一个中间件服务。

这是一个非常大改动的迭代,而RPC网关承接了业务非常大的跨业务rpc调用流量,并且网关还是多租户的。(我们不讨论业务架构层面是否合理)

这意味着,不像我们部署某个业务服务,出问题可能只影响那一小块业务,而是会影响所有的业务。

年前迭代就已经开发,测试验收通过,在预发环境也运行了一个多月。就是等年后再上线。年前还写了发布计划、发布清单。

发布清单,记录着先发哪个服务,要改什么配置,找运维沟通什么,再发什么服务。

发布计划,先灰度亚太区域一个节点,再灰度中国,再全量亚太,再全量中国,再灰度美国,再......

时间过得太久了,对发布的整个过程记不清,发布前看了发布清单,但是没看完。所以,因为这一点粗心,漏了一个配置,结果服务没启起来。

好在进程没启起来,所以没流量进来,就没有什么事情。但是我被吓得更胆小了,配置重新再一个一个过一遍,甚至标点符号都检查有没有少一个逗号。

令我害怕的根本原因有以下几点。

第一,我们的灰度粒度太粗了。

我们没有控制到百分比流量的粒度,而是节点粒度,如果节点只有两个,那就是百分之五十的粒度,这跟全量没区别,相当于直接上线了。

另外,Apollo灰度的功能也成为了摆设。Apollo的恢复策略需要指定IP,如果是容器化部署的服务,容器重启IP就不同,而技术栈的原因,启动的时候拿不到正确的配置容器就启动不起来,所以配置方面也缺失灰度能力。

可以说整条链路现状是缺少细粒度的灰度发布能力的。

第二,这个网关服务有个历史的致命缺陷。

这个致命缺陷就是服务启动初始化至少要十几分钟,这也是此次迭代重构的原因。这个缺陷的存在意味着,出问题回滚也要等待十几分钟才生效,这十几分钟问题就大了。

第三,初始化数据问题。

重构前,跨业务调用rpc网关支持业务的全量接口。而重构后,rpc网关只支持通过规则配置的接口。

所以上线我们需要基于历史最近一个月的rpc调用,通过监控系统去抓取接口。但这个难保没有漏的。比如存在那些一个多月才有一次调用的。

不过这点,出问题的影响可能还好。漏掉的可能就是那些非关键业务接口。

人的粗心再所难免,如果这个项目不是只有一个人在做,如果有一个人陪着一起发布,一个负责配置一个负责检查,那么因为粗心犯错的概率也能降低很多。

而针对这种大迭代的发版,根本原因还是要解决灰度粒度问题。机器都有宕机的时候。

这次升级,给我的感觉就像电影里面的情节,在电影中经常出现的拆炸弹情节:一个人被迫面对拆除一枚定时炸弹的任务,他必须仔细选择正确的线剪断,以防止炸弹爆炸。

说不定今天你阅读到这篇文章,明天作者就领大礼包走人了。

相关推荐
明月_清风21 分钟前
Python 内存手术刀:sys.getrefcount 与引用计数的生死时速
后端·python
明月_清风24 分钟前
Python 消失的内存:为什么 list=[] 是新手最容易踩的“毒苹果”?
后端·python
IT_陈寒14 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
流浪克拉玛依15 小时前
Go Web 服务限流器实战:从原理到压测验证 --使用 Gin 框架 + Uber Ratelimit / 官方限流器,并通过 Vegeta 进行性能剖析
后端
孟沐15 小时前
保姆级教程:手写三层架构 vs MyBatis-Plus
后端
星浩AI15 小时前
让模型自己写 Skills——从素材到自动生成工作流
人工智能·后端·agent
华仔啊17 小时前
为啥不用 MP 的 saveOrUpdateBatch?MySQL 一条 SQL 批量增改才是最优解
java·后端
武子康18 小时前
大数据-242 离线数仓 - DataX 实战:MySQL 全量/增量导入 HDFS + Hive 分区(离线数仓 ODS
大数据·后端·apache hive
砍材农夫19 小时前
TCP和UDP区别
后端
千寻girling19 小时前
一份不可多得的 《 Django 》 零基础入门教程
后端·python·面试