在Go主机之间共享变量
问题描述:
我有一个应用程序在golang中编写,它会将基本数据加载到全局变量中,因此使得应用程序响应速度更快,并且在用户更改变量时导出http界面以更新变量数据库。在Go主机之间共享变量
但我部署了另一台服务器,并使用了proxy.There出现了一个问题,当用户向更新url发送http请求时,它会将流量加载到其中一台服务器。所以该服务器更新此var,但其他服务器不更新。
如utils.go:
package utils
var BasicDatas map[string]*MyModel
func UpdateVar(){
// do some work
}
func PreLoadVar(){
// preload data to basicDatas
}
和共享多台主机之间的VAR的main.go
package main
import(
"codebase/utils"
)
func main(){
utils.PreLoadVar()
}
所以如果有反正或者任何libiary可以帮助做这项工作?
Nsq.io似乎是一个不错的选择,但我想寻求一个更简单的如果有。 谢谢:)
答
您的全局变量是一个非常简单的形式caching,当您在多台服务器上运行应用程序时,这是众所周知的问题。有几种方法可以解决此问题:
- 正如Bill Nelson所建议的那样:将数据库用作中央存储,并且不要将数据缓存在应用程序中。
- 用一个简单的键值存储区来外部化缓存,例如使用Redis和many Redis clients in Go之一。
- 使用分布式缓存,如groupcache。
如果你有你的手太多时间,你能使用像NSQ消息解决方案,以实现自己的分布式缓存,但我会建议反对 - 这不是一个简单的问题。
这是一个典型的进程间通信(IPC)问题,并没有一种万能的解决方案。 – tadman 2014-10-08 18:13:59