基于DDD的微服务架构设计
基于DDD的微服务架构设计
1. DDD摘要&概述
每个公司都希望研发的系统具备高扩展性,以便做产品和业务迭代时,成本降到最低,效率提到最高;当下流行的微服务架构、中台架构的目标都是在不同层面去解决扩展性的问题,然而无论采用什么架构思想,要提高扩展性,都需要直面模型设计的问题;领域驱动是当下为数不多提供了模型设计框架的一个方法论,能够帮助解决一部分设计的问题,但它也不是万金油,我们需要在正确的时机和场景下使用这个方法论,才能事半功倍。
中台化的建设路径上,主要分为烟囱化、服务化、平台化、中台化四个阶段,领域驱动主要在服务化的中后期和平台化阶段发挥作用,主要贡献是提供了顶层设计框架和常见问题的横向管控手段,在使用领域驱动过程中,我们也结合业务现状,补充了一些方法,配合领域驱动一起使用,取得了较好的效果。
实施效果也达到了预期,服务 / 平台边界更加清晰,维持了一个较好的领域抽象土壤,业务的 MVP 试错成本不断降低。
1.1 DDD是什么
DDD——>Domain Driven Design
Eric Evans《领域驱动设计》一书中就提到,领域模型绝不单单是领域专家头脑中的知识,
而是对这类知识严格的组织且有选择的抽象。
1.2 基于DDD设计
通常,可以将 DDD 的设计分为 " 战略设计 / 战术设计 / 技术实现 " 三个阶段。在这三个阶段里,开发者的参与的程度是递增的。其中,战略设计阶段,
是需要众多关键角色集中投入的协作设计过程,其产出结果的质量主要取决于业务专家等角色的知识、
经验和能力,以及他们的参与程度和对DDD战略设计的思想和工具的掌握程度。
而“战术设计阶段”是需要开发者深度参与的,最后的“技术实现阶段”则要完全由开发者来掌控。
1.3 基于DDD架构和实现
重新划分领域边界,提炼出业务的核心要素进行领域建模,并采用新的应用架构分层,
创新式的选用共享内核组件和防腐层相结合的方式,解决边界上下文问题,使得某一域在读写
分离的同时,又能以组件的形式共享内核。
2. DDD不能解决的问题&需要注意的问题
2.1 不能解决的问题
- 解决一小部分性能问题: 对象数,JVM内存极值,FullGC次数减少
- DDD不能解决大部分的性能优化问题,甚至大部分的场景,我们需要为性能优化去做反DDD设计
- DDD不能解决需求理解的问题
- DDD不能解决开发技术水平的问题
2.2 需要注意的问题
- DDD意识的培训
- 充裕的对设计模式的理解
- 老模块老办法,新模块新办法
- 持续迭代的过程
- 领域名词,动词分析:业务实体类,生命周期的封装,设计模式<测试模式>
- 很大程度上会造成性能的一部分退化,考虑性能需求,颗粒度划分细致会造成性能退化;解决思路:
单个对象聚合成一个集合去处理它
做一些更大颗粒度概念的聚合
- 合理的跨越划定我们的系统边界;技巧:
常用的是根据技术的背景去划定
- 模型翻译,专属工具沉淀
- 测试——单测&集成测试
重视单元测试——>service,entity层覆盖需90%,否则DDD优化后故障率会居高不下
重视集成测试——>实际逻辑分散。需尽早,多次集成,回归测试
3. 领域驱动与中台实践
3.1 业务架构的演变过程
烟囱——>服务化——>平台化——>中台化
业务开始阶段,就是大烟囱,业务扩展,逐渐服务化
服务化后:服务多且粒度细,不知道用哪个;公共逻辑无人管,交互越来越乱;重复造轮子;
沉淀,组合,聚合后 演变为平台
沟通成本高,逐渐演变为中台
3.2 领域驱动给的药方
- 战略设计
- 统一语言
术语词典
- 限界上下文
- 聚合根
- 框架设计
- 分层框架
1.http请求 ——>模型转换层:消息,定时任务
2.rpc请求——>业务流程层:公共流程,业务
3.核心服务层:领域服务,工具
4.基础数据层:领域模型,数据库
- CQRS
- 事件|行为编排
- 战术设计
- 值对象
- 资源库
- 领域服务
- 不能做什么
- 数据存储模型(商品的SPU—SKU模型)
- 单个具体行为的抽象(下单流程的抽象)
- 解决思路:知识+经验+模式(设计模式)
基于DDD的微服务架构设计相关推荐
- 如何基于DDD构建微服务架构
微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...
- 技术研究院005---如何基于DDD构建微服务架构
微服务构建本质上是软件构建过程中长期演进积累的一系列理念.架构原则.工具和最佳实践. 领域驱动设计的软件思想体系和方法论可以用于指导微服务建模.微服务划分.微服务架构设计等相关工作,它可以促使技术人员 ...
- 学霸君基于Docker的微服务架构设计
以下内容根据演讲PPT以及现场分享整理而成. 今天主要分享的是我们在实践微服务架构或者容器架构过程中踩过的坑,对于致力在容器技术方面进行探索的同学会有很大帮助.本次将站在整体的角度,分享如何去运维整个 ...
- 基于springCloud的微服务架构设计
Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...
- 中台架构与实现:基于ddd和微服务 下载_为什么在做微服务设计的时候需要DDD?...
记得之前在规划和设计微服务架构的时候,张队长给了我一个至今依然记忆深刻的提示:『你的设计蓝图里为什么没有看到DDD的影子呢?』 随着对充血模型的领域认知的加深,我越加感觉到DDD的重要性.但是DDD内 ...
- 基于实战开发垂直搜索引擎_基于DDD的微服务设计和开发实战
作者:欧创新.邓頔.文艺 你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务 ...
- ddd 访问权限_基于DDD的微服务设计和开发实战
作者:欧创新.邓頔.文艺 你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务 ...
- 读《中台架构与实现:基于DDD和微服务》有感
导读:我是带着问题来看这本书的,在看的过程中不断有茅塞顿开.原来如此的感觉,原来这个问题人家是这么解决的!原来这些问题大家都遇到过! 个人在IT这个行业工作有很多年了,所服务的企业都是书中所谓的传统企 ...
- DDD微服务架构设计第四课 微服务落地实践的技术中台
10 微服务落地的技术实践 如今,做一个优秀的程序员越来越难.激烈的市场竞争.互联网快速的迭代.软件系统规模化发展,无疑都大大增加了软件设计的难度.因此,对于架构师的能力要求也越来越高,就像我的一本书 ...
最新文章
- 交互式数据可视化-D3.js(一)
- Django 中的 cookie 和 session
- a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
- access建立两个字段唯一索引_数据库索引原理及优化
- C#经典名著:《C#入门经典》(第4版)
- activemq jdbc mysql_activeMQ JDBC Master Slave
- Java并发编程实战 第14章 构建自定义的同步工具
- Ubuntu下Memcache的安装与基本使用
- linux伙伴系统接口,Linux伙伴系统(一)--伙伴系统的概述
- Yarn报错:error Couldn‘t publish package: “https://registry。。。 Are you logged in as the correct user?“
- zblog php伪静态,zblogphp如何设置伪静态
- 如何在Windows Server 2016上配置iSCSI启动器
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
- Linux命令解释之rpm
- jQuery技术内幕:深入解析jQuery架构设计与实现原理1
- 哈希表(hash table)及其应用举例
- HDU 1312 Red and Black(最简单也是最经典的搜索)
- 【转】Horspool字符串匹配算法
- 洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)
- vue全家桶+element-UI
热门文章
- Python - 深刻理解Python中的元类(metaclass)
- SAP Marketing Cloud 功能概述(一)
- 【网络通信与信息安全】之深入解析TCP/IP协议的实现和原理
- 同济大学C++mooc 第三讲、第四讲
- 将负债清零的30岁男士理财规划 婚事不应过铺张
- matlab 回退到上一行,对乒乓球回滚的分析与MATLAB模拟-利用 Mathematica 模拟乒乓球滚动 - PS下...
- 代码规范工具-Checkstyle使用手册
- centos7永久关闭防火墙
- Apache HttpClient : Http Cookies
- Web应用国密改造方案