知识卡片

预测变化的三重复杂性

普通读书笔记卡

内容

[[可扩展性的两个基本条件:正确预测变化与完美封装变化]]中”正确预测变化”这一半,本身就是一件充满悖论的事:一个系统的设计需要考虑的点可能有成百上千个,不可能每一个设计点都做到面面俱到地预测未来变化——真要这样做,设计成本会高到难以承受,而且大部分预测出来的变化点实际上根本不会发生,等于白白付出代价;但反过来,如果完全不考虑任何变化点,系统一旦遇到真实的新需求,就要推倒重来,这又违背了做可扩展性设计的初衷。更麻烦的是,即便认真去预测,预测本身也天生带着出错的风险——设计者不是先知,对业务和技术趋势的判断随时可能与现实走向不一致,”预测的变化后来没有发生”和”没预测到的变化后来发生了”两种情况都会真实出现。这三点合起来意味着,可扩展性设计从起点开始就不是一道能被完美解答的题,而是一个必须在”预测覆盖面”和”预测成本代价”之间不断做权衡取舍的持续判断过程,与其追求预测的完全准确,不如把重点放在预测出错时的代价能否可控上。

参考来源

- 位置:《从零开始学架构》第06讲《复杂度来源:可扩展性》"正确预测变化"(源文件:_epub-src/OEBPS/text00000.html) - 结论依据:原文指出"系统需要考虑到的设计点可能多达成百上千个,不可能每个设计点都考虑可扩展性""同时,不能每个设计点都考虑可扩展性,但也不能完全不考虑可扩展性……而且,预测本身是一件复杂的事情,预测可能是错误的,也可能是正确的",三点共同构成预测变化的复杂性来源,直接支撑本卡片结论。 - 原始内容:系统需要考虑到的设计点可能多达成百上千个,不可能每个设计点都考虑可扩展性;同时,不能每个设计点都考虑可扩展性,但也不能完全不考虑可扩展性;此外,预测本身是一件复杂的事情,预测可能是错误的,也可能是正确的。