互联网的业务千差万别,不同的业务分解下来有不同的系统,所以业务层没有办法提炼一些公共的系统或者组件。抛开业务上的差异,各个互联网业务发展最终面临的问题都是类似的:业务复杂度越来越高。也就是说,业务层面临的主要技术挑战就是复杂度。

复杂度越来越高的一个主要原因就是系统越来余越庞大业务越来越多。幸运的是面对业务层的技术挑战,有一把屠龙宝刀,不管什么业务难题,遇上“屠龙宝刀”都可迎刃而解。这把“屠龙宝刀”就是“拆”,化整为零,分而治之,将整体复杂性分散到多个子业务或者子系统里面去。

以一个简单的电商系统为例,如下:

互联网架构模板,“业务层”技术_复杂度


随着子系统越来越多,如果达到几百上千,另外一个复杂度问题又会凸现出来:子系统数量太多,已经没有人能够说清楚业务的调用流程了,出了问题排查也会特别复杂。此时应该怎么处理呢,最终答案还是“合”,正所谓“合久必分,分久必合”。合的方式又不一样,此时按照“高内聚,低耦合”的原则,将职责关联比较强的子系统合成一个虚拟业务域。然后通过网关对外呈现。类似于设计模式中的Facade模式。同样以电商为样例,采用虚拟业务域后,其架构如下:

互联网架构模板,“业务层”技术_高内聚_02

  • 高内聚就是把多个服务合为一个域,一般也不宜太多,最好的数量是5+1=-2。
  • 上面的网关与我们平时理解的不同,是服务内部用的网关。