可落地的DDD(3)-如何利用DDD进行微服务的划分

摘要

前面两篇介绍了DDD的目标管理、DDD的工程结构调整。这篇讨论微服务的划分。微服务是目前后端比较流行的架构体系了,那么如何做好一个微服务的划分?一个微服务的粒度应该是多大呢?这篇主要介绍如何结合DDD进行领域划分。

工程结构代码

上篇介绍了可落地的DDD的(2)-为什么说MVC工程架构已经过时
很多朋友留言说,有没有sample code,要不然太湿了,不是很明白。这里写了个sample。

就以一个博客网站为例
page1:博客列表页: 展示所有用户发表的博客

page2: 个人介绍页:有个人简介和博客列表

page3:博客详情页.

不同的业务展示的用户/博客的字段不一致

建模


后期应该会有用户和博客交互的需求。这期只有用户创建博客这层关联关系。

MVC架构

使用mvc模式写出来的代码,就是一路到底。
具体代码见mvc-structure

DDD

使用DDD写出来的工程结构就是,blog和user的交互只有一个地方,OpenXXXService
具体代码见DDD structure

MVC VS DDD

从两张依赖图可以看出,DDD的依赖图清晰了,user和blog这两个领域之间的交互变的清晰了,user这个领域不用管blog领域发生了什么变更。只依赖OpenBlogService,而MVC模式呢,user和blog之间的交互太多了,如果再增加其他功能,这些模块之间就是够筹交错,理不清楚。

不同领域之间的交互多了,意味着一旦发生变更,需要修改逻辑了,那么需要修改的地方就是几何倍数的相关类。

比如业务发生了变更,统计【个人中心】的博客计数是用户已发表的文章。而这个已发表的可能随着业务的发展,包含多重含义

  1. 用户写完了,对外开放了,
  2. 运营审核通过
  3. 博客未被软删除的。
    这些逻辑都会影响相关的查询,而这些逻辑的实现可能在数据库层面做,可能在redis中做,或者其他的方式。以MVC的写法,需要的需要修改的地方很多,以DDD的方式,不管这个逻辑怎么变,其他领域不需要知道,只有blog领域知道,只用更改blog领域的代码。

微服务划分

初版

确定了以DDD作为我们领域划分的指导原则后,我们首先按照领域对我们的业务进行了全面的分析,区分出哪些领域。然后按照如下标准进行了微服务的拆分

  1. 一个领域一个服务的规则去拆分,
  2. 同时为了保证领域的纯洁性,我们区分了领域服务,和前台服务。领域服务就是领域逻辑,不直接对前端暴露。前台服务组装各个领域服务,暴露给前端。
  3. 同时为了保持扩展,我们预留了一个微服务作为服务孵化器。对于领域不清晰的(比如大部分的新的业务),放在这个服务里面孵化,然后等领域足够大的时候再拆分出去。

如下图

前台应用:
pc: pc端的页面展示
mobile: 移动端的页面展示
mini:小程序的页面展示

领域服务:
blog: 博客领域
user: 用户领域
growth: 领域孵化器

按照这样的标准去拆分后,一段时间后,很多问题暴露了。

  • 服务热点问题
    我们是一个新的业务,在业务迭代的过程中,大部分新需求都是领域不清晰,不知道能不能迭代下去的。所以按照之前的标准,都往growth服务里面去写代码,这样导致几乎团队里面的所有的人都在开发这一个项目,失去了拆分微服务的意义。
  • 服务依赖太严重
    无论写什么需求,都需要写多个应用,领域服务1个,前台如果有pc,需要在pc服务上开发,移动端要展示,要在mobile服务开发。服务之间的调用需要写rpc client接口,需要发版本,因为同时开发的人多,经常发生版本混乱,依赖问题。服务上线也很头疼,改一个小需求,需要部署多个服务。微服务一个很重要的点是去耦合,可独立部署。多了一层UI层作为微服务显然不是很合适。
  • 领域划分有问题
    一个领域一个服务,粒度太小,有些东西不知道放在哪个服务里面,比如用户收藏博客,是放在用户服务里面,还是放在博客领域呢。

如何解决

不拆分单体应用不知道,一拆分问题一大堆。那么我们是怎么解决的呢?下期再见。

相关阅读
可落地的DDD(1)-目标讨论
可落地的DDD的(2)-为什么说MVC工程架构已经过时

关注【方丈的寺院】,第一时间收到文章的更新,与方丈一起开始技术修行之路

原文地址:https://www.cnblogs.com/stoneFang/p/10952658.html

时间: 2024-11-04 04:16:16

可落地的DDD(3)-如何利用DDD进行微服务的划分的相关文章

可落地的DDD(4)-如何利用DDD进行微服务的划分(2)

