美文网首页
分布式弹力设计之异步通信

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

作者: Doit8 | 来源:发表于2018-04-02 23:27 被阅读0次

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

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

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

    3 只能一对一

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

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

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

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

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

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

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

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

    3 不会出现连锁反应

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

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

    事件驱动模型也有缺点

    1 业务流程变复杂

    2 事件事件顺序无法保证

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

    异步设计的要点

    为什么要使用异步通信

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

    2 增加吞吐量

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

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

    设计要点

    1 消息队列的高可用

    2 业务流程的可追踪

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

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

    相关文章

      网友评论

          本文标题:分布式弹力设计之异步通信

          本文链接:https://www.haomeiwen.com/subject/euufhftx.html