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

作者:吴就业

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第三,初始化数据问题。

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

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

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

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

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

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

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

相关推荐
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
掘金者阿豪2 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
ServBay3 小时前
一个下午,一台电脑,终结你 90% 的 Symfony 重复劳动
后端·php·symfony
sino爱学习3 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
颜酱3 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
掘金者阿豪3 小时前
UUID的隐形成本:一个让数据库“慢下来”的陷阱
后端
用户084465256373 小时前
Docker 部署 MongoDB Atlas 到服务端
后端
Anita_Sun4 小时前
一看就懂的 Haskell 教程 - 类型推断机制
后端·haskell
Anita_Sun4 小时前
一看就懂的 Haskell 教程 - 类型签名
后端·haskell
七八星天4 小时前
C#代码设计与设计模式
后端