浅谈微服务异步解决方案

本文深入探讨了微服务中的异步设计,包括异步的定义、设计要点如数据一致性、防丢失和幂等性,以及多种异步方案,如接口响应式设计、回调模式、发布订阅式设计和基于任务管理。文章强调了异步设计应根据业务需求,避免盲目使用,并提供了防止数据丢失和确保数据一致性的策略。
摘要由CSDN通过智能技术生成

导言

异步是一种设计思想,不是设计目的,因此不要为了异步而异步,要有所为,有所不为。 异步不是『银弹』, 避免试图套用一个『异步框架』解决所有问题, 需要根据不同的业务特点或要求,选择合适的设计实现方式

同步和异步问题是大型分布式系统中需要慎重等待的问题,然而笔者发现公司和部门内相关问题系统性讨论较少, 因此笔者试图通过本文展开交流讨论。

异步定义

在软件设计领域, 异步和同步是一对孪生的设计思想

同步是一种阻塞式且有严格执行时序的设计思想, 必须一件一件事做, 等前一件做完了才能做下一件事。

异步则是一种非阻塞的设计思想, 可以同时做多件事,没有严格的执行顺序。

同步调用方(客户端)在请求发起后会一直阻塞并等待被调用方(服务端)返回响应结果,且仅当调用方获取响应结果后才会继续或终止执行。 例如近期较为常见的『核酸采样亭』虽然采样亭内有多人协作,但是为了保证采样人管一致, 核酸采样队伍就是顺序行进的, 前一个没有录入完,也不会继续下一位。

异步调用方(发布方)无需等待被调用方(订阅方)执行完所有逻辑,就可继续执行后续事情。例如一些餐馆的『排队』场景,往往点餐区仅需要完成『点餐收银』动作, 之后订单会转到后厨进行制作, 此时点餐人无需继续在点餐去等待, 可以去找位置坐下等取餐提醒, 或者心急的话在取餐区排队等待。 

同步

异步

特征

1)阻塞:调用发起方在请求提交后不会向系统交出控制权,而是持续等待被调用方返回响应结果。
2)强时序:由于阻塞式的交互,从而保证了调用发起方和被调用方交互的强时序。

1)非阻塞:任务提交后将控制权交予系统,系统可以进行其他任务的执行
2)无严格的执行时序: 调用发起方和被调用方执行逻辑无时序依赖

优点

1. 严格保证时序: 同步流程是最天然的控制过程顺序执行的方式, 因此对结果的处理始终和前文保持在一个上下文内。
2. 实时获取执行结果:调用方一定会等待被调用方返回执行结果
3. 异常处理方便:同步流程可以很容易捕获、处理异常。

1. 逻辑解耦:可在模块、服务、接口等不同粒度上实现解耦, 便于进行功能降级,提升系统稳定性
2. 故障隔离:在服务解耦的情况下, 异步执行的流程不会影响其他服务或流程, 避免出现雪崩的情况。
3. 降低接口延迟: 异步流程可以通过剥离非主流程逻辑, 尽快给调用方返回处理的结果。
4. 提升资源利用率:异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。

缺点

1. 耦合度高: 调用方强依赖被调用方的状态
2. 资源利用率低: 由于同步流程是顺序串行执行的, 调用方在获取被调用方返回前系统资源大多处于等待状态, 调用方的吞吐率会受限于被调用方的吞吐率
3. 性能下降:一旦被调用方某个服务响应特别慢,那么整个调用链的性能都会受到影响。
4. 稳定性: 被调用方一旦失败,会导致调用方也跟着失败,从而引起调用链雪崩的问题

1. 数据一致性影响:由于调用发起方和被调用方通过异步进行了解耦, 数据一致性难以保证, 需要提供额外机制进行补偿。
2. 维护成本高: 异步执行没有严格的时序, 会增加问题排查难度
3. 冲击下游依赖系统稳定性: 异步设计在提升现有系统吞吐的同时,也会增加下游系统资源损耗, 如设计不当,可能会影响下游依赖系统稳定性。

 

设计要点

在异步设计过程中需要重点关注的指标: 数据一致性

  • 数据防丢失
  • 幂等

数据一致性需求

什么是数据一致性

  • 强一致性:也称为原子一致性,线性一致性。即任意时刻,所有节点中的数据应该是一样的。任何节点的读操作都能读取到某个数据的最近一次写的数据。关系数据库 的本地事务( ACID )来保证数据的强一致性。
  • 弱一致性:有很多种不同的实现方式。目前分布式系统中广泛实现的是最终一致性。最终一致性是弱一致性的一种特例,保证用户最终能够读取到某个数据的更新。BASE 来做数据的最终一致。 BASE: basically-available, soft-state, eventual consistency.

为什么会有一致性的需求

  • 不同的业务场景涉及到操作同一条数据,处理不当时,可能导致多次操作后数据丢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值