searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

面试官常问的分布式系统幂等性设计

2024-01-17 08:53:19
5
0

在分布式系统中,由于网络延迟和错误重试,一个操作可能被多次调用执行。如果没有正确设计,就可能导致数据的重复修改或者异常情况。所以幂等性设计是分布式系统一个重要的考点。

常见的幂等性设计有:

  1. 使用唯一标识符防止重复提交

例如给每次操作赋予一个唯一的流水号uuid,在执行操作前先检查是否已经有这个uuid的操作。

  1. 使用版本号机制防止重复修改

例如给数据添加一个版本号version字段,在更新时加上version作为条件,保证同一时间只允许一个版本的修改。

  1. 将非幂等操作结果写入持久化存储

例如将修改结果写入数据库,保证即使重复调用也只会有一次实际效果。

  1. 使用消息队列防止重复消费

例如将任务放入队列中,使用消费者Acknowledge机制告知队列该任务已被执行,防止重复消费。

  1. 使用限流来保证调用频率的幂等性。比如每秒只允许一定数量的调用。

  2. 对幂等操作结果进行幂等检查。比如对更新后的数据进行校验,检查是否真正发生了变更。

  3. 将幂等操作封装成事务进行。比如使用分布式事务框架将一组幂等操作打包成一个原子事务。

  4. 对敏感资源设置重复调用过滤时限。比如重复调用间隔不能低于1秒,避免在时间窗口内重复执行。

  5. 使用请求和响应中带上的调用链路信息进行幂等检查。比如检查请求Id是否重复。

  6. 对部分不可重入操作使用锁机制。比如使用分布式锁保证同一时间只允许一个线程执行。

  7. 对幂等和不幂等操作进行明确区分和分类。不幂等操作需要进行结果缓存或者写入持久层。

  8. 结合应用业务特性进行幂等设计。比如某些更新操作本身就是幂等的。

  9. 在调用链路中追加调用记录并进行幂等检查。比如调用日志中检查是否有重复记录。

以上给出了分布式系统幂等性设计的一些其他方法,面试时可以介绍这些思路来回答面试官的进一级问题。

0条评论
0 / 1000