知识卡片
发明你要的轮子:没有完全适合你的开源轮子
内容
讲了这么多如何选、如何用开源项目,最后却又绕回”重复发明你要的轮子”,看似矛盾,其实核心还是一个成本和收益的权衡问题——选择开源项目并不一定就是最优选项,最主要的原因是:没有完全适合你的轮子。软件领域和硬件领域最大的不同在于,软件领域没有绝对的工业标准,大家都可以随心所欲地设计。不像硬件领域,造一个尺寸与众不同的轮子,其他车根本用不上,工艺再高、质量再好也是白费;软件领域可以造出很多相似的轮子,基本上到处都能用——比如把缓存从Memcached换成Redis,不会有太大问题。除此以外,开源项目为了能大规模应用,考虑的是通用的处理方案,而不同业务之间其实差异很大,通用方案未必完美适合具体某个业务。书中举了一个真实案例:Memcached通过一致性Hash提供集群功能,但某些业务要求缓存即使有一台宕机,整个业务也不能被拖慢,这就需要缓存本身具备备份能力,而Memcached没有这个能力,当时的Redis又还没有集群功能;于是团队投入2-4个人、花了大约2个月时间,基于LevelDB的原理自己做了一套缓存框架,支持存储、备份、集群功能,后来又在这个框架基础上增加了跨机房同步的功能,很大程度上提升了业务的可用性水平——如果完全依赖开源项目、等开源项目来实现,是不可能这么快的,甚至开源项目根本就不支持这个需求。所以,如果你有钱、有人、有时间,投入人力去重复发明一个完美符合自身业务特点的轮子,也是很好的选择——毕竟很多财大气粗的公司(如BAT)本来就是这样做的,否则市面上也就不会有那么多好用的开源项目了(它们本身就是别人”重复发明轮子”的产物)。
参考来源
- 位置:《从零开始学架构》第48讲《再谈开源项目:如何选择、使用以及二次开发?》"改:如何基于开源项目做二次开发"之"发明你要的轮子"(源文件:_epub-src/OEBPS/text00003.html)
- 结论依据:原文说明"最主要的问题是:没有完全适合你的轮子……于是我们投入 2~4 个人花了大约 2 个月时间基于 LevelDB 的原理,自己做了一套缓存框架支持存储、备份、集群的功能……如果完全采用开源项目,等开源项目来实现,是不可能这么快速的,甚至开源项目完全就不支持我们的需求""如果你有钱有人有时间,投入人力去重复发明完美符合自己业务特点的轮子也是很好的选择",直接支撑本卡结论。
- 原始内容:最主要的问题是:没有完全适合你的轮子!……于是我们投入 2~4 个人花了大约 2 个月时间基于 LevelDB 的原理,自己做了一套缓存框架支持存储、备份、集群的功能……如果你有钱有人有时间,投入人力去重复发明完美符合自己业务特点的轮子也是很好的选择