第3章 微服务解决方案

服务化有很多的实现方式,早期的SOA方式因为水平拆分显得太臃肿、ESB服务总线过于重量级、技术栈固定等问题,在微服务流行后很快就被淘汰出了主流方案。当然,微服务也可以看成是当前服务化发展过程中的一个高级形式,其大部分的建设思路都是从前文中的服务化思路演进而来的。

DDD的系统设计方法正好可以解决微服务边界确定难的问题,微服务就是DDD设计方法最好的落地实践。中台的业务部分需要的是全域共享复用,正好与微服务的领域建模相契合,进而业务中台的建设自然可以使用微服务来实现。

微服务平台建立的难点在于微服务的拆分,单体应用服务拼装成的微服务不能发挥微服务的真正优势,这也是本书认为微服务是服务化进程的高级形式的原因。单体拼装显得单体过于独立,而微服务强调的是物理相对分离、逻辑相对不分离。

从业务单元角度来看,DDD中的一个聚合可以构成一个最小粒度的微服务,但在系统建设初期,本着“能不分就不分”“尽量少拆分”的原则,应该以一个限界上下文作为分隔微服务的“黄金标准”。当然,理想的情况是一次性分拆到位,一个子域对应一个限界上下文,这个限界上下文中只有一个聚合。但是业务往往是复杂多变的,微服务拆分很少能够一次就拆分到位,在系统演进的过程中,微服务也是不断进行调整的,不过这个调整的次数当然是越少越好。

主流的基于Java语言的微服务技术架构基本上呈现出了平分天下的态势,一个是基于原生RPC框架的Apache Dubbo生态,另一个是依托Spring框架的Spring Cloud生态。