架构决定稳定性:核心对象 + 流水线

架构决定下限,代码决定上限。虽然代码影响很大,但是整体的稳定性,依然是架构占大部分决定因素。linux 网络栈足够复杂,但又有足够的扩展性,且非常的高性能,为什么?因为它流水线 + sk_buff。 核心:架构决定稳定性 架构决定下限,代码决定上限。 虽然代码影响很大,但是整体的稳定性,依然是架构占大部分决定因素。 linux 网络栈(sk_buff),足够复杂,但又有足够的扩展性,且非常的高性能。 它确很稳定,为什么? 因为他流水线 + sk_buff: 它的核心对象,是高内聚的、面向对象的; 它子模块是松耦合的,通过核心对象来协作。 我们的 iaas 流程呢? 没有核心对象,全是临时去数据库查,临时到数据库更新,临时到 hyper 获取环境信息。 修改也是修改很细微的变量,而不是一个从一而终的对象。 这种构成了各种千丝万缕的关系,且环节之间直接调用,相互耦合。 缺乏一个解耦式的流水线的设计。 即便不是 k8s 那种声明式的架构,即便是流程式的、面向过程的架构,也不至于这么乱呀。 最简单的解法 最简单的,主机是一个核心对象,从创建开始就确定了的,后续就不要再改了。 volume 是核心对象,和主机绑在一起。再加个网络核心对象,和主机绑定。 全流程从头到尾,都操作这三个核心对象,且通过责任链的方式,A 环节操作完了,B 环节。 这样每个环节是解耦的,他们不关心上下环节,只关心核心对象。 这种简单、稳定多了呀。 web 框架 gin,也是这样呀,大家都操作一个 context 对象,这样各个处理模块互不耦合,且扩展性好。 小结 架构决定下限,代码决定上限; 整体的稳定性,依然是架构占大部分决定因素; linux 网络栈稳定,因为它流水线 + sk_buff,核心对象高内聚,子模块松耦合; 我们的 iaas 流程没有核心对象,全是临时去数据库查、临时更新,构成千丝万缕的关系; 主机、volume、网络是核心对象,全流程操作这三个核心对象,通过责任链的方式,每个环节解耦。

May 23, 2026 · 1 min · 52 words · 文叨叨