我的服务器通过网络请求和抓取来执行相对昂贵的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)
}
}
答案 0 :(得分:0)
听起来像第三方排队/消息传递机制/项目的绝佳用例:
云供应商也提供他们的产品: