分布式系统中的接口幂等性和顺序性

幂等性问题

这个问题在分布式系统中很常见,所谓的幂等性,就是说一个接口,多次发起同一个请求,你这个请求得保证结果是准确的,比如不能多扣款,不能多插入一条数据,不能将统计值多加了1,这就是幂等性

保证幂等的方式

  1. 对于每个请求必须有一个唯一的标识,举个例子,订单支付请求,肯定得包含订单id,一个订单最多支付一次
  2. 每次处理完请求之后,必须有一个记录标识这个请求已经处理过了,比如说常见的方案是在mysql中记录状态,比如支付之前记录一条这个订单的支付流水,而且支付流水采用了orderId作为唯一键,只有成功插入这个支付流水,才能执行实际的支付扣款
  3. 每次接受请求需要进行判断之前的是否已经处理过的逻辑处理,如果一个业务已经处理过了,那么就不用再处理了

分布式系统的接口顺序性

其实在一般的情况下,分布式系统中的顺序性不是必须要求的,但是再某些极端情况下,需要保证接口调用的顺序性,譬如说,需要对一条数据进行修改后删除,但是执行时顺序错了,先删除再修改,那么本来这条数据应该被删除,但是现在数据还存在,导致后续很多问题

保证顺序性的方法

  1. 通过线程内存队列,每个线程监听一个内存队列,然后将需要保证顺序性的服务链压到一个内存队列中,有一条线程监听并执行
  2. 通过分布式锁(可以保证100%的强一致性),通过zookeeper生成一个分布式锁,再锁中维护一个步骤信息,由其余的服务开始识别并获取锁来执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值