Fork me on GitHub

架构拆分原理解析

原创: 王概凯

⼀个⽣命周期过程为什么可以做架构拆分︖架构拆分时需要有什么前提条件吗︖对于这些问题很多⼈比较迷茫。本⽂尝试描述作者对架构拆分原理的理解,不⼀定正确,请各位读者指正。

为什么可以进行架构拆分

先来看看⼀个主体⽣命周期的内部活动。这些⽣命周期活动都有⼀个很明确的特征:前⼀个活动的结果是下⼀个活动的起始条件。既然前⼀个活动的产出是下⼀个活动的起始条件,那么也意味着前⼀活动已经结束,下⼀个活动也就和上⼀个活动天然的没有任何耦合,保证了每个活动本身是内聚的,因此每个连续的活动都存在拆分的可能。同时,既然是同⼀个主体的⽣命周期活动,这也意味着不同活动之间有事物在空间上进⾏传递。反过来,为什么这些活动组成了⼀个事物的⽣命周期︖这是因为这些活动都是围绕着同⼀个事物进⾏加⼯,因此推进了这个事物的向前发展,所体现的是时间对这个事物的作⽤。

那么为什么可以把⼀个主体上的不同⽣命周期活动拆分出来︖有前⾯的不耦合的前提还不⾜以能形成拆分,我们还需要识别不同活动中所传递的事物与执⾏活动的主体之间的关系。如果某个活动中所传递的事物不是执⾏该活动主体的⾃身,那么该活动属于其主体非核⼼⽣命周期活动,是可以拆分出来的。

以⼈吃⽶饭为例,为什么吃饭是⼈的核⼼⽣命周期活动呢︖吃⽶饭的活动,是以⽶饭为输入,并且把⽶饭消化后转换为⼈的能量的过程。⼀餐⼀餐的吃饭是按顺序发⽣的,每⼀餐之间传递的是⼈这个形体。这个形体的维持就来源于吃饭后所消耗的能量,⽽且下⼀餐吃饭并消化的活动所需要的能量,来源于上⼀餐消化的结果所产⽣的能量。所以,只要⼀个活动中传递的是该执⾏活动的主体⾃身,那么这个活动就是该活动执⾏者的核⼼⽣命周期活动。那么吃饭与吃饭之间所传递和保持的是吃饭的⼈⾃⼰本身,因此,吃饭是⼈的核⼼⽣命周期,不可以拆分出去。

为什么⼈吃饭和产⽣⽶饭可以拆分开来呢︖⾸先是因为这是连续的两个步骤,前⼀个步骤即产⽣饭的结果是后⼀个步骤即吃饭的输入。产⽣饭的结果出来后,产⽣饭的⽣命周期已经结束,所以产⽣饭和吃饭两个⽣命周期没有耦合,因此存在拆分的可能性。其次,⼈类执⾏产⽣饭的⽣命周期过程中所传递的事物是⼤⽶,不是执⾏产⽣饭的⼈类本身,因此这个活动属于⼈类的非核⼼⽣命周期,因此产⽣饭的活动才可以从⼈的⽣命周期活动中独⽴出来,分⼯给其他⼈执⾏。

同时,这两个步骤中的任何⼀个步骤本身,都有⼀个确定的起点和终点,这个步骤推进的⽬的就是为了达到该步骤终点时所产⽣的输出,也可以认为该步骤产⽣了⼀个果实。因此,每⼀个步骤本身也都是⼀个独⽴的⽣命周期,所以每⼀个步骤本身也是内聚的,有其⾃身的业务过程和⽬标,所以每⼀个步骤被拆分出来后,也是可以独⽴存在的。

既然每⼀个步骤本身都是⽣命周期,那么⾃然有其⾃身的⽣命周期活动来推进其⽣命周期。也就是说,当这个步骤被拆分出来后,这个步骤也可以进⼀步的根据其⾃身的步骤进⾏拆分,产⽣下⼀级别的⼦⽣命周期,形成其⾃身的架构树。

同时,每⼀个级别的拆分,也都要技术的帮助来完成拆分的落地和实现。如果缺乏拆分的技术,那么这个拆分就是当前技术⽔平下的最终节点了,无法再进⼀步往下拆分。

