如何让多个请求爆发等待首先完成(分布式)

时间:2020-07-12 01:04:15

标签: go kubernetes redis queue message-queue

我的服务器通过网络请求和抓取来执行相对昂贵的cpu操作,因此我使用缓存来优化性能,但同时也避免了同一项目的请求突发的开销,因此我创建了“等候室”接受第一个请求,然后首先完成,其余的接收响应。运行一个实例时,这可以正常工作。但是,如果我想将其扩展到3个节点的集群,该如何解决呢?


cached, err := exists(item)
handleErr(err)
if cached == true {
    cachedReport := getCachedRecord(item)
    fmt.Println("found in cache, sending")
    w.Write(cachedReport)
} 
else {
    fmt.Println("got request for ", item)
    if group, ok := bmap[item]; ok {
        fmt.Println("joining group for " + item)
        member := group.Join()
        val := member.Recv()

        if b, ok := val.([]byte); ok {
            fmt.Println("received from waitng, sending")
            elapsed := time.Since(start)
            log.Printf("Request for %s took %s", ticker, elapsed)
            w.Write(b)
        }
    }

1 个答案:

答案 0 :(得分:0)

听起来像第三方排队/消息传递机制/项目的绝佳用例:

云供应商也提供他们的产品: