分布式弹力设计之异步通信

2018-04-02  本文已影响0人  Doit8

讲到异步通信,不得不先提同步通信,如果把打电话比做同步,那短信就是异步。同步操作有个优点,实时性好,但存在以下问题。

1 影响吞吐量,系统间同步通信,吞吐量由最慢的那个系统决定。

2 浪费系统资源,同步通信是阻塞的,导致调用方一直占用着系统资源。

3 只能一对一

4 系统之间强依赖,容易出现连锁反应

异步通信可以很好的解决以上问题。常见的异步通信模型有三种,请求响应,发布订阅,通过消息队列

1 请求响应,这个模型常见的有两种方式,前面的处理一样,接受方接到数据后立即回复已收到,正在处理,区别在于,一种是调用方轮询结果,另一种接收方回调。很多支付页面就是通过回调的方式,支付成功后回调接口,通知调用方。请求响应模型实际上两者还是耦合在一起。调用方依赖于接收方。

2 发布订阅模型,订阅者将自己注册到,发布者的订阅列表中,当发布者有消息发布是,向列表中的所有成员发送消息。因为订阅者需要向发布者注册,所以他们之间还是有耦合关系,订阅者依赖于发布者。

3 通过消息队列,生产者发送消息到队列上,消费者监听队列,获取数据。这个模型双方是完全解耦。生产者只管生产数据,不用关心谁处理。而消费者也不关心谁生产的数据,只管消费数据。

以上是异步通信常见的三个模型。其中二三两用称之为事件驱动模型。他又以下好处

1 服务之间完全解耦,使得服务之间平等,无状态,容易横向扩展实现高可用。

2 服务的开发,测试,运维都是高度隔离的,可以对某个服务进行升级而不影响到其他服务。

3 不会出现连锁反应

4 容易增加一些适配器,如日志,限流,熔断等

5 使得每个服务可以按照自己的处理速度进行处理。

事件驱动模型也有缺点

1 业务流程变复杂

2 事件事件顺序无法保证

3 分布式事务问题,要引入两段式事务,或者最终一致性。

异步设计的要点

为什么要使用异步通信

1 服务间解耦,做到更好的隔离性,以便故障出现时,不会干扰到其他服务。

2 增加吞吐量

3 服务之间可以按照自己的处理速度工作,通过消息队列,可以做到所谓的削峰的目的,保护系统。

4 独立部署,不影响其他服务,提高开发和运维的效率。

设计要点

1 消息队列的高可用

2 业务流程的可追踪

3 业务状态由总控方控制。

4 发送确认机制,失败重试机制,注意消息处理的幂等性。

上一篇下一篇

猜你喜欢

热点阅读