12.25 Day 10 - 弹力设计篇之“异步通讯设计”

大家好,我是 Snow Hide,作为《左耳听风》这个专栏的学员之一,这是我打卡的第 10 天,也是我第 10 次进行打卡这种操作。

今天我温习了该专栏里一篇叫《弹力设计篇之“异步通讯设计”》的文章。

关键词总结:同步通讯、同步通讯问题(调用链依赖、调用链阻塞、串行通讯、骨牌效应)、异步通讯、异步通讯方式(请求响应、发送订阅、代理)、事件驱动设计优点(可重用性、高度隔离、无阻塞、适配器接入、访问量处理)、事件驱动设计缺点(流程管控、顺序问题、事务复杂度)、异步通讯设计关注点(解耦、隔离、并发)、异步通讯注意事项(顺序、丢失率、记录、幂等)。

 

所学总结:

 

同步通讯

同步通讯的特点是同一时间内只能处理一件事情。
 

同步通讯问题

调用链依赖

服务间如果使用同步通讯,那么,就会出现木桶效应。整个系统的响应速度将取决于响应速度最慢的那个服务。

调用链阻塞

同步调用会使发送方阻塞并等待接收方的响应返回。

串行通讯

同步调用的方式和串行类似,一次只能发送一条消息给接收方。

骨牌效应

同步调用中,一旦有一个接收方出问题,那么发送方将被一直被阻塞。
 

异步通讯

异步通讯可以解决同步通讯里出现的问题,避免通讯阻塞、骨牌效应等问题的出现。
 

异步通讯方式

请求响应

请求响应的方式是发送完消息后直接返回。接收返回结果的方式有两种:

  • 轮询:发送方每隔一段时间查看一下是否出现结果。
  • 回调:接收方处理完结果后将结果返回至发送方提供的回调地址。

这种方式的缺点是耦合依然存在。

发送订阅

发送订阅的方式是接收方订阅发送方所发的消息,发送方会将消息发送至消息队列中。

这种方式的缺点是接收方依赖于发送方,所以还存在一些耦合。

代理

代理的方式是发送和接收两方都看不到对方,他们只跟 Broker 进行通讯。发送方将消息发送至 Broker,接收方则从 Broker 订阅消息。

代理的特性如下:

  • 高可用:代理需要随时处在可用状态,因为发送和接收方需要通过它来进行通讯。
  • 高性能:代理的响应必须要快,不能让发送以及接收的任何一方产生阻塞。
  • 持久化:接收到的数据要一直持,直至代理收到来自接收方返回的 ACK(Acknowledge,也即消息处理完毕,可以将对应数据从队列中剔除) 为止。

 

事件驱动设计优点

发送订阅和代理都属于事件驱动架构(EDA,Event Driven Architecture)。代理是最好的事件驱动架构。

可重用性

服务之间没有依赖,所有服务都是可以被重复使用的。

高度隔离

服务之间是完全隔离的,这包括它们的开发、测试、运维以及故障。

无阻塞

服务之间不会产生阻塞,因为它们是通过代理来进行交互的。

适配器

服务适配器的添加将变得简单,例如日志、认证、版本、限流、降级、熔断等等。

访问量处理

服务之间不会再产生一方拖慢另一方速度的情况。
 

事件驱动设计缺点

流程管控

事件驱动设计中的业务流程将变得难以管控。

顺序问题

事件驱动设计中的事件触发流程并不是按顺序执行的,需要一个借助状态机机制来解决类似的问题。

事务复杂度

事件驱动设计会将分布式事务变得更复杂,我们可能需要使用 2PC 或最终一致性来解决这种问题。
 

异步通讯设计关注点

解耦

异步通讯设计的目的之一是将系统中的服务进行解耦,服务之间通过代理进行通讯。

隔离

将服务之间进行解耦的目的之一是确保其他服务不会受出故障服务的影响。

并发

异步通讯设计最主要的目的是提高整体系统的可访问请求量,服务之间发送或接收代理的消息时不会被阻塞。
 

异步通讯注意事项

顺序

异步通讯中做不到消息按顺序处理的可能性,所以我们的设计中需要考虑服务在处理乱序消息方面的能力。

丢失率

异步通讯消息需要被跟踪,否则当出现问题时我们很难直到它们在哪里。

记录

异步通讯中消息所到之处都要留下记录,以便我们在系统出现故障时能够方便的定位到消息最后一次到达的地方,好让我们能从那里开始继续。

幂等

异步通讯中的消息在代理没有收到 ACK 时可以进行多次重传,但是接收消息的一方要确保相同的消息如论被重传多少次都能被处理一次。
 

末了

重新总结了一下文中提到的内容:同步通讯的问题、异步通讯的好处以及种类、事件驱动设计和异步通讯设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值