golang 的 singleflight 是不是只作用在单进程?
1
2Nfree 109 天前
没搞懂场景是什么样的,singleflight 是只能作用在单进程的,如果要是到多个进程要用分布式锁吧,etcd ,zookeeper?
|
2
showB1 109 天前
分布式环境? request_1 打到 pod_1,request_2 打到 pod_2 ,这种合并起来?
你这合并的规则不清晰。。。 1 、前端限制达到相同的请求只发一次达到“合并”效果 2 、不同的 c 端发来的请求,假设你的规则是参数一样就合并?那直接套一层缓存是不是能达到类似的效果呢? 3 、缓存不行,就要合并,那就在网关搞事情喽、统一、快捷。 4 、singleflight 防止击穿?加上呗、几行代码 |
3
asAnotherJack 109 天前
多少服务啊,如果单纯为了防击穿,只合并单进程内的也足够了吧
|
4
crysislinux 109 天前 via Android
分布式要搞的话可以借助 redis setnx 加个简单的锁。获取锁的进程得到数据之后写入 redis cache 然后 publish 一下,别的进程自己去取。。一般应用很难有这个需求吧。。我们倒是刚好有这需求,应用完全依赖第三方的数据,然后每天有限制调用量,我们就用这种办法减少调用量。
|
5
fffq OP @2Nfree 了解
@showB1 为了防击穿,但是先 select 在 insert ,整个放在 fn 里会不会把流程时间拉长了 @asAnotherJack 防击穿 @crysislinux 场景合适 |