smallnest / rpcx

Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily. Try it. Test it. If you feel it's better, use it! 𝐉𝐚𝐯𝐚有𝐝𝐮𝐛𝐛𝐨, 𝐆𝐨𝐥𝐚𝐧𝐠有𝐫𝐩𝐜𝐱! build for cloud!
https://rpcx.io
Other
8.11k stars 1.17k forks source link

协程调度顺序不确定可能引发问题 #778

Closed cool-colo closed 1 year ago

cool-colo commented 1 year ago
image

这段代码会不会导致老的pairs覆盖新的pairs?

目前线上存上2个弹性节点,每天定时下线, 每周都会出现弹性节点下线后,客户端还在请求的情况, 需要重启客户端服务才行。 zk里面确定已经不存在下线节点了 猜测可能是上面代码引起的问题。 也可能不是这的问题,还请作者看一下。

smallnest commented 1 year ago

不会是这里导致的。两个节点即使不是同时下线,它们的先后顺序也不会道中你说的那个问题。 服务端下线后,客户端是不会立马感知到服务端下线的,因为服务端告诉etcd, client监控到etcd的日志都是需要的时间的,可可能有秒级的延迟。

如果你的服务区下线是没有主动调用Unregister, 那么etcd感知到服务端下线是分钟级的。

另外,如果你还是怀疑有问题的话,你可以在for循环之上把pair打印出来,看看客户端是否收到了服务端下线的通知,这个时间点和客户端调用的时间先后顺序