分布式服务的复制测试、端口复用及客户端负载均衡
1. 复制测试
在分布式系统中,需要对Raft的复制功能进行测试。通过向领导者服务器追加一些记录,然后检查Raft是否将这些记录复制到了其追随者。由于Raft追随者在短延迟后才会应用追加消息,因此使用 testify
的 Eventually()
方法,给Raft足够的时间完成复制。
require.Eventually(t, func() bool {
for j := 0; j < nodeCount; j++ {
got, err := logs[j].Read(off)
if err != nil {
return false
}
record.Offset = off
if !reflect.DeepEqual(got.Value, record.Value) {
return false
}
}
return true
}, 500*time.Millisecond, 50*time.Millisecond)
完成测试的代码如下:
err := logs[0].Leave("1")
require.NoError(t, err)
time.Sleep(50 * time.Millisecond)
off, err := logs[0].Append