国王小组:交易所搭建|如何解决事件驱动架构

简介: 介绍还是先举例子,在平常的生活中事件驱动架构也是比较常见的。一般情况下的人与人之间的沟通都是以一个人说一个人听的关系进行,并同时可以交换听者与说着。伴随着听者听到说者所表述的内容后,做出的心理,行为上的反应就是事件在接受者中的处理过程。

国王小组:交易所搭建|如何解决事件驱动架构介绍
还是先举例子,在平常的生活中事件驱动架构也是比较常见的。一般情况下的人与人之间的沟通都是以一个人说一个人听的关系进行,并同时可以交换听者与说着。伴随着听者听到说者所表述的内容后,做出的心理,行为上的反应就是事件在接受者中的处理过程。

上面简单的说明了事件驱动的机制。我们从中找一些抽象出事件驱动架构模式的特点。在上面简单的例子中我们可以分析出说者和听着都是独立的个体,独立个体就有独立的思维方式以及处理结果。通过两者都能理解或者都能听懂的语言进行交流,双方都能理解的语言在计算机系统中可以定义为通信协议。双方是通过声音的方式进行沟通的,那么双方的通讯是需要在通信介质(空气)上进行的。

如上所述,我们总结出事件驱动架构模式的几个重要特点。

至少需要一个发送者和一个接受者。
需要在两者之间建立双方都可以理解的通信协议。
需要传播介质帮助信息的传递的过程。
在这里就有可能碰到很多问题。比如说:一个人自言自语,算不算事件驱动机制?一个人在台上演讲,台下做了很多人算不算事件驱动?在于不同语言的人沟通时中间介入的翻译算不算事件驱动?我使用电话和家人通话算不算事件驱动?我看电视剧算不算事件架构模式?

讲解
上面提到了很多的问题,其实这里涉及到比较多的现实编程中会遇到的问题。一个真正的事件驱动架构模式是不必要关心这些问题的。因为事件架构模式最重要的事产生事件和处理事件。只要专注于此即可,不必拘泥于这么多的情况。

事件驱动架构模式中的两件核心事情:产生事件和处理事件。接着分析这两个核心问题,怎样产生事件?怎样处理事件?

产生事件可以分为:

事件触发事件。在这里并不一定是同一种方式出发的事件再转发出去。例如,可以是用户从页面触发的事件,然后转换成消息队列中的消息事件,然后再转换成写库事件。它不必是从rest来的事件再转换成另外一个rest事件传递给其他的接收者。
定时事件。在很多情况下业务系统需要定时处理某些业务。
随机事件。随机事件是一类比较特殊的事件产生情况,但在一些特殊的情况下需要差生一些随机事件。混沌工程,MonkeyKing的场景下需要产生某些随机事件。
处理事件一般情况下不进行分类,因为基本上都是进行业务处理然后返回。就像早先在单体结构中,一个WEB服务接收到客户的HTTP事件之后进行处理类似。所以业务处理系统无法进行分类。不过与一般的事件处理不同的是事件驱动架构模式内定义了更多的消息通信方式:同步消息,异步消息。同步消息就是在接收者接收到消息之后处理消息并返回的过程中,发送者一直等待直到结果返回。异步消息则不同,异步消息在消息发送者发送完消息后就不等待,直接处理其他事务即可。

模式描述
最早之前在学习MFC的时候,就认为每个按钮,每个动作绑定一个事件处理函数的方式就是一种实践的处理方式。后来在浏览器上用JS监听鼠标,按钮动作时就又发现了一种事件驱动模式,并且现在流行的Nodejs把JS的单线程事件驱动模型给发挥的淋淋尽致。再有使用Socket通信时的Select,Poll也是标准的事件驱动模型,在Linux上还有专门的事件驱动库Libevent。可知道在Linux上找到一个用C语言写的库是非常非常难的(除了LibC)。可见事件驱动模式在计算机技术发展过程起到了多大的作用。

在现在流行的移动端开发中,也有Android消息机制,从Java层到Native层剖析,Android消息机制(一):概述设计架构这样的事件驱动模型。然后配合FSM(有限状态机)影响移动系统的状态是非常强的一种架构模式。

在Java企业应用系统中也有spring events 和 eventbus帮助我们形成企业应用系统。而且借助工具可以在应用内部实现事件驱动,也可以在应用外部实现事件驱动。

业界有很多把事件驱动模式又划分为Mediator拓扑和Broker拓扑。这里我只接受Mediator拓扑。因为Broker拓扑只不过就是将事件处理系统级联起来,组成一个级联事件处理系统。我们大可以用管道过滤器架构模式来级联不同的事件。另外也因为架构模式是一种原则性或规则性的概念,所以,只需要介绍最纯粹的原则即可,不能介绍具体的实现。如果介绍具体实现会限制读者在接收信息时的接收到的元信息。

