事件驱动

来自智得网
跳转至: 导航、​ 搜索

简介

事件驱动示意图

程序的范式可以分为同步模型和异步模型。

同步模型一般是指请求<->响应模式,调用方同步请求下游,并且阻塞等待结果。同步模型一般用于短耗时,低并发的场景,因为同步模型一般需要一个线程/协程等待结果的返回,所以在高并发场景下线程等资源会成为系统瓶颈。

在耗时较长的情况下,线程需要等待的时间较长,可以用轮询的方式定期去下游查询结果,避免一个线程长期用于等待结果。

但是如果在高并发场景下,需要轮询大量的数据,对服务器能力的压力较大。这个时候就需要引入异步的编程模型。

异步模型

异步编程可以下列几种模型:

  • 消息驱动,消息驱动是目前微服务架构下常用的异步模型,消息驱动分为生产者,队列,消费者,生产者发送消息到队列,通过推或者拉的方式消费者可以异步的消费这些消息。
  • 事件驱动,事件和消息的区别,只是事件做了一些结构化的封装。例如一般情况下事件会根据业务场景的不同而区分为不同的事件,每个事件的关注者也只会消费特定类型的事件。
  • 流模式,流是一组有序的无界事件或数据,一般和消息/事件区别是通信方式,消息/事件一般都是离散的,通过推或者轮询拉的方式获取数据,流模式一般通过固定的长链接链路推送大量数据。
以上三种模式并没有严格的界限,比如消息驱动架构下,可以将不同类型的消息发送到不同的队列,其实也可以算是结构化的事件。而把不同的事件放在一起,形成事件总线也类似消息。同时消息和事件也可以通过长链接的方式推动给下游进行消费。

应用场景

事件驱动不仅仅可以用于业务研发中异步化我们都业务逻辑,在基础组件中也承担重要的作用。

Reactor

Reactor是网络编程领域著名的并发模型,将网络编程转换为一个个需要处理的事件,例如OnAccept,OnWrite,OnRead事件。

Reactor模型不需要为每个连接使用一个线程实现读写逻辑,而一般采用多路复用的方式进行实现。