如何避免相互依赖的系统间耦合
两个应用熊中需要远程传递数据,常规的做法是直接进行远程调用,使用 Http,或者 其他 RMI 方式进行调用,但是这种方式将系统耦合起来,一旦被调用的系统产生了故障或者升级,都可能会引起调用者导致不得不跟随升级。
如何避免这种情况?
主要手段是使用消息队列的异步架构。
消息队列实现异步架构
消息队列实现异步架构是相对于同步队列来说的,同步架构是指,当应用程序调用服务是,当前程序需要阻塞等待服务完成,才能接着进行后续执行。
消息异步架构如下:
消息队列异步架构主要角色包括消息生产者,消息队列,消息消费者。消息生产者通过是主应用程序生产者将调用请求封装成消息发送给消息队列。 消费者消费程序从队列中获取,消费消息,由消费者完成业务逻辑处理。
点对点模式场景
多个消费生产者向消息队列发送消息,多个消息消费者消费消息,每个消息只会被一个消息消费者消费。
一对多
消息生产者可以按照主题进行发送,多个消息消费者可订阅同一个主题,每个消费者都可以收到这主题消息拷贝,然后按照自己的业务逻辑分别进行处理。
消息队列异步架构优点
使用消息队列异步架构,可以实现更高的写操作性能和更低的耦合性
- 改善写操作请求的响应时间
使用消息队列,生产者应有程序只需要将消息发送到消息队列,然后继续执行,无需等待消息消费处理,加快了响应速度。
- 更容易实现伸缩
应用程序可以通过负载均衡实现集群伸缩,这个是基于应用服务器级别的伸缩,如果使用消息队列,将图片处理相关的操作放在消费者服务器上,那么就可以单独对图片处理的消费者集群进行伸缩。这个是基于应用级别的伸缩。
- 削峰 互联网的访问压力随时都在变化,系统的访问高峰和低谷的并发压力差别非常大。因此可以在压力最大的时候,使用消息队列,这样将需要处理的消息放入消息队列,消费者可以控制消费速度,能够降低系统访问高峰时的压力,在访问低谷时续消费消息队列中的消息。
- 解耦
调用这发消息到消息队列,不需要依赖被调用这的代码和处理结果,增加新的功能,只需要增加新的消费者即可。
总结
消息队列异步架构是改善互联网应用操作性能的手段,是低耦合,易扩展的分布式应用架构模式。