事件驱动架构
事件驱动架构,通常指使用消息队列的异步架构。通常是应用在模块之间或服务之间的写操作,目的是实现依赖解耦。
使用消息队列实现异步架构是目前互联网应用系统中一种典型的架构模式。
与异步架构相对应的是同步架构。当应用程序调用服务时,当前程序需阻塞等待服务完成,在返回结果后才能做其它操作,这就是同步架构。
同步架构,应用程序必须阻塞等待,准确地说是执行应用程序代码的线程被阻塞。就会带来三个问题。
- 一是导致线程不能释放被占用的系统资源,从而导致系统资源不足,影响性能。
- 二是导致程序无法快速把结果响应给用户,用户体验差。
- 三是如果被调用的服务异常,异常就会传递给整个链路的服务,若没处理好此异常,则会导致整个请求处理失败,严重的甚至会导致服务中断,变为生产事故。
异步架构的应用场景
不需要立即得到处理结果的。
例如,发送邮件,报表预计算等。
扩展业务不影响主业务流程的。
例如,发送消息,记录日志等。
可以多线程并发处理计算的。
例如,多纬度报表预处理
消息队列实现异步架构
消息队列异步架构的主要角色包括:消息生产者,消息列表,消息消费者。
- 消息生产者:就是主应用程序,主模块。生产者将调用请求封装成消息发送给消息队列。
- 消息队列:用于缓冲消息,等待消息者消费。消息中间件通常也提供对消息的持久化功能。
- 消息消费者:监听消息队列接收消息完成业务处理。消费方式又分为 点对点模式和 发布/订阅模式两种。
点对点模式 和 发布/订阅模式都可以实现消息的事件驱动。
但更好的处理方式是使用 发布/订阅模式,开发者在消息队列中设置主题,生产者发送消息到主题,多个消息者可以订阅同一个主题,每个消费者都可以在收到这个主题的消息后,按照自己的业务逻辑分别处理。这种架构方式也称为 事件驱动架构。
使用事件驱动架构时,一个主题是可以被重复订阅的。如果需要扩展功能,可以在对当前的生产者和消费者都没有影响的前提下,增加新的消费者订阅同一个主题。
消息队列异步架构的优点
改善写操作请求的响应时间
生产者只管发送消息,不用关注消息的消费处理。可以更快速地完成请求处理,快速响应。
更容易进行伸缩
使用消息队列,可以单独对消息者集群进行伸缩,代价相对较小。
削峰填谷
将需要处理的消息放入消息队列,消费者可以控制消费速度,因此能够降低系统访问高峰时的压力,而在访问低谷时,还可以继续消费消息队列中未处理的消息,提高统的资源利用率。
隔离失败
消息费在处理消息的过程中失败,不会传递给生产者,使系统具有更高的可用性。
降低耦合
降低调用者与被调用者之间同步调用的强耦合。
同步调用处理等待返回调用结果才能继续执行,如果调用出现异常,程序必须先处理这个异常。
消息队列异不架构不需要依赖被调用者的代码和处理结果,增加新的功能只需增加新的消息者即可。
消息队列实现异步架构是改善互联网应用写操作性能的重要手段,也是一种低耦合,易扩展的分布式应用架构模式。