.. Kenneth Lee 版权所有 2016-2020
:Authors: Kenneth Lee :Version: 1.0
生成优秀的架构
通过前面一系列的观点准备,现在我们可以开始这个阶段性的观点了:优秀的架构不是来 自优秀的定义,而是来自优秀的发展。
这如同一个人的成长,不是来自优秀的教育和策略,而是来自丰富的际遇和经历。
这不是说优秀的教育和策略不重要,而是说,它们不是最重要的部分,不是主导的部分。
通过教育得不到最优秀的人才,人才是通过现实打磨出来的。因为我们谁都控制不住现实 ,能够贴得住现实,而且运气好的,才能活下来。我们不断寻找最佳实践,并一再防止熵 增,最终的目的是为自己留下活性去应对变化,但每个人的活性都是有限的,当变化过于 巨大的时候,我们就要死。即使你天天保养,小心做人,遇上个地震,你也可能活不下去 。
软件是一样的,我们用一切手段去控制熵增,但如果变化太大,我们的架构就会崩溃,所 以控制熵增是架构控制的基础,不控制熵增是自己作死,但不作死不表示你的架构最终成 功。你需要有意识地让你的架构的特定的应用场合中打磨,增加逻辑,同时保证它在这种 逻辑增长下持续控制熵增,让他在这种危险中活下去,如果它最终能活下来,就会成为一 个优秀的架构。
所以,架构是一个生成的过程,不是一个设计的过程。这和培养人是一样的。
你无法通过给你儿子一个锦囊,严格定义“如果A则B,如果B则C,如果C……”,来教会你的儿 子成材。……话又说回来了,实际上很多蠢家长,蠢老师是这么干的,他们自己的事情都处 理不好,却居然有一套成熟而自信的蠢原则去教他们的孩子。
反观架构,我们也有很多这样的蠢领导,蠢架构师,乃至蠢程序员,认为只要按某个原则 来对软件进行持续的设计,就可以可以得到一个优秀的软件(及其所定义的架构),这简 直就是缘木求鱼。这种蠢人到处可见,我这两天参加一个行业会议,有个傻逼就在那里大 放撅词,说要定义一个XX API,来指导业界如何实现某某平台。国内业界充斥着这种纸上 谈兵之辈,这解释了为什么我们做不出什么通用平台来。他们以为API是靠他定义出来的, 他以为他定义出来人家就要遵循。这是典型的以为靠名字可以左右现实。名字可以左右现 实的时代是在大家都比较蠢的时代(逻辑简单,代码量少的时代),难道大家都没有注意 到现在的标准组织都在逐步变成开源组织了吗? 你有看到新的类似POSIX这样的组织出来吗 ?你看到POSIX还有多大发展吗?现在人家是OPNFV,是OpenDayLight。
为什么?
因为接口升级得太快了。没空听你瞎扯淡。你们看到Linux内核的控制策略了吗?除了 Bugfixing,大部分大特性一概不收,要做RFC(大的修改),自己拉个分支出去,证明你 的市场成功再说,等你证明你这个方案真的好了,再拉回主干上,这个时候就接受你进入 主干了。
这种策略,我觉得几乎是现在架构设计的最优实践了。它的要素在于:
有一个到几个中心的架构版本,这个(些)版本负责架构演进,它不保证细节的性能和 质量,全力保证降低熵增。没有业务成功的特性,或者严重破坏熵增控制的特性,都不 要谈进主线。成功和低熵增,是进主线的两个不可或缺的条件。比如Linux主线
有多个战地版本分支,这些版本用于进行商业优化和质量保证,它们都有生命周期,改 进速度放慢,客户用完了,过几年就退出市场,从架构版本上拉分支做新的版本。比如 Redhat,Suse等用的内核
有多个新特性验证版本,这个版本的作用的做新特性。新特性的特定战地版本中先用, 或者找到其他机会证明实力,然后才合入主线,如果搞不定,就死掉
这活脱脱就是我们人类(大自然)的生存模型:用同一个基因生成很多的实例,每个有不 同的变化,让他们面对自然的挑战,洗刷无效的策略和基因,最终得到一个最好的族群。
什么样的族群可以在打磨中吸取最多的优秀实践,这个族群就会在这场淘汰赛中胜出。那 些闭着眼睛一心守在自己定义的名称空间中的,一心守着一个策略不变的,无论投入多少 资源,都 会死无葬身之地。
所以,我们要得到一个好的架构,或者说软件,本质要保证3个事情:
展开分支序列,让自己不是只有一条命
在维护每个分支的过程中,谨守居善地,心善渊,与善仁,言善信,正善治,事善能, 动善时的策略(这个策略后面用专门的篇章讲),让这个基因的族群可以受到最多的实 际场景的打磨,这些打磨才会让你的架构成长起来。
有意识地把优秀的基因演进收入到种子分支(所谓主线分支)上。这个动作感觉挺不自 然的,但暂时我找不到更好的手段,因为不做这个收入的动作,投资不起。其实也许这 个动作也是自然的,每个族群都会组织成一个金字塔结构,用更多人的劳动去温养少数 的精英来作为族群整体的头脑。完全各自为战的策略,也许只会得到很多知乎上的人们 说的“民粹”,大家都说上两嘴,实际根本没有方向。