AI编程:双层代理?(6)
https://www.codefather.cn/post/2090835509789069313 https://www.codefather.cn/post/2090844834888683521 https://www.codefather.cn/post/2090851159248998402 https://www.codefather.cn/post/2090855382132985857 https://www.codefather.cn/post/2090861769709850626
第五个需求:网关死锁
第五个需求,需要配置 B 端网关。 我先说结论,再告诉你青碧凝霜是怎么在这个死局里摸爬滚打的。 前几天,基础架构的同事收紧了权限,但设计极其不合理:
- 想要上线,就需要授权;
- 想要授权,就需要先上线。
这不就是经典的死锁吗? 所有没有授权的接口,通通返回 403。
我上线了这个接口,结果直接 403——但是不可能403的啊。 查网关,网关显示一切正常。 我开始排查,发现代码里根本没有 403 的逻辑。 我疯狂拷打 AI,AI 的态度异常坚决: “我没错,我一切流程都正常,里面没有 403 代码。” “就是你网关没配置好。” 我回去看网关,又看代码,两眼一抹黑。 经过几个小时,我终于放弃了,开始问同事。同事表示:“没有这个逻辑,你是不是配错了?或者发版不合理?” 我尝试了一下,终于发现:有网关日志。 把日志喂给 AI,AI 表示:“你排查的方向没问题,因为网关映射没配。” 说到这个网关映射,就要从 Docker 讲起,要从 Nginx 反向代理讲起……内容太多,直接跳过。 我拿着日志确认是网关的问题。 同事说:“想要上线,需要前端去配置网关。” 不是????????????????????????????????? 既然如此,前端去配置网关。 前端说:“网关配置现在卡死了,报错 403。” 假如接口需要上线,需要先调通;
- 但是调通的时候,必须先上线。
- 基础架构的同事,你们绝对是屎吃多了
但是排查这个故障,真的花了一天多的时间。 谁 XX 想象得到嘛?根本不给一点排查的角度。 同事说:“那就先调用这个接口。” 我当场去调用,RPC 远程调用挂了。 至于聊到 RPC 远程调用和 HTTP 请求、网关的关系,这个说来话长:
- RPC 是微服务内部通信用的;
- HTTP 是暴露在外的请求;
- 而后端的 Nginx 是反向代理;
- 前端的校验是第二层反向代理。 现在 RPC 挂了,怎么办?
聊聊基础架构同事的问题
这个情况,明显就是没测试就上线。但凡测试过,就不可能出这么低级的错误。
- 之前预发环境不需要校验,但是正式环境需要校验
- 假如想要在正式环境发版,必须先在预发环境进行校验,否则会报错403
- 现在,在预发环境上线以后,也必须校验通过
按照之前的流程,就可以先在预发环境测试通过,然后实际上线的时候通过校验预发环境,直接上线。 现在情况就是:预发环境他新增接口和正式看齐。
- 新增接口需要调用通过,才能上线
- 但是新增接口想要上线,才能调用通过
一共有3种配置方式,可以手工写,可以导入,也可以复制命令行。 这三种都试过了,通通返回403。
但是我不认识做基础架构的同事,也说不明白。 于是我就找领导
- 基础架构的接口新增功能的网关配置出了问题,报错403,新增不了网关
- 我需要关掉
领导问:什么是网关?什么是403?
你领导不是技术出身啊?????
然后我懵了,说了:预生产新增了一个校验,校验不合理,导致后端无法提交新接口。
领导:什么叫新增一个校验?
于是只能让同事帮忙——因为截不了图。 同事:
- 前端需要把接口关联在页面上,后端才能调用
- 现在接入方式改了
- 激活才能访问,访问才能激活
激活????????????????????????
这个话我真说不出来。
新增接口,需要调用才能上线,上线才能调用。把上线、调用这个词改成了激活,领导就听懂了。
我实在是没有和不懂技术的领导沟通的天赋。
催工期的鬼
然后催工期的同事来了。 我一共四天时间,一天半浪费在你们这个两层反向代理里面,Nginx 你还给老子挂了。 我怎么开发? 我就直接完成了 80%,把两个接口给延期了。 这时候,领导过来表示:“项目结束,你去另外一个项目。”
