封装仅仅是为了复用,但是独立有管理能力。封装调用了就得执行,独立有自己的一套管理规则,比如排队、限流、调整优先级、丢弃、转换等。

核心:封装 vs 独立

封装仅仅是为了复用,但是独立有管理能力。

  • 封装:调用了就得执行,里面通过各种条件逻辑控制行为;
  • 独立:有自己的一套管理能力,有自己的一套规则。

请求来了,不是立马执行逻辑,而是先进管理规则。

比如排队、限流、调整优先级、丢弃、转换等等。

独立不一定要独立服务

独立并不是说要一个独立服务,服务内的一个模块、一个库,都可以是独立的。

一个例子:report 服务

应该有个独立的 report。

如果是 report 函数,大家分散调用,调用的频率不一样:

  • A 30 秒调用一次;
  • B 20 秒调用一次;
  • …

这玩意没法统一处理,调整和排查的时候也麻烦。加一个监控项的时候也很麻烦,触发的地方、触发的间隔、获取数据都需要考量。

如果像 k8s 一样统一上报,比如 kubelet 收集 node 信息上报给 k8s,至于收集哪些监控项,kubelet 再提供相应的接口,插件对接 kubelet 的接口即可。

这样的好处是,扩展仅仅是本地收集的处理,上报流程不需要考虑,甚至不需要知道。

核心还是提取不变的,封装变化的。

小结

  • 封装仅仅是为了复用,独立有管理能力;
  • 封装调用了就得执行,独立有自己的一套管理规则;
  • 独立不一定要独立服务,服务内的模块、库都可以是独立的;
  • 统一管理:其他地方过来调用仅仅是一个请求,什么时候调用、如何调用、什么优先级,有自己的管理;
  • 核心是提取不变的,封装变化的。