比如前述吃饭的例⼦中,⼈类吃饭分为产⽣⽶饭和吃⽶饭两个步骤。那么第⼀个步骤是产⽣⽶饭,其⽬的是形成⽩⽶饭,所以这个步骤本身也是⼀个⽣命周期。为达到形成⽩⽶饭这个⽬的,则需要经历稻⾕的种植、收获、制作⼤⽶、烧制的这⼀过程,才能够形成⽶饭,这是产⽣⽶饭的⽣命周期活动程序。这些活动也必须要按照时间顺序⼀步⼀步的发⽣,前⼀活动的结果为后⼀活动的输入。⽽执⾏这些活动的主体是⼈类,这些活动中所传递的事物是⼤⽶,因此这些活动属于⼤⽶的核⼼⽣命周期,可以在⼈类⽣命周期活动中拆分出来形成分⼯。

同样,还继续可以进⾏下⼀级别的拆分,比如烧制⽶饭也可以进⼀步进⾏拆分,因为烧制⽶饭需要燃料,先有燃料才能够烧制⽶饭,因此可以拆分为⽶饭烧制和燃料的产⽣,就形成了燃料的⽣产⽣命周期。⽽燃料的⽣产⽣命周期过程中传递的是燃料本身,所以燃料的⽣产也可以进⾏拆分,进⼀步形成⼈类的分⼯。

这样不断拆分下去,⼈类的⼀个很基本的⽣命周期活动“吃饭”,就形成了⼀个非常庞⼤的产业。拓展开来从整个社会来看,⼀个社会的⽣产为什么往往可以分为吃、穿、住、⾏、医疗等⼏⼤⾏业︖⼀个国家为什么要保障吃穿、住、⾏、医疗等⾏业︖并且这些⾏业在整个社会的占比非常⼤︖因为这些⾏业本身就是为了满⾜⼈类核⼼⽣命周期活动,是每个⼈的核⼼⽣命周期活动进⾏架构拆分所形成的。这些核⼼⽣命周期的活动本身不会因为拆分⽽发⽣变化,但是拆分可以使得这些核⼼⽣命周期活动的效率得到提升,缩短⼈们完成这些核⼼⽣命周期所需的时间,提升每个⼈的⽣命质量。

架构拆分的原理

因此我们可以得到⼀个结论:在⼀个主体上连续发⽣的活动步骤,在空间上确保了两个步骤之间的业务不耦合,⽽只有不耦合才能拆分︔不同步骤间传递的事物是否是执⾏该步骤的主体⾃身,决定了该步骤是否属于执⾏该步骤主体的核⼼⽣命周期活动。如果某个步骤传递的不是执⾏该步骤主体的⾃身,则该步骤是执⾏该步骤主体的非核⼼⽣命周期,那么就可以拆分。如果两者同时满⾜,这个步骤⼀定可以从其执⾏主体拆分出去。

⽽且对于⼀个主体不同的步骤进⾏拆分时,该主体最少有⼀个步骤所传递的是执⾏这个步骤主体的⾃身、也就是说该主体最少有⼀个核⼼⽣命周期活动,以访问并组合拆分出去的每个步骤来得到最终结果,以确保这些拆分可以组合并完成拆分前的原有⽣命周期,这⼀特征也形成了访问⽣命周期。这⼀特征确保了原主体可以从拆分中得利,也确保了拆分后原主体的整体业务不会发⽣变化。也可以看出来,架构拆分和访问⽣命周期是⼀对双⽣兄弟,⼀个的出现必然会导致另⼀个的出现。

同时,拆分出来的每个步骤本身也是在传递某个事物的,也有其⾃身的步骤,于是也符合架构拆分的条件,可以继续重复前⾯的拆分过程。如此循环下去,⼀个主体的⽣命周期从初始不同的连续多个步骤,逐渐长成了⼀颗架构树。这是不是很像⼀个种⼦发育成⼀棵树的过程︖所有的架构拆分都是树的长⼤,其最早的来源就是⼀颗种⼦,但是这颗最初的种⼦具备了拆分的所有要素。

由此也可以看出,为什么可以拆分,是因为不同主体所占的空间不同的缘故,可以分离。⽽某主体⾃身的连续步骤,则是该主体在其独占空间上的连续变化,反应出来也就是时间。

