Code MR
# Testing Distributed Systems for Linearizability
不需要考虑执行失败的情况
linearizable. notes
考虑 rpc 调用失败,多次调用,多个 client 只需要确保一定会调用成功就行。
Client:,需要一个 id 标识,然后一个 client 还维护 sequence 来标识多次操作调用。
这里 id 生成使用了随机数(伪随机)的,场景简单,正确应该使用分布式 ID 生成算法如 UUID,Snowflake,原子自增。
Server: 记录每个 client 的最后一次执行结果,seq/clientID/result
如果直接多加个 map[client_id]info,让 get/put/append 都缓存,下面两个测试 memory 过不去。
其实 GET 和 PUT 本身就是幂等的,不需要缓存结果。