热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET现代化应用开发

​本周MASAFramework进行了第四次课程直播,课程主题为类目管理的开发,直播中进行了理论讲解和实战演练(CQRS实践的演示可直达推文底部观看直播回放)开始环节我们围绕三个点

本周MASA Framework 进行了第四次课程直播,课程主题为类目管理的开发,直播中进行了理论讲解和实战演练(CQRS实践的演示可直达推文底部观看直播回放)

开始环节我们围绕三个点介绍CQRS的原理

首先,我们先对之前的事件流概念进行简单的回顾


事件风暴回顾 - 事件流

接下来到我们本节课的主题内容


CQRS

命令查询职责分离

大白话:读和写分开

信息来源:https://docs.microsoft.com/zh-cn/azure/architecture/patterns/cqrs


优势

1.独立缩放
2.根据读写分别优化数据结构3.更轻松地确保仅正确的域实体对数据执行写入4.关注点分离,读关注读取性能,写关注复杂业务逻辑5.物化视图的读模型可有效减少复杂的表链接


什么时候用

1.源于访问频次、数据量或者是数据模型数量等因素导致查询和更新的需求差距逐渐变大


2.最大限度地提高性能


3.控制细粒度的缩放


4.控制不同应用的安全级别


5.降低多开发者协作冲突,事件的粒度可以足够细


注意

1.命令应基于任务,而不是数据

2.命令可入队,使用异步而非同步


3.查询不包含修改动作和领域知识


4.事件溯源支持重播,比如用于通知读模型


事件溯源

只追加存储来记录对数据采取的完整系列操作

而不是仅存储域中数据的当前状态


优势

1.事件不可变


2.事件有助于领域专家了解过程


3.事件只增不改,不需要考虑并发冲突


4.事件存储有助于监控数据变化


5.事件重播可轻易的对系统状态进行还原,调试,测试


6.事件可被不同的应用多次,异步消费


注意

1.事件驱动是异步的,读模型会有一定程度的延迟


2.修改事件的唯一方式只能通过补偿事件

3.事件顺序至关重要,事件存储有责任保证事件顺序完整性

不管是上面讲到的CQRS,还是事件溯源,这些都是为事件驱动做准备


事件驱动


事件驱动的小知识点

事件驱动里有一些值得注意的点

事件不等于 命令

1事件不会告诉订阅者如何做


2.事件只通知某个事件发生了


3.事件是不可变的


4.事件被执行时,可能会产生新的事件并形成事件流

事件标准化

支持过滤/转换/查询等

事件其实是需要标准化的,那有没有标准呢?

那就是CloudEvents


CloudEvents

包含了事件发生的上下文和相关数据,事件代表了已发生的事实,不包含任何目的地相关信息。消息能够传达事件内容,从而将事件数据从源头传输到指定的目的地

1.发送的消息符合规范,那么它就是一个有效的 CloudEvent

2.支持的云厂商包括微软,谷歌,阿里,甲骨文等

那我们来看事件和订阅者的关系,事件和订阅者可以是一对多、一对一、多对一,但事实上事件和订阅者的关系是多对多


事件驱动的使用场景

微服务解耦,跨集群通信

兼顾遗留,系统对接

游走在云与非云中

部分 AOP类场景

流计算


Event Bus

简单来说,Event Bus主要的功能是接收消息、处理消息、转发消息,作为发布者和订阅者中转站的角色


发布订阅模式

发布者通过调度中心将消息发送给订阅者。调度中心解决发布与订阅者之间的关系,保证消息可以送达订阅者手中

最常见的是并行执行顺序执行


MASA 事件处理

MASA 是如何进行事件处理的?

MASA 事件处理主要分为两部分一个是MASA Dispatcher,另一个是MASA DDD

MASA Dispatcher>>

Event Bus>>进程内事件总线

Integration Event Bus>>集成事件总线(跨进程)

MASA DDD>>Domain Event Bus>>领域事件总线 (自动协调进程内事件和集成事件调度)

通过前面的学习,我们已经了解了Event Bus 和MASA 事件处理流程,那MASAEvent Bus 是怎么样的一个事件流程?


MASA Event Bus

发布者把事件发布到Even Bus

关系链表支持特性Handler中间件分布式事务UoW更多...

发送到订阅者

本次课程内容到这里就全部结束,CQRS实战演示部分可以点击下方链接,观看直播回放。

.NET现代化应用开发 - CQRS&类目管理代码剖析_哔哩哔哩_bilibili

如果你对我们MASA感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们



  • WeChat:MasaStackTechOps

  • QQ:7424099


推荐阅读
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • CISCO ASA防火墙Failover+multiple context详细部署By 年糕泰迪[操作系统入门]
    一.文章概述本文主要就CISCOASA防火墙的高可用和扩张性进行阐述和部署。再cisco防火墙系列中主要有3种技术来实现高可用和扩张性。分别是Failover,multiplese ... [详细]
  • 微信公众号:内核小王子关注可了解更多关于数据库,JVM内核相关的知识;如果你有任何疑问也可以加我pigpdong[^1]jvm一行代码是怎么运行的首先,java代码会被编译成字 ... [详细]
author-avatar
silaker
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有