为什么在做微服务设计的时候需要DDD?

记住之前在规划和规划微服务架构的时分,张队长给了我一个至今仍然回忆深化的提示:『你的规划蓝图里为什么没有看到DDD的影子呢?』

跟着对充血模型的范畴认知的加深,我越加感觉到DDD的重要性。可是DDD内容繁复,是不是要深化去了解呢,我觉得不用入坑太深,个人浅见,它最中心的一点便是针对贫血模型的缺乏而规划,把原先传统的贫血模型里的事务逻辑层拎出来,融入到Domain层,这样面临杂乱事务的规模化改变,咱们只需求专心于Domain即可。

回到主题,咱们要了解的是微服务和DDD到底有什么联系呢?

由于在互联网年代,软件所面临的问题域比以往要杂乱得多,这种杂乱性来源于不断扩展的问题域自身,也来源于立异改变,以及这种规模性添加所带来的应战。

可是一个人一个团队,他对杂乱的事物的认知是有极限的,面临这种杂乱问题仅有的办法便是分而治之。分首要考虑的是怎么去分;治意味着分出来的每一个部分要能够独立的运转,能够相互的协作,完结全体的方针,能够一来应对外部改变所带来的冲击。

微服务架构在分和治两个方面都给出了很好的理论辅导和最佳实践,那微服务是不是处理杂乱问题的银弹呢?其实不然,许多团队在使用了微服务架构来构建他们的体系今后,发现并没有彻底处理这种杂乱性问题,乃至还带来了一些其他的问题。比方:

从事务层面来看,微服务架构没有防止这种散弹式的修正。乃至反而加剧了他,这是为什么呢?一个重要的原因是微服务架构在分的这个纬度考虑的并不全面。

当咱们去做分的这种作业的时分,详细拆分详见我的别的一篇文章《微服务的拆分姿态》,需求考虑哪些维度呢?我觉得咱们至少要考虑三个维度:

微服务对第2个给出了很好的辅导,对第3个也给出了一些主张。可是,对第1个功用纬度只给出来十分有限的辅导,便是为什么跟着微服务的盛行,范畴驱动规划又被从头注重起来的原因。

DDD弥补了微服务在功用区分方面没有给出很好辅导的缺点。所以他们在面临杂乱问题和构建体系时分是一种互补的联系,在体系拆分的时分能够很好的协作。

仅仅他们看待体系拆分这个视点是不同的。微服务傍边的服务所重视的规模正是DDD所推重的六边形架构中的范畴层。

接下来结合DDD和微服务来拆分一个杂乱体系。

咱们称企业的事务规模和在这个规模里进行的活动为范畴,和软件体系无关。范畴会分红多个子域,比方咱们一个电商体系,会有:

在不同的子域里,不同的概念有不同的意义。所以咱们在进行范畴建模的时分,有必要要有一个明晰的范畴鸿沟,也便是DDD里称做的限界上下文,它是体系内部的一个架构鸿沟,决议了这个体系架构。

架构简练之道这本书里面就说过:『体系架构是由体系的内部架构鸿沟以及鸿沟之间的依靠联系所决议的,与体系中各个组件之间的通讯和调用的方法是无关的』。咱们常说的微服务的服务调用自身仅仅一种比函数调用方法本钱稍高的,切割使用程序行为的一种方式,体系架构无关。

所以,杂乱体系区分的榜首重要的是要区分内部的架构鸿沟,即区分清楚这个上下文,以及明晰他们之间的联系,这对应于咱们之前说的功用的维度。这正是DDD用武之处。其次咱们才考虑根据非功用的维度怎么区分,这是微服务能够发挥其优势的当地。

举个比方,咱们把体系分红ABC三个个上下文,三个上下文的代码能够在一个布置单元里运转,经过进程内调用来完结操作,这便是典型的单体架构;

也能够各安闲一个独立的布置单元里运转,经过长途调用来完结操作,这便是现在盛行的微服务架构。

咱们更多的是两种架构形式的一个混合,比方A和B一同是一个布置单元,C是别的一个独立的布置单元,这种状况往往是由于C十分重要,他并发的访问量十分大,或许它的需求改变比较频频。将C拆分出来的有以下几个优点:

这四点正是服务架构所重视的,它是根据非功用纬度的视角来看待拆分这件工作的,他重视的不是体系架构的逻辑鸿沟,更多的重视的是使用程序行为的分隔。

那为什么不把A和B都拆成一个独立的布置单元?

这会带来更多的优点,也会带来额定的本钱,架构应该是能够演进的,在事务开展的前期,应该重视体系架构的逻辑鸿沟,坚持逻辑鸿沟的明晰和联系的正确,跟着事务量的添加,逐渐在做拆分,这是组合使用DDD和微服务架构带来的最大的优点。

在单体架构中,坚持架构逻辑鸿沟不被打破是有必定难度。假如逻辑鸿沟不明晰,在需求服务器拆分的时分,就未必能拆得出来了。别的没有人一会儿就能够把逻辑鸿沟界说正确,即便这个上下文界说的不太正确,在DDD聚合根这个概念能够保证咱们能够演进出更适合的上下文。

DDD边界上下文内部经过实体和值目标来对范畴概念进行建模,一组实体和值子目标归属于一个聚合根。那按DDD要求:

有了聚合根,根据这些束缚,未来能够根据需求把聚合根晋级为上下文,乃至拆分红微服务都是比较简单的。

别的想要知道怎么合理的拆分微服务,能够参阅我的别的一篇文章《微服务区分的姿态》,今日就给你介绍到这儿,期望对你有所启示。

原文链接: https://www.cnblogs.com/jackyfei/p/12089123.html

Copyby 2020 Power by DedeCms