但是要拆分出去,就必须要确保能够组合回来。⽽组合回来的⽅式,就是去获取拆分后所执⾏的结果,也就是访问。没有访问的达成,拆分就失去意义了,因为无法组合回来。⽽访问的达成,就必须要有⼀个访问者,⼀个空间的通道,⼀个访问的⽬标。看到这⾥可以发现,这⾥有点类似于量⼦物理中观察者与被观察者的关系。我们研究⼀个事物的时候,不能够仅仅从被观察的物体⾃身的角度,因为观察本身是需要观察者访问物体的,⽽观察时需要通过光来达成访问,使得观察者和被观察者形成⼀个整体,所以观察时必须同时考虑光的介入对被观察物体的影响。细节在这⾥就不展开。在软件⾏业,访问通道这⼀部分就与唯物学者很难理解量⼦物理类似,很多⼈忽略了访问对事物内聚的影响,影响了事物内聚的达成。因此⼤家要理解,必须要把被访问的⽬标事物通过空间的通道传递到访问者才能够达成访问。⽽这个访问过程就在不同步骤之间传递事物,也就是该事物在空间上所进⾏的跨越。

前⼀个连续执⾏步骤在空间上为什么可以分离,是由于时间的推进, 确保了连续的两个步骤在空间上没有耦合,保证了每个步骤本身是内聚的,能够独占空间,有了拆分的前提︔后⼀个空间访问的分离,则是由于事物在空间上传递,使得做空间拆分成为了可能。

因此,我们可以这么得出结论:所有的架构拆分本质上都是空间的拆分

⽽空间上拆分的结果,都是形成树状的结构。这是因为事物具有对物理空间独占的特性,比如同⼀个物理空间只能够存在⼀座房⼦,两座不同的房⼦必须占⽤各⾃不同的空间。

既然事物的连续的步骤其实就是⼀个事物的⽣命周期过程,那么这个过程其实就是⼀个在时间上的管道 (Pipeline),其中流动并推进的就是这个事物本身的变化,该管道的不同阶段的活动就是这个事物不同的核⼼⽣命周期活动。这个从头到尾的整个管道全体,就是这个事物的核⼼⽣命周期。⽽事物在空间上的传递,则体现的是事物在空间位置上的变化,通过跨越空间把事物传递到事物的访问者,这形成的是空间上的⼀个管道 (Pipeline)。这个从头到尾的整个访问管道全体,就是访问者访问这个事物的访问⽣命周期。某事物的连续步骤、也就是其核⼼⽣命周期活动中所传递的,是事物的⾃身,这⼀性质,我们称之为事物的内聚。⽽事物在空间上到达访问者的传递,是在空间上位置变化的活动过程,我们称之为访问⽣命周期。⽽由于事物在空间上传递时对空间的独占性质,我们称之为事物访问⽣命周期的内聚。也可以看到,事物的访问⽣命周期也是内聚的,传递的是这个事物本身。

因此,架构的核⼼原则就是内聚。这个内聚,包括事物本身的内聚,以及对其访问通道的内聚。内聚是由架构拆分本身的原理决定的,由事物占有物理空间的性质来决定。换个角度来理解,⼀⽅⾯事物必须要独占确定的物理空间以维持事物本身的持续存在,另⼀⽅⾯,事物在空间中移动时,也要维持事物本身的状态,以保持事物本身的持续存在。

主体执⾏事物⽣命周期活动过程中某些步骤在空间上的拆分,使得主体在空间上执⾏该步骤所花的时间得以缩短,这⼀拆分也体现了⼈类怎么利⽤空间的拆分来减少在空间上连续变化所需的时间,这⼀拆分减⼩了时间对⼈的影响。做架构的时间久了,就会发现时间的重要性,因为⼈们总是时间不够⽤,⽽架构拆分正是每⼀个⼈都可以入⼿改进⾃身⽣活品质的地⽅。掌握了这个原理,每个⼈都可以去观察并实践。慢慢我们也可以体会到,这个拆分在现实⽣活中随处可见。虽然⼈们不⼀定明⽩这个原理,可是⼈类在社会实践中,都在不知不觉地使⽤着。

