gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:13:02 25 4
gpt4 key购买 nike

我的服务器通过网络请求和抓取来执行相对昂贵的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)
}
}

最佳答案

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

  • Apache Kafka
  • RabbitMQ
  • NATS
  • MQTT
  • ActiveMQ

  • 云供应商还提供以下产品:
  • AWS SQS
  • AWS Kinesis
  • Google Pub/Sub
  • Azure Service Bus
  • 关于go - 如何让多个请求爆发等待首先完成(分布式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62856094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com