`
cywhoyi
  • 浏览: 420108 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于DDD的微服务架构设计

阅读更多

DDD领域驱动设计(DDD:Domain-Driven Design)

架构背景:

    现有的架构设计实在受不了,业务的反反复复地变化,导致代码圈复杂度之深让人恐惧。之前的微服务架构经验让我更加彻底点,采用DDD领域驱动设计进行整个改变。

    随着经过几个月的努力,确实慢慢地体会到ddd的架构设计的优势,聚合根设计能够协助我们整个服务改造,开发起来越来越迅速。



 

CQRS访问方式:



 
CQRS的架构体系,首先会被独立出来两个组件,一个事command的微服务负责addupdate等改变状态的动作,query的微服务顾名思义就是读动作


  • 微服务采用spring-boot框架
  • 构建、运行采用docker容器
  • CQRS的axon、eventbus,存储采用elasticsearch
  • gateway采用自主研发的方式,支持注册、发现、路由方式

案例:

gateway在之前的blog已经写过,不在这里叙述

首先简单的rest controller

@RestController
public class NotifyController {

    @Autowired
    private CommandGateway commandGateway;


    @RequestMapping(value = "/notify", method = RequestMethod.GET)
    public void notify(HttpServletRequest request) {
        commandGateway.send(asCommandMessage(new CreateTaskCommand("1","chenyang","China")),
                new CommandCallback() {
                    @Override
                    public void onSuccess(Object result) {
                        //成功继续事情
                    }
                    @Override
                    public void onFailure(Throwable cause) {
                        //失败
                    }
                });
    }
}

 Command:

public class SuccessNotification  extends AbstractAnnotatedAggregateRoot<String>

    {
        /**
         * The constant serialVersionUID
         */
        private static final long serialVersionUID = -159779842362041665L;

        @AggregateIdentifier
        private String id;

        @CommandHandler
        public SuccessNotification(SuccessNotifyCommand command) {
        apply(new SuccessNotifyEvent(command.getId()));
    }

        SuccessNotification() {
    }


        @CommandHandler
        void  on(SuccessNotifyCommand command) {
        apply(new SuccessNotifyEvent(command.getId()));
    }


        @EventSourcingHandler
        public void on(SuccessNotifyEvent event) {
            this.id = event.getId();
        }
}

 Event:

	@EventHandler
	String on(SuccessNotifyEvent event) {
		return "world";
	}

 

最终结论:

   相对于烟囱式的方式,ddd对于开发者以及架构师要求更高,充当角色之一领域专家,需要对于聚合根理解透彻,才能更好地理解业务。

 

  • 大小: 206.1 KB
  • 大小: 125.9 KB
  • 大小: 215.9 KB
2
0
分享到:
评论
2 楼 u012916287 2017-10-16  
请问大神。这个架构是你们公司的产品吗?最近准备搞一个基于spring cloud + axon的开源基础服务框架。想请教些经验。
1 楼 hch2012 2016-08-03  
大神,膜拜!
                           by 小强

相关推荐

    基于DDD和微服务中台架构与实现

    【基于DDD和微服务的中台架构与实现】是一本深度探讨现代企业IT架构的书籍,作者欧创新和邓頔结合实践经验,阐述了如何利用领域驱动设计(DDD)和微服务架构构建灵活且高效的中台系统。以下是该书涉及的主要知识点:...

    基于DDD和微服务的中台建设.pdf

    DDD不是一种具体的架构模式,而是一种架构设计方法论。它通过边界划分将复杂业务简单化,围绕业务概念构建领域模型,以控制业务复杂性。微服务架构应与限界上下文对齐,保持松耦合、面向服务的特性。 DDD设计过程...

    微服务架构及设计模式.docx

    - **按问题子域进行分解**:基于领域驱动设计(DDD)的思想,将服务按照业务的不同子域进行划分,例如产品目录服务、库存管理服务等。 - **按事务/两阶段提交(2PC)模式进行分解**:通过事务协调机制分解服务,适用于...

    【推荐】DDD领域驱动设计&中台实践资料合集(20份).zip

    基于DDD的领域建模中的模版和工具实践 架构分层模型适配 金融支付系统的改造之路 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦 如何让DDD落地 淘宝应用架构升级——反应式架构的探索与...

    基于DDD的微服务设计和开发实战.pdf

    本文采用 DDD(领域驱动设计)作为微服务设计指导思想,通过事件风暴建立领域模型,合理划分领域逻辑和物理边界,建立领域对象及服务矩阵和服务架构图,定义符合 DDD 分层架构思想的代码结构模型,保证业务模型与...

    基于Spring Boot 3.4.0的KCloud-Platform-IoT企业级微服务架构设计源码

    该项目是基于Spring Boot 3.4.0的KCloud-Platform-IoT企业级微服务架构设计源码,包含2139个文件,涵盖1105个Java源文件、184个JavaScript文件、168个PNG图像文件、157个XML配置文件、53个HTML文件、43个Markdown...

    基于Java微服务的DDD实践设计源码

    该源码集基于Java微服务架构,深入实践了领域驱动设计(DDD)理念,包含966个文件,涵盖837个Java源文件、77个XML配置文件、32个UML图文件(puml)、6个属性文件(properties)、4个Markdown文件(md)、4个YAML文件...

    CongoMall刚果商城不一样的TOC商城系统,微服务架构设计,基于DDD领域驱动模型开发,代码设计优雅,涵盖商城核心业务

    CongoMall(刚果商城)不一样的TOC商城系统,SpringCloud-Alibaba微服务架构设计,基于DDD领域驱动模型开发,代码设计优雅,涵盖商城核心业务。系统集成分布式锁、分布式事务、分库分表、消息队列、数据搜索、服务...

    DDD指导微服务拆分的详细流程和案例

    在微服务架构中,DDD可以帮助我们更好地拆分服务,确保每个服务都专注于其核心业务能力,从而实现高内聚和低耦合。 微服务架构是一种将大型应用程序分解为一组小型、独立的服务的架构风格。每个服务都可以在其自己...

    元数据驱动的微服务架构(上)

    ### 元数据驱动的微服务架构(上) #### 微服务架构需要元数据 随着企业IT架构的不断发展,从传统的单体应用到面向服务的架构(SOA),再到微服务架构,每一次技术演进都旨在解决更复杂的问题,并提供更高的灵活性...

    DDD与微服务.doc

    3. 客户关系管理系统:使用DDD和微服务架构来设计客户关系管理系统,实现了业务领域的独立性和灵活性。 结论 DDD和微服务架构是软件开发中的两个重要概念。通过将业务领域拆分为多个小型的服务,每个服务都是独立...

    基于微服务架构的铁路企业年金信息系统研究与实现.pdf

    总结来说,基于微服务架构的铁路企业年金信息系统利用了微服务的灵活性、可扩展性和可维护性优势,结合领域驱动设计,实现了业务流程的优化和效率提升。同时,系统的前端应用、认证授权、数据存储以及服务间的通信...

    基于DDD(领域驱动设计)并支持SaaS平台的微服务框架

    **基于DDD(领域驱动设计)并支持SaaS平台的微服务框架详解** DDD(Domain-Driven Design,领域驱动设计)是一种软件开发方法论,强调通过深入理解和表达业务领域,来驱动软件的设计和实现。在现代企业级应用开发中...

    java毕业设计之基于微服务架构的乐居租房网的设计与实现源码.zip

    该项目是针对Java初学者或毕业生的一个实践项目,旨在教授如何基于微服务架构设计并实现一个乐居租房网站。这个项目采用Java技术栈,利用微服务的思想来分解大型应用,提高系统的可扩展性和可维护性。以下是对项目...

    Kubernetes与OpenStack融合支撑企业级微服务架构.pdf

    2. 架构设计与实现:选择合适的微服务开发框架,如SpringCloud/Dubbo。 3. DevOps实践:包括代码管理(GitLab/GitHub)、自动部署(Ansible/Puppet)以及持续集成工具(Jenkins)。 4. 使用容器化与云计算平台:利用...

    DDD-分布式微服务系统架构脑图

    DDD-分布式微服务系统架构脑图

    DDD领域驱动设计和中台实践资料合集25篇.zip

    基于DDD的领域建模中的模版和工具实践 基于FP的DDD实践分享 架构分层模型适配 金融支付系统的改造之路 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦-张逸 领域驱动建模(Evans DDD) 领域...

    基于 DDD 架构的电商微服务项目实践-kafeiMall.zip

    《基于DDD架构的电商微服务项目实践:kafeiMall》 在现代软件开发领域,Domain-Driven Design(领域驱动设计,简称DDD)已成为构建复杂业务系统的一种主流方法论。它强调通过深入理解业务领域,将复杂的业务逻辑...

Global site tag (gtag.js) - Google Analytics