在软件⾏业流⾏⼀个说法,所谓“没有银弹”(No Silver Bullet) 。这⼀说法来源于 Fred Brooks 的⼀篇论⽂,“No Silver Bullet – Essence and Accident in Software Engineering”,他说,“there is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity”,意思是说,软件开发中没有任何⼀个在技术或者管理技巧上的进展,⼗年内可以在⽣产率、可靠性、简洁性上保证⼗倍的提升。可是在软件开发之外的社会实践中,⼗年内⼗倍进展的例⼦比比皆是,为什么呢︖这就是架构拆分的原因,只是⼈们没意识到罢了。因为架构拆分可以保证在原有流程不变的情况下,在保证内聚的前提下,把这个流程拆分为⼀个架构树,进⾏⼤规模分⼯,并完成原有流程。因为保证了内聚,因此复杂度不变,可靠性不变,提升了原有流程的效率。也就是说,软件开发中的“银弹”是存在的,架构就是“银弹”

什么情况下不可以进行架构拆分

为什么稻⾕的⽣长周期不能够进⾏架构拆分呢︖因为稻⾕是稻的种⼦,其产⽣的过程是稻⾃身从⼤地吸收能量并逐渐成熟的过程,与⼤地⼀体,是稻⾃身的核⼼⽣命周期。稻的⽣命周期活动中所传递的是稻⾃身,无法通过⼈类的⽣命周期活动分⼯来加速稻种⼦的成熟过程。也就是说,不能够“拔苗助长”,也不能够把稻种⼦的两个⽉成熟时间,通过多种⼀倍的数量,缩短为⼀个⽉︔就和⼈⼀样,无法通过增加⼗个孕妇,把⼈的⼗⽉怀胎缩短为⼀个⽉。因为在⽣长的⽣命周期活动的过程中,稻传递的是⾃身、不是稻⾕,⾃身在空间上不可分割,是⼀个整体︔孕妇传递的也是⾃身的增长、不是婴⼉,⾃身在空间上不可分割,也是⼀个整体。直到稻⾕成熟、胎⼉发育完成,稻⾕和胎⼉才能够脱离母体,以独⽴的形式存在。每个事物只有在形成新的个体后,才能够进⾏⼈类的分⼯来提升⼈类⾃身的⽣命周期活动的效率。也就是说,所有⽣命的⾃身核⼼⽣命周期所传递的都是⾃身,是⼀个整体,是不可以在空间上进⾏架构拆分的。

⽽作为稻⾕⾃身,要么成为⼀个种⼦,通过⽣根发芽⽣成新的稻,⽣出新的稻⾕,完成⾃⼰的⽣命周期︔或者被⼈类加⼯煮熟、或者被其他动物直接食⽤,转变为⼈类和动物所需要的能量。这两种都是稻⾕本身的核⼼性质,也是稻⾕本身的核⼼⽣周期活动,传递的是其⾃身,都是不能通过分⼯来替代的,否则也就无法称之为稻⾕了。

可是在⼈类的早期还没有发明“交易”技术的时候,每个⼈必须⾃⾏在⾃然界获取食物,这个时候⼈们⼤多是农民或者猎⼈,此时获取食物也是⼈类的核⼼⽣命周期呀︖是的,在没有“交易”的时候,还没有产⽣分⼯,是不存在⼈类的架构的,每个⼈独⽴完成⽣存的整个流程,还不存在架构的分拆。此时⼈类社会还处于⼀个种⼦的状态,还未开始发芽,⼈类的这些⾏为属于该种⼦的核⼼⽣命周期。但是随着交易技术的出现,慢慢的⼈类核⼼⽣命周期回归到了以⼈类的身体为边界,因为⼈的身体是⼀个天然的边界,是⼈独占⼀个空间的基本单位,基本上除了维持身体⽣存之外的⼯作都可以分⼯出去了,因⽽形成了⼈类社会,⼈通过访问⼈类社会的分⼯⽽得以完成⾃身的⽣命周期。⽽此时⼈类⽣存的整个流程并没发⽣改变,还是原来的流程,可是这个流程运作的更加⾼效了。因此,交易是⼀个非常重要且关键的技术,确保了可以把拆分后的流程组装形成原有的流程。这其实就是访问技术,确保了架构的实现。

