关于操作幂等性,美图技术团队给出一个解决方案,如下图所示。但是本人对这张图细节不是很了解,谁能帮忙解读一下以下这张图啊?
针对保证操作的幂等性,在web开发中有以下几种解决方案:
使用唯一的请求标识(Request ID):服务器为每个请求生成唯一的标识,客户端在请求头中包含这个标识,服务器检查标识是否已经存在,如果存在则说明请求已经处理过,直接返回上次响应结果即可。如果标识不存在,则进行正常的业务处理并生成新的标识返回给客户端。需要注意的是,这种方式需要后端业务代码进行修改,添加请求标识的检查和设置逻辑。
使用Token机制:客户端在发送请求时先获取一个唯一的Token,然后将Token作为请求参数进行发送。服务器端判断Token的有效性,如果有效,则说明请求还没有处理过,进行正常的业务处理,并将Token标记为已使用;如果无效,则直接返回上次响应结果。这种方式需要后台改造,添加Token的检查和设置逻辑。
使用乐观锁机制:对于需要保证幂等性的操作,可以在业务表中添加一个版本号字段,每次执行操作之前,先判断版本号是否相等,如果相等,则执行操作并将版本号加1,如果不相等,则直接返回上次响应结果。需要注意的是,这种方式需要后端业务代码进行修改,添加版本号的检查和设置逻辑。
使用幂等性校验框架:针对一些常见的幂等性操作,可以使用开源的幂等性校验框架来实现,比如美图技术团队提供的幂等性框架Idempotent。该框架可以通过注解的方式,轻松实现各种幂等性操作,并且支持高性能、高可用等特性。具体实现细节可以参考官方文档和源码。