摘要 在前面一篇介绍了如何通过DDD的思想,来调整单体服务内的工程结构,为微服务的拆分做准备.同时介绍了我们在进行微服务拆分的时候踩过的一些坑. 这篇介绍下我们最终的方案,不一定对,欢迎留言讨论. 微服务划分 问题分析 上篇介绍过我们一开始的服务划分标准 一个领域一个服务的规则去拆分, 同时为了保证领域的纯洁性,我们区分了领域服务,和前台服务.领域服务就是领域逻辑,不直接对前端暴露.前台服务组装各个领域服务,暴露给前端. 同时为了保持扩展,我们预留了一个微服务作为服务孵化器.对于领域不清晰的(比

DDD~概念中的DDD(转)

概念中的DDD DDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略和类型划分.领域模型是领域驱动的核心 ,采用DDD的设计思想,业务逻辑不再集中在几个大型的类上,而是在大量相对小的领域对象上,这些类具有自己的状态和行为,每个类都是完成的独立的,并与现实领域的业务对象形成一种映射.基于DDD的架构设计,保证了系统的可维护性,扩展性和敏捷性,在处理复杂业务逻辑方面有着

DDD峰会归来话DDD

一场大戏落幕,首届DDD中国峰会如大会主题色一般的红.或许在12月9日这一天,全中国的DDD粉丝大约有一半都汇聚在了国家会议中心.听起来是幸,其实是不幸,因为DDD在中国的人群基数实在是太少了. 因为要负责大会的其中一个Track,期间又要接受采访,另外还有朋友到访,所以除了前面的两个keynote以及我自己的session(这是当然的),我没有完整听完一个session.然而单单是和DDD大咖.专家与爱好者们交谈,已经受益匪浅了.参会归来,关于DDD的idea产生了许多,我觉得有必要和DDD谈

NET实现的DDD、CQRS与微服务架构

WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例 最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例,并结合领域驱动设计(DDD)以及命令查询职责分离(CQRS)体系结构模式,对事件驱动的微服务系统架构进行了一些实战性的探索.现将自己的思考和收获整理成文,分享给大家. 微服务架构 在介绍源代码之前,我还

DDD学习笔录——简介DDD的战术模式、问题空间和解空间

DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于问题域而言的. DDD问题空间的影响在于揭示什么是重要的以及在何处付出努力. 解空间 DDD解方面的内容涵盖了可以影响应用程序架构发展并让其更易于管理的模式.

【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText.文章发出后反响很好,也很感谢大家的关注.在本文中我将介绍如何在Ubuntu 14.04.4 LTS中运行WeText项目的服务端. 为跨平台而生 从一开始的设计,我就把WeText的服务端跨平台纳入了实践目标,因此,所选择的框架

从壹开始微服务 [ DDD ] 之八 ║剪不断理还乱的 值对象和Dto

缘起 哈喽大家周四好,时间是过的真快,这几天一直忙着在公司的项目,然后带带新人,眼看这周要过去了,还是要抽出时间学习学习,这些天看到群里的小伙伴也都在忙着新学习,还是很开心的,至少当时的初衷已经达到了,一起学习一起进步嘛,哪怕是对现在或者是对以后的工作有一丢丢的帮助,也是不枉此时的努力,哈哈夜里写文章总是容易多想,好啦,废话不多说,上次咱们说到了<从壹开始微服务 [ DDD ] 之七 ║项目第一次实现 & CQRS初探>,今天本来应该接着写 领域命令 了,在设计的领域命令的时候,发现了

微服务落地,我们在考虑什么?

导读 微服务已经成为过去几年软件架构设计的“事实标准”,大多数企业在推动内部数字化转型的过程中,服务软件系统开始由单一或者SOA服务向微服务转型.那么转型过程需要遵循哪些原则呢?本文结合过往博云微服务落地实践经验,分享微服务落地实践的过程中思考. 目前当技术人员提及微服务的时候,首先想到的是Spring Cloud.Dubbo等实现服务的技术框架.这在我们采用微服务的初期阶段是最先考虑的因素.可是随着服务化的进行,我们并没有享受到由框架的便利性与快捷性所带来的业务突飞猛进的成就感.恰恰相反,过多

落地微服务之前,先想想你的团队结构是否合理!

2016-10-18 王昕 译 聊聊架构 有关微服务的技术Docker火热起来之后也进一步升温.一般来说,IT业界,尤其是工程师们更加关心国外专家的技术文章.但事实上,对于软件项目成功与否来说,往往是企业中人的因素决定结果,企业文化因素决定结果,对于微服务架构,则更是如此:因为微服务的分割是从企业业务开始,而不是从软件技术开始.本文由轻元科技首席架构师王昕翻译,如有疑问,欢迎留言讨论. 似乎每过五到十年,在软件行业,特别是企业集成或者是企业应用领域,就会出现一些新的方法论或架构方式,声称能够让你