但是我们要注意,这个不可进⾏架构拆分的核⼼⽣命周期范围,随着⽣命、科学等技术的进步会发⽣变化。技术越进步,那么⼀些核⼼⽣命周期活动会逐渐的变成非核⼼⽣命周期活动,核⼼⽣命周期的范围会逐渐的缩⼩。比如随着技术的进步,身体的边界也会逐渐地缩⼩。比如由于医疗技术的进步,剖腹产⽤来替代产妇的⾃然⽣产,那么⾃然⽣产这⼀核⼼⽣命周期就发⽣了拆分,⾃然⽣产所需要的时间也可以缩短,婴⼉也不⼀定要在母亲身体内呆⾜⼗个⽉,等等等等。

架构拆分的意义

那么为什么稻、树等植物不可以互相通过分⼯来提升效率呢︖这个话题就有意思了。⾸先稻、树可以形成⾃身结构的分⼯来提升效率,比如形成叶⼦获取阳光,形成根来获取⼤地的养分。但是它们无法主动的形成植物之间相互的分⼯,因为植物是没有意识的,⽽动物是有意识的,⽤佛家的话说就是“无情”和“有情”的区别。但是植物可以通过形成花粉或种⼦,通过⾃然界的空间变化如风等、或通过为动物提供食物等的被动的⽅式来延续它们的传播,从⽽形成⽣态链。只有有意识的⽣物才可能主动形成互相的分⼯合作,有意识的形成空间的架构拆分,形成群居。比如蚂蚁,⼤雁等动物,他们就是典型的群体性动物。很多⼈对它们所形成的⼤规模⼀致性的群体活动无法理解,比如⼤雁的群飞,蚂蚁的分⼯,认为这些⾏为很复杂、很神奇。其实如果去研究它们的架构拆分,就会发现很多有意思的东西,背后的原因⼀点都不复杂。

再往⼤的地⽅说,⼈类必须要从⾃然界获取食物才能够得以⽣存,这正是对⾃然界的⼀个访问。从前⾯的讨论可以知道,有访问的存在就必定有架构的拆分,因此,⼈类不过是⾃然界的⼀个分⼯。也因此可以看到,⼈类和⾃然界原本是⼀个整体。其实从任何⼀个事物的分⼯中,都可以关联访问到整个世界的全体,通过访问⽽形成该事物的⾃身,因为任何⼀个事物都无法脱离这个世界⽽独⽴存在。佛家云:“⼀花⼀世界,⼀叶⼀菩提”,猜想就是这个意思,从形成⼀朵花⽽开始的访问,可以遍及整个世界,因此任何⼀个事物都包含了整个世界。可见,古⼈对世界的认识是多么的深刻。

架构拆分的进一步运用

通过前述的分析可以发现,事物的核⼼⽣命周期是⼀个时间的管道,事物的访问⽣命周期是⼀个空间的管道。既然是管道,那么就有管道独有的性质。在管道上,我们可以加入不同的新活动,只要符合这个管道的特性,可以连接上下,并可以让这个事物本身通过即可。于是,我们就可以利⽤这个性质⾃⾏进⾏事物⽣命周期的架构拆分。架构拆分的过程类似于管道的管理,相当于把管道切开,在中间增加⼀个处理,再通过这个增加的部分把切断的管道连接起来,重新形成整体。比如把⽔管切开,在中间加入过滤器或加入加热设施后再重新组合管道,等等。

并且我们不但可以按照事情原本的的步骤进⾏拆分,还可以在不违反⽣命周期活动时间推进过程的前提下,⾃⾏增加所需要的步骤,以达到不同的⽬的,也就是说,可以增加⼀个原来并不存在的步骤,形成⼀个⾃然界不存在的事物。在任何⼀个业务中,我们可以在⼀个连续的过程中根据需要插入⼀个中间过程,传递原有事物的同时加入我们⾃⼰所需要的效果,⽽不影响整个⽣命周期的完成。比如在种植⼤⽶和制作⽶饭之间,我们可以⾃⾏加入其他的食物,只要这个新加入的⽣命周期仍然满⾜制作⽶饭的输入条件即可。比如在⼤⽶中加入新的材料,如⼤枣、核桃等,这就形成了不同⼜味的⽶饭,这也拆分出来了⼀个新的分⼯。再比如对开关门的改造,可以在开、关门的⽣命周期活动之间加入不同的装置,比如加入⾃动关门装置来保证门始终是关闭的,或加入缓关装置防⽌夹⼿,或加入定时装置以提醒关门,增加安全性,等等等等。

