关于“协议”的理解
工作中在一个网关服务中,对于一个接口的响应体ApiResponse,由之前返回给上游的“一定成功的响应”,改成了 返回 有可能包含“失败的响应”。当服务端业务逻辑处理失败时,封装了失败的响应体给上游后,上游校验到响应状态码ERROR后报警。
- 错误假设。 根据召回条件理论上该接口一定会从召回数据; 一般客户端都会校验服务端响应状态码,并做好不同响应的处理逻辑,思维只停留在自身代码的重构,未评估好影响面
- 协议打破。 先不讨论具体该响应什么。看整体,这本质是一个打破运行时协议的事情。之前服务端为客户端默默干的事情是往上层投递处理成功的“好消息”,天天哄着,后来有一天,服务端开始扔“坏消息”,那么崩溃的事情发生了,能确保客户端会处理这类型的消息嘛?结果瞎报警。
我们再来讨论响应体这个事情如何更优雅:
首先看服务端接口本身在提供什么能力,如果可降级,就返回降级结果,打印warn日志,对于降级结果如果真失败,这时候就要和上游去沟通好一个协议,告诉他们:“如果我们真的真的失败了,我们会给你一个ERROR状态呢,再或者返回一个空结果列表,状态为SUCCESS”。意味着可降级的失败对别人屏蔽掉,不可降级的要建立好 服务SLA。
我们再回过头来看“协议”的概念,我们知道从网络设备到上层应用都在遵循着各种各样的协议,上面讨论的问题理应获得和底层协议等价的重视态度,再当我们遇到类似事情的时候,脑中才可以敏锐的察觉到这是一个关于“协议”的事情,而不是具体的xxx,才会从协议打破的视角去思考产生的影响,而不是“明学思维”: 我感觉 我认为~
生活中的“协议”。 我们说“三十而立”后再谈原则,原则是不是可以理解为 自我协议和 与他人协议 的达成和坚定维护。自我协议打破 人易被侵蚀底线。组织小到工作组,大到社会,组织协议打破,信任体系崩塌。年轻时很少有原则,大概是没去理解协议的价值。类比 分布式数据一致性协议,所有节点长期以来都认为我和大家数据都一样的,后来有一天master同步从节点数据开始是不是偷懒了,系统可用性危在旦夕,从新选举master,建立好信任体系。
其实一想,一个运转良好的系统,一定程度上是协议非常清楚可靠的。