版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、事件驱动编程,板桥banq ,1,事件定义,一种语义词语。 动词:代表过去发生的事情。 事件既是技术架构概念,也是业务概念(funny event)。 以事件为驱动的编程模型称为事件驱动架构EDA,2,高并发性能,Apache 等的传统Socket模型:,3,事件Reactor模型,4,Spring的Reactor,一个提供Java Groovy或其他JVM语言建立事件和数据驱动更容易的框架。 很快,可以每秒处理15,000,000以上事件, 无堵塞non-blocking分发Dispatch. 长任务运行无堵塞 ,5,Vert.x,比Node.js快好几倍,6,Vert.x,Java Rub
2、y和Groovy版本 Event-based Programming Model Event Loops Message Passing 类似Actor Shared data 全局In-memory cache,7,服务器后端大比拼,8,Java Servlet性能,Netty, Vert.x, and Java servlets是快,但是惊讶于比ruby Node.js等快那么多 Vert.x 和RoR有四十倍差距,太惊人了 框架比不过原生Servlet性能。 Tomcat等原生Servlet采取NIO,9,基于NIO的Servlet,J2SE 1.4 开始引入 非堵塞I/O(Nonblo
3、cking I/O)提供了基于Reactor模式 观察者模式 Selector 事件类型有:是否有接受的连接(OP_ACCEPT)、是否可以连接(OP_CONNECT)、是否可以读取(OP_READ)和是否可以写入(OP_WRITE)。,10,平衡,11,面向事件驱动编程,界面:Javascript事件驱动 业务逻辑:Event Sourcing + CQRS,12,交互响应式UI,13,传统僵化的CRUD界面,14,响应式设计,15,命令,命令就是让服务器做事情。表达用户的意图 关注命令,能够同时关注领域行为 用消息封装命令,UI - Server 命令是一种写方向,查询是反方向读。,16,
4、CQRS架构Command Query Responsibility Segregation,读写分离;更加伸缩: (1)写 = Commands命令 = 主要是改变模型状态,无返回结果。 (2)读 = Queries查询 = 纯粹读取,不改变任何模型状态。 CQRS开源框架Axon和Jdon框架比较,17,CQRS架构图,18,领域模型的行为,关注对象行为是事件驱动编程 失血模型:没有业务行为 只有setter/getter 没有行为保护的数据字段没有逻辑性 行为保证数据的逻辑一致性,19,传统失血模型,20,Evans DDD,21,Evans DDD,2004年Eric Evans 发表
5、Domain-Driven Design Tackling Complexity in the Heart of Software (领域驱动设计 )简称Evans DDD 领域建模是一种艺术的技术,它是用来解决复杂软件快速应付变化的解决之道,22,DDD优点,23,找出业务需求中的聚合根,24,聚合根类似状态机,25,DDD落地,26,In-memory数据操作问题,27,锁,28,锁的问题,29,Actor模型适合聚合根实现,30,Actor与外界通过消息,31,Actor模型优点,核心是异步消息机制 无共享状态,无锁,无堵塞。 异步 高并发 这些特点天然符合事件定义。(不可控,并发,随时
6、),32,聚合根的设计要求,33,聚合根设计落地,聚合根代表业务核心,是大脑,两个设计要求: 1. 聚合根内部状态切换必须是无锁非堵塞的。 2. 聚合根需要与外界解耦。 Actor模型符合聚合根的落地要求。 DDD聚合根与外界通过消息联系。,34,领域事件Domain Events,事情代表过去发生的事情。 事件代表过去发生的动词,如CustomerRelocated, CargoShipped, or InventoryLossageRecorded. 领域事件是领域中发生的事件。 领域事件将领域模型的改变显式化,突出暴露出来。,35,领域事件Domain Events,Domain Mod
7、el Model,Other Components Componet,Logging Consumer,GUI MVC Client,Persistence Consumer,async Message,async Message,async Message,Component architecture,36,消息,消息类似信封 信封内装有领域事件。 每个Actor是一个聚合根,与外界通过消息。,37,JdonFramework的Domain Events,Domain Model Model,Consumer Consumer Component,Disruptor 或 Java concu
8、rrent Future,Domain Message,38,Event Sourcing,记录导致状态变化的一系列领域事件。 事件回放可以返回系统到任何状态。 自然实现事务机制。,39,CQRS(命令查询分离),User interface,Service,Domain,Event/Message BUS,Infrastructure,Query/ Reporting,Commands,Commands,Events,40,事件存储目的EventStore,实现业务逻辑回放,还原某个时刻内存中聚合。 实现读写系统的数据同步,将状态更改反映到查询系统中。,41,Event用户同步CQRS的读写系统,42,ES实现CQRS的最终一致性,43,CAP定理,44,45,CQRS成功案例:LMAX,LMAX是一种新型零售金融交易平台,它能够以很低的延迟(latency)产生大量交易(吞吐量) 2009年建成,成功运行到现在。 LMAX贡献了事件左轮手枪: 开源Disruptor 业务逻辑处理器完全是运行在内存中(in-memory)。 使用事件源驱动方式(event sourcing).,46,LMAX架构,47,Jdon分析法集大成,48,比赛案例 详细 源码,:,49,事件驱动编程,事件发生不可控,事件响应处理必须及时。 事件处理不能采取传统同步模式,容易锁,堵塞,性能差,设计耦合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河北石家庄裕华职业学院高职单招职业技能考试模拟试卷及1套参考答案详解
- 2024年川南白酒产业学院单招职业技能考试题库【基础题】附答案详解
- 2027年湖南郴州苏仙职业学院单招综合素质考试题库带答案详解(黄金题型)
- 2026年四川省绵阳市单招职业技能考试题库含答案详解【满分必刷】
- 废旧铅蓄电池处置利用项目申请报告(范文模板)
- 2025年江淮专修学院单招职业技能考试题库【黄金题型】附答案详解
- 2027年四川沱江职业学院单招综合素质考试题库及答案详解【易错题】
- 2024年陕西铁路工程职院单招综合素质考试模拟试卷及完整答案详解【夺冠系列】
- 城市交通隧道防火工程施工组织设计
- 仓库岗位绩效考核制度
- 重庆市“五方面人员”选拔考试题型及答案(完整版)
- 2026江苏南通市海门区招聘区镇(街道)专职安全巡查员第二批49人考试参考题库及答案详解
- 2026年度驻马店市消防救援支队招聘消防文员35名笔试备考题库及答案详解
- 2025年国企资金管理岗招聘笔试试题及答案
- 四川省水利工程设计概(估)算编制规定2025
- 项目管理及监理一体化服务合同模板
- 特种门窗安装施工工艺流程
- JJF(石化)085-2023开路式红外可燃气体探测器校准规范
- XJJ013-2012 新疆维吾尔自治区城市规划管理技术规定
- 移民信访工作制度
- 中国重症康复指南(2025版)
评论
0/150
提交评论