封装仅仅是为了复用,但是独立有管理能力。封装调用了就得执行,独立有自己的一套管理规则,比如排队、限流、调整优先级、丢弃、转换等。
核心:封装 vs 独立
封装仅仅是为了复用,但是独立有管理能力。
- 封装:调用了就得执行,里面通过各种条件逻辑控制行为;
- 独立:有自己的一套管理能力,有自己的一套规则。
请求来了,不是立马执行逻辑,而是先进管理规则。
比如排队、限流、调整优先级、丢弃、转换等等。
独立不一定要独立服务
独立并不是说要一个独立服务,服务内的一个模块、一个库,都可以是独立的。
一个例子:report 服务
应该有个独立的 report。
如果是 report 函数,大家分散调用,调用的频率不一样:
- A 30 秒调用一次;
- B 20 秒调用一次;
- …
这玩意没法统一处理,调整和排查的时候也麻烦。加一个监控项的时候也很麻烦,触发的地方、触发的间隔、获取数据都需要考量。
如果像 k8s 一样统一上报,比如 kubelet 收集 node 信息上报给 k8s,至于收集哪些监控项,kubelet 再提供相应的接口,插件对接 kubelet 的接口即可。
这样的好处是,扩展仅仅是本地收集的处理,上报流程不需要考虑,甚至不需要知道。
核心还是提取不变的,封装变化的。
小结
- 封装仅仅是为了复用,独立有管理能力;
- 封装调用了就得执行,独立有自己的一套管理规则;
- 独立不一定要独立服务,服务内的模块、库都可以是独立的;
- 统一管理:其他地方过来调用仅仅是一个请求,什么时候调用、如何调用、什么优先级,有自己的管理;
- 核心是提取不变的,封装变化的。