sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.56k stars 1.14k forks source link

存在一个命令可能被执行两次的风险 #1014

Closed xuziyang closed 1 year ago

xuziyang commented 1 year ago

客户端发送一条命令到Leader 节点,Leader 可能在执行命令之后但响应客户端之前宕机,此时客户端再去寻找下一个 Leader,同一个命令就会被执行两次

就是说,客户端协议设计有缺陷

fengjiachun commented 1 year ago

协议层没有对这种场景进行处理,一般可以在上层解决,客户端可以携带一个唯一 id (业务层自己生成),服务端的业务状态机根据这个 id 做幂等判断

killme2008 commented 1 year ago

这不是 raft 算法要解决的问题。任何远程调用都有这个问题,需要应用层自己设计解决。