知识卡片

积木类与大厦类开源产品的复用边界

普通读书笔记卡

内容

面对Java生态里数量庞大的开源产品,一个常见的两极分化态度是”完全拥抱开源、能用现成的绝不自己写”或者”完全不用开源、什么都自研”,而Elastic-Job团队提出了一个更细致的中间立场:把开源产品分成”积木类”和”大厦类”两种,只在自己的项目里大量复用积木类开源产品,但不会直接采用别人已经搭建成型的大厦类开源产品来替代自己的核心架构。积木类指的是功能单一、职责明确、可以作为构建材料嵌入到自己系统里的组件(比如某个工具类库、某个基础算法实现);大厦类指的是已经形成完整解决方案、有自己一整套架构主张的成熟系统(比如一个完整的调度框架、一个完整的ORM框架)——直接采用大厦类产品意味着要接受它的整体架构假设和设计取舍,一旦这些假设和自己的场景不完全匹配,改造成本会非常高,几乎等于在别人的地基上盖自己的房子。这个区分给出了一条实用的开源复用判断标准:越是底层、职责单一、可替换性强的能力,复用现成开源实现的收益越大、风险越小;越是涉及整体架构决策、决定系统骨架长什么样的部分,越应该自己设计、只把开源产品当作素材而不是直接搬用整套方案——尤其是当自己的核心业务场景和某个成熟框架的原始设计目标存在系统性差异时,”复用”反而可能变成”削足适履”。

参考来源

- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.6 新一代分布式任务调度框架:当当Elastic-Job开源项目的10项特性"节,"2.6.6 对开源产品的开发理念"(源文件:_epub-src/OEBPS/Text/Chapter2_6_7.xhtml) - 结论依据:原文说明"我们倾向于把开源产品分为积木类和大厦类。在项目中一般只考虑使用积木类搭建属于我们自己的大厦,而不会直接用其他已成型的大厦",直接支撑本卡片结论。 - 原始内容:极简代码,高度复用,无重复代码和配置……我们倾向于把开源产品分为积木类和大厦类。在项目中一般只考虑使用积木类搭建属于我们自己的大厦,而不会直接用其他已成型的大厦。