image.png
特点
开发
过程管理(康威定律)
事件驱动架构模式一个比较大的特点就是消息的可跟踪性弱,所以,需要考虑在哪里加入跟踪元素,跟踪元素的实现团队与使用事件驱动模式的团队之间的关系。

可测试性
因为事件驱动模式的事件可跟踪性弱的原因。在测试中需要以事件为判断因素时可测试性较弱,并且如果出现问题调查起来也比较困难。

可扩展性
因为使用分离关注点的方式隔离了两端,如果使用消息中间件进行隔离可以得到很好的可扩展性。

运维
可伸缩
变体比较多,有些变体可以适应伸缩,有些变体不适用伸缩。

部署难易
有些变体中有设计到多服务部署和服务发现的问题,需要在上线时进行配置。

维护难易
稳定性尚可,但是可跟踪性比较弱。所以维护难度比较高。

性能
这里需要看性能是按照那些标准进行计算。主体上来说,事件驱动架构模式对性能的影响不会太大。

总结:
通信方式中单播,组播,广播都可以在事件驱动架构模式中使用。
可以在架构中使用独立的服务组件(消息中间件)完成消息的传递,也可以使用服务内部的事件驱动框架完成。
在涉及到服务部署多节点时,但某项业务需要只处理一遍时。可以借助外部的决策中心进行决策,由主节点完成处理,辅节点可以不处理。也可以使用调度中心进行调度。

交易所系统开发(海外版)
交易所系统开发(多语言)
交易所开发源码版
交易所源码
交易所APP开发正式版
交易所系统开发技术逻辑分析
数字货币交易所开发详情
数字货币交易所系统开发(详细及逻辑)
数字货币交易所源码
原生交易所开发详情
原生交易所系统开发(成熟技术)
原生交易所现成源码部署

相关文章
|
2月前
|
消息中间件 监控 测试技术
事件驱动架构是一种编程范式
【10月更文挑战第7天】事件驱动架构是一种编程范式
115 65
|
2月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
|
2月前
|
存储 设计模式 监控
事件驱动架构的实现方式?
【10月更文挑战第7天】事件驱动架构的实现方式?
61 7
|
3月前
|
设计模式 开发框架 前端开发
在开发框架中实现事件驱动架构
【9月更文挑战第2天】事件驱动架构(EDA)通过事件机制让组件间解耦交互,适用于动态扩展和高响应性的系统。本文提供一个基于Beego框架实现事件驱动的示例,通过事件管理器注册和触发事件,实现用户注册和登录时的不同处理逻辑,展示了其在Web应用中的灵活性和高效性。
92 5
|
4月前
|
弹性计算 监控 数据挖掘
事件驱动架构的优势与应用:深度解析与实战应用
【8月更文挑战第17天】事件驱动架构以其松耦合、可扩展性、异步处理、实时性和高可靠性等优势,在实时数据处理、复杂业务流程、弹性伸缩和实时通信等多个领域展现出巨大的应用潜力。通过合理应用事件驱动架构,可以构建灵活、可扩展和可维护的系统架构,满足不断变化的业务需求和技术挑战。对于开发者而言,深入理解事件驱动架构的核心概念和优势,将有助于更好地设计和实现高质量的软件系统。
|
5月前
业务架构问题之识别子域,如何解决
业务架构问题之识别子域,如何解决
|
4月前
|
消息中间件 缓存 Kafka
混合云中的事件驱动架构
混合云中的事件驱动架构
46 4
|
4月前
|
消息中间件 Kafka Java
Spring 框架与 Kafka 联姻,竟引发软件世界的革命风暴!事件驱动架构震撼登场!
【8月更文挑战第31天】《Spring 框架与 Kafka 集成:实现事件驱动架构》介绍如何利用 Spring 框架的强大功能与 Kafka 分布式流平台结合,构建灵活且可扩展的事件驱动系统。通过添加 Spring Kafka 依赖并配置 Kafka 连接信息,可以轻松实现消息的生产和消费。文中详细展示了如何设置 `KafkaTemplate`、`ProducerFactory` 和 `ConsumerFactory`,并通过示例代码说明了生产者发送消息及消费者接收消息的具体实现。这一组合为构建高效可靠的分布式应用程序提供了有力支持。
120 0
|
5月前
|
机器学习/深度学习 SQL 自然语言处理
现代深度学习框架构建问题之深度学习通用架构的定义如何解决
现代深度学习框架构建问题之深度学习通用架构的定义如何解决
55 3
|
5月前
|
JSON 监控 数据格式
开发与运维函数问题之iLogtail原有架构中配置文件组织存在问题如何解决
开发与运维函数问题之iLogtail原有架构中配置文件组织存在问题如何解决
45 1