也就是说,架构不但可以⽤来分⼯,还可以⽤来改造⾃然界。当然,⽤架构改造⾃然界的过程中,也必然会导致分⼯的变化。

通过对架构拆分的分析来理解现实

理解了架构拆分,对于我们来理解这个社会的运作也是非常有帮助的。比如就认识公司来说,⼀个公司就好比是⼀个⼈,也需要吃饭,需要吸收能量,并且能够把吸收的能量转换为公司的输出。⼀个公司的订单的达成就好比是⼈要吃饭,需要通过现⾦流来吸收能量维持⽣存。在养活公司这个实体的同时,再通过现⾦流来推进公司的各部门的运作,不断的形成产品,不断的完成这个公司⾃身的社会分⼯。理解了这个,⼈们就可以理解⾃⼰在所在部门的角⾊是什么,所在部门在公司的角⾊是什么,就可以把握好⾃⼰的定位。⽽这个公司的本身,则是整个社会⼤分⼯中的⼀个节点,理解了这个,就可以理解⾃⼰所在公司在整个社会中的定位,扮演的是什么角⾊。

许多⼈会说,我要理解那么多⼲什么呢︖我只不过是扮演⼀个螺丝钉罢了,我⼀个打⼯的不需要操⽼板的⼼。听起来似乎很有道理,但是在分⼯层⾯,⽼板和员⼯并无本质的区别,只是分⼯角⾊不同⽽已。另⼀⽅⾯,哪怕是拧螺丝钉这⼀⼯作,在⼀个⽕箭⽣产企业和⼀个⾃⾏车⽣产企业也是不⼀样的,因为所在企业所⾯对的业务不⼀样。如果像在⾃⾏车上拧螺丝钉的态度来拧⽕箭的螺丝,那么结果肯定是不同的。只有理解了企业的分⼯,才可以理解⾃⼰的分⼯,才可以把⾃⼰的⼯作做好。

事实上,理解了各种不同的分⼯,才可以慢慢形成⾃⼰的思考,形成⾃⼰的判断,才可能⾃⾏通过不断的分⼯,让⾃⼰的每⼀分钟的产出越来越⾼,让⾃⼰的每⼀分钟越来越值钱。为什么有些⼈单位时间的⼯资那么⾼︖那是因为他们通过合理的架构拆分,缩短了⾃⼰⼯作所需的时间,可以在同⼀时间内创造出更多的财富。因为通过前述的架构拆分可以看到,架构的核⼼之⼀就在于缩短主体的⽣命周期活动所需的时间。古⼈云:“⼀⼨光阴⼀⼨⾦,⼨⾦难买⼨光阴”,既然有些⼈单位时间内创造的财富更多,当然他们的时间也就更值钱。因为每个⼈的每⼀分钟时间虽然都是⼀样的,但是每个⼈的每⼀分钟的价值是不⼀样的。

沿着这个思路也可以很容易可以发现,要认识⼀个公司,只要把这个公司的⽣命周期管道识别出来,就可以发现这个公司的核⼼⽣命周期,以及可以做哪些架构拆分︔只要把这个公司的⽤户访问⽣命周期识别出来,就可以理解这个公司访问通道的架构拆分。⽽⼀个公司的拆分,最终都要通过交易来组合起来,形成⼀个完整整体。通过这两⽅⾯的分析,就可以发现公司拆分的合理与不合理的地⽅。那么在这个公司⼯作,也就⾃然知道⾃⼰是在架构拆分的哪个节点,⾃⼰扮演什么角⾊,哪些事⾃⼰该做,哪些事⾃⼰不该做,这样就明⽩了⾃⼰的边界,也就可以把⼯作做的更好。


本文地址:https://www.6aiq.com/article/1544070593662
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出