领域驱动设计(DDD)微服务架构模式总结

part1. Domain Driven Design(Strategic Design,Tactical Design)

Top Down

focus on business or activityy domain

Ubiquitous Language:统一语言

Tactical Design Tools:战术性设计工具

Implementing Domain Driven Design(Event storming,DDD in code)

DDD总结:

Monoliths(大单体应用)

单体应用的优缺点:

part2.microservice architect patterns(微服务架构模式)

1.独享数据库(Database per microservice)

优点:

  • 数据由服务完全所有

  • 服务的开发团队之间耦合度降低

缺点:

  • 服务间的数据共享变得更有挑战性

  • 在应用范围内的保证ACID事务变的困难许多

  • 细心设计如何拆分单体数据库是一项极具挑战的任务

使用独享数据库的场景:

  • 在大型企业应用程序中

  • 在团队需要完全把控微服务以实现开发规模扩展和速度提升

不适合使用独享数据库的场景:

  • 在小规模应用中

  • 如果是单个团队开发所有微服务

可用技术demo: 所有SQL,NOSQL数据库都提供的逻辑分离(eg:单独的表、集合、结构、数据库)

2.事件源(Event Sourcing)(消息)

优点:

  • 为高可伸缩系统提供原子性操作

  • 自动记录实体变更历史,包括时序回溯功能

  • 松耦合和事件驱动的微服务

缺点:

  • 从事件存储中读取实体成为新挑战,通常需要额外的数据存储(CQRS模式)

  • 系统整体复杂度增加了,通常需要领域驱动设计

  • 系统需要处理事件重复(幂等)或丢失

  • 变更事件的结构成为新的挑战

使用事件源场景:

  • 使用关系数据库的、高可伸缩的事务型系统

  • 使用NOSQL数据库的事务型系统

  • 弹性高可伸缩微服务架构

  • 典型的消息驱动或事件驱动系统(电子商务、预定和预约系统)

不适合使用事件溯源的场景:

  • 使用SQL数据库的低可伸缩性事务型系统

  • 在服务可以同步交换数据(eg:通过API)的简单微服务架构中

可用技术demo: 事件存储:EventStoreDB, Apache kafka, Confluent Cloud, AWS kinesis, Azure Event Hub, GCP Pub/Sub, Azure Cosmos DB, Mongodb, Cassandra, Amazon DynamoDB

框架:Lagom,Akka,spring,akkatecture,Axon,Eventuate

3.命令和查询职责分离(CQRS)

  • 简单模式:强化单一职责和分离关注点,从而实现简洁设计

  • CQRS高级模式:读写分离

优点:

  • 在事件驱动的微服务中数据读取速度更快

  • 数据的高可用性

  • 读写系统可独立扩展

缺点:

  • 读数据存储是弱一致性(最终一致性)

  • 整个系统的复杂性增加了,混乱的CQRS会显得危害整个项目

使用CQRS场景:

  • 在高可扩展的微服务架构中使用事件源

  • 在复杂领域模型中,读操作需要同时查询多个数据存储

  • 在读写操作负载差异明显的系统中

不适合使用CQRS的场景:

  • 在没必要存储大量事件的微服务架构中,用事件快照来计算实体状态是一个更好的选择

  • 在读写操作负载相近的系统中

可用技术demo:

写存储:EventStoreDB,Apache kafka, Confluent Cloud,AWS kinesis,Azure Event Hub, GCP Pub/Sub,Azure cosmos DB,mongodb,Cassandra,Amazon DynamoDB

读存储:es, Solr,Cloud Spanner,Amazon Aurora,Azure Cosmos DB,Neo4j

框架:Lagom,Akka,Spring,akkatecture,Axon,Eventuate

4.saga:实现分布式事务

saga使用于服务流程特别复杂长,如果本地事务失败,saga会执行一系列补偿事务来回滚前面本地事务的更改。

Saga事务协调管理主要有两种形式:

  1. 事件编排Choreography:分散协调,每个微服务生产并监听其他微服务的事件或消息然后决定是否执行XX动作

  2. 命令编排Orchestration:集中协调,由一个协调器告诉参与的微服务哪个本地事务需要执行

优点:

  • 为高可伸缩或松耦合的、事件驱动的微服务架构提供一致性事务

  • 为使用了不支持2pc的非关系数据库的微服务框架提供一致性事务

缺点:

  • 需要处理瞬时故障,并且提供幂等性

  • 难以调试,而且复杂性随着微服务数量增加而增加

使用saga场景:

  • 在使用事件源的高可伸缩、松耦合的微服务中

  • 在使用了分布式非关系数据库的系统中

不适合使用saga场景:

  • 使用关系数据库的低可伸缩性事务型系统

  • 在服务间存在循环依赖的系统中

可用技术demo:

Axon,Eventuate,Narayana

5.面向前端的后端(BFF):为前端定制了一个后端

优点:

  • 分离BFF之间的关注点,使得可以为具体的UI优化

  • 提供更高的安全性

  • 减少ui和下游微服务之间频繁的通信

缺点:

  • BFF之间代码重复

  • 大量的BFF用于其他用户界面(eg:智能电视、web、移动端、pc桌面版)

  • 需要仔细的设计和实现,BFF不应该包括任何业务逻辑,而应只包含特定客户端逻辑和行为

使用BFF的场景:

  • 如果应用程序有多个含不同api需求的ui

  • 出于安全需要,UI和下游微服务之间需要额外的层

  • 如果在UI开发中使用微前段

不适合BFF的场景:

  • 如果应用程序虽有多个UI,但使用的API相同

  • 如果核心微服务不是部署在DMZ网络中

可用技术demo:

任何后端框架(Node.js,spring,Django,Laravel,Flask,Play)

6.API网关

优点:

  • 在前端和后端服务之间提供松耦合

  • 减少客户端和微服务之间的调用次数

  • 通过SSL终端、身份验证和授权实现高安全性

  • 集中管理的横切关注点,eg: 日志记录和监视、节流、负载均衡

缺点:

  • 可能导致微服务架构中的单点故障

  • 额外的网络调用带来的延迟增加

  • 如果不进行扩展,容易成为整个企业应用的瓶颈

  • 额外哦维护和开发费用

使用API网关的场景:

  • 在复杂的微服务架构中,几乎是必备的

  • 在大型企业中,API网关是中心化安全性和横切关注点的必要工具

不适合使用API网关的场景:

  • 在安全和集中管理不是最优先要素的私人项目或小公司中

  • 如果微服务的数据相当少

可用技术demo:

Amazon API网关,Azure API网管,kong, Apigee,WSO2 API管理器

7.Strangler(扼杀者):单体向微服务过度的架构中使用 (Facade)

优点:

  • 安全的迁移单体应用程序到微服务

  • 可以并行的迁移已有功能和开发新功能

  • 迁移过程可以更好的把控节奏

缺点:

  • 在现有的单体应用服务和新的微服务之间共享数据存储变得具有挑战性

  • 添加Facade(API网关)将增加系统延迟

  • 端到端测试变得困难

使用Strangler的场景:

  • 将大型后端单体应用程序的增量迁移到微服务

不适合用Strangler的场景:

  • 如果后端单体应用很小,全量替换更好

  • 如果无法拦截客户端对遗留的单体应用程序的请求

可用技术demo:

API网关后端应用框架

8.断路器

优点:

  • 提高微服务架构的容错性

  • 阻止引发其他微服务的级联故障

缺点:

  • 需要复杂的异常处理

  • 日志和监控

  • 应该支持人工复位

使用断路器的场景:

  • 在微服务间使用同步通信的紧耦合的微服务架构中

  • 如果微服务依赖多个其他微服务

不适合使用断路器的场景:

  • 松耦合、事件驱动的微服务架构

  • 如果微服务不依赖其他微服务

可用技术demo:

API网关、服务网格、各种锻炼器库(Hystrix,Reselence4j,Polly)

9.外部化配置:代码与配置分离,不耦合

优点:

  • 生产配置不属于代码库,因而最小化了安全漏洞

  • 修改配置参数不需要重新构建应用程序

缺点:

  • 需要依赖一个支持外部化配置的框架

  • 何时需要使用外部化配置

  • 在验证概念的开发中

  • 任何重要的生产应用程序都能必须使用外部化配置

可用技术demo:

几乎所有企业级的现代框架都支持外部化配置,eg:nacos /阿波罗

10.消费端驱动的契约测试 :自动化测试

BDD

需求驱动的契约测试使用场景:

在大型企业业务应用程序中,通常由不同的团队开发不同服务;

不适合使用消费端驱动的契约测试场景:

  • 所有微服务由同一团队负责开发的小型简单的应用程序

  • 如果服务端微服务是相对稳定的,并且不处于活跃的开发状态

可用技术demo:

pack,postman,springcloud contract,swagger3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型基础——从零实现一个Transformer(4)

大模型基础——从零实现一个Transformer(1)-CSDN博客 大模型基础——从零实现一个Transformer(2)-CSDN博客 大模型基础——从零实现一个Transformer(3)-CSDN博客 一、前言 上一篇文章已经把Encoder模块的单个EncodeBlock已经实现了 本文我们继续了解Transformer中剩下的其他…

Flutter【组件】富文本组件

简介 flutter 富文本组件。 github地址: https://github.com/ThinkerJack/jac_uikit 使用方式 运行 flutter pub add jac_uikit组件文档 使用方式: HighlightedTextWidget.builder(text: "全部文案包含高亮文案测试用",highlights: [Hig…

1. zookeeper分布式协调者

zookeeper分布协调者 一、zookeeper介绍1、软件设计架构1.1 单体架构1.2 SOA架构/分布式1.3 微服务架构 二、zookeeper角色1、角色2、选举机制3、znode类型 三、zookeeper集群部署1、环境规划2、安装jdk3、安装配置zookeeper3.1 安装zookeeper3.2 编辑配置文件3.3 创建myid文件…

聊聊最近比较火的AI产品做互联网算法备案

今年AI🔥了,而且是大火,导致监管部门相继出台相关政策,需要管控下,所以互联网算法备案就自然而然重新被提出来。其实这个互联网算法备案去年就已经开始实施了,去年只有几个大厂比如BAT等互联网巨头等会去弄…

Lazada API接口——一键获取商品买家评论数据信息

一、引言 在电商领域,买家评论是商品销售中不可忽视的重要因素。它们不仅影响着潜在消费者的购买决策,还为商家提供了宝贵的客户反馈。为了满足商家和数据分析师对买家评论数据的需求,我们特别开发了一款针对Lazada平台的接口,其…

Talk|北京大学张嘉曌:NaVid - 视觉语言导航大模型

本期为TechBeat人工智能社区第602期线上Talk。 北京时间6月20日(周四)20:00,北京大学博士生—张嘉曌的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “NaVid - 视觉语言导航大模型”,NaVid是首个专为视觉语言导航&#xf…

Cancer Discovery | 非小细胞肺癌的空间蛋白组学研究再添新篇章

非小细胞肺癌(NSCLC)作为最常见的肺癌亚型,其治疗和预后的改善一直是医学研究的重点。由肿瘤细胞、免疫细胞、成纤维细胞等多种细胞类型组成的肿瘤微环境(TME)已被证实在肺癌的进展、转移和治疗响应中扮演着重要的角色…

MySQL——索引(概述和结构介绍)

一、索引概述 1、索引(index)是帮助 MySQL 高效获取数据的数据结构(是一种有序的数据结构)。 2、在数据之外,数据库系统还维护着满足特定查找算法的数据结构。这些数据结构以某种方式引用(指向)数据,这样就可以在这些…

概率论与数理统计期末复习

概率论常考知识点汇总 总括 1. 基础概率论 概率定义:理解概率是事件发生的可能性度量,范围从0(不可能)到1(必然发生)。概率公理:掌握概率的三大公理,即非负性、规范性和可加性。条…

使用 cx_Oracle 在 Oracle 中等待记录并执行操作

问题背景: 在第一个 Python 项目中,需要等待记录被插入 Oracle 表中,一旦记录存在,就调用 Python 函数。目前使用 cx_Oracle 库,采用一种无限循环的方式来查询表。如果记录存在,就调用函数,然后…

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融…

Linux【实操篇-文件目录类命令】

05【实操篇-文件目录类命令】 1.pwd 显示当前工作目录的绝对路径 pwd:print working directory 打印工作目录 到现在为止,我们还不知道自己在系统的什么地方。在浏览器上,我们能够通过导航栏上的url,了解到自己在互联网上的具体坐标。相似的…

金蝶云星空与MES系统深度集成对接案例全公开

项目背景 深圳市某自动化设备有限公司,自2006年成立以来,一直专注于高端精密自动化设备的研发、生产与销售。作为一家高科技企业,公司依托深圳这一经济特区的地理优势,构建了覆盖全国的服务网络,并拥有两个先进的生产…

椭圆的矩阵表示法

椭圆的矩阵表示法 flyfish 1. 标准几何表示法 标准几何表示法是通过椭圆的几何定义来表示的: x 2 a 2 y 2 b 2 1 \frac{x^2}{a^2} \frac{y^2}{b^2} 1 a2x2​b2y2​1其中, a a a 是椭圆的长半轴长度, b b b 是椭圆的短半轴长度。 2.…

LogicFlow 学习笔记——9. LogicFlow 进阶 节点

LogicFlow 进阶 节点(Node) 连线规则 在某些时候,我们可能需要控制边的连接方式,比如开始节点不能被其他节点连接、结束节点不能连接其他节点、用户节点后面必须是判断节点等,想要达到这种效果,我们需要为…

iOS开发工具-网络封包分析工具Charles

一、Charles简介 Charles 是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求…

云手机群控功能讲解

接触云手机之前,很多企业或者个人卖家都对群控有浓厚的兴趣,云手机群控具体是什么呢?云手机群控,顾名思义,是指能够同时对多台云手机进行集中控制和管理的功能。打破了传统单台手机操作的限制,实现了规模化…

ffmpeg音视频开发从入门到精通——ffmpeg下载编译与安装

音视频领域学习ffmpeg的重要性 音视频领域中ffmpeg的广泛应用,包括直播、短视频、网络视频、实时互动和视频监控等领域。掌握FM和音视频技术可以获得更好的薪酬。 学习建议音视频学习建议与实战应用 音视频处理机制的学习,需要勤加练习,带…

nginx出现504 Gateway Time-out错误的原因分析及解决

nginx出现504 Gateway Time-out错误的原因分析及解决 1、查看公网带宽是否被打满 2、查看网络是否有波动(可以在nginx上ping后端服务,看是否有丢包情况) 3、查看服务器资源使用情况(cpu、内存、磁盘、网络等) 4、查看nginx日志,具体到哪个服务的哪个…

浙江保融科技2025实习生校招校招笔试分享

笔试算法题一共是有4道,第一道是手搓模拟实现一个ArrayList,第二道是判断字符串是否回文,第三道是用代码实现1到2种设计模式。 目录 一.模拟实现ArrayList 二.判断字符串是否回文 ▐ 解法一 ▐ 解法二 ▐ 解法三 三.代码实现设计模式 一…