V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fffq
V2EX  ›  程序员

分布式环境 如何合并请求

  •  
  •   fffq · 66 天前 · 1373 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 的 singleflight 是不是只作用在单进程?

    5 条回复    2024-09-05 14:43:26 +08:00
    2Nfree
        1
    2Nfree  
       66 天前
    没搞懂场景是什么样的,singleflight 是只能作用在单进程的,如果要是到多个进程要用分布式锁吧,etcd ,zookeeper?
    showB1
        2
    showB1  
       66 天前
    分布式环境? request_1 打到 pod_1,request_2 打到 pod_2 ,这种合并起来?
    你这合并的规则不清晰。。。
    1 、前端限制达到相同的请求只发一次达到“合并”效果
    2 、不同的 c 端发来的请求,假设你的规则是参数一样就合并?那直接套一层缓存是不是能达到类似的效果呢?
    3 、缓存不行,就要合并,那就在网关搞事情喽、统一、快捷。
    4 、singleflight 防止击穿?加上呗、几行代码
    asAnotherJack
        3
    asAnotherJack  
       66 天前
    多少服务啊,如果单纯为了防击穿,只合并单进程内的也足够了吧
    crysislinux
        4
    crysislinux  
       66 天前 via Android
    分布式要搞的话可以借助 redis setnx 加个简单的锁。获取锁的进程得到数据之后写入 redis cache 然后 publish 一下,别的进程自己去取。。一般应用很难有这个需求吧。。我们倒是刚好有这需求,应用完全依赖第三方的数据,然后每天有限制调用量,我们就用这种办法减少调用量。
    fffq
        5
    fffq  
    OP
       65 天前
    @2Nfree 了解
    @showB1 为了防击穿,但是先 select 在 insert ,整个放在 fn 里会不会把流程时间拉长了
    @asAnotherJack 防击穿
    @crysislinux 场景合适
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1124 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.