在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似乎是一个不错的选择,但我想寻求一个更简单的如果有。 谢谢:)

+0

这是一个典型的进程间通信(IPC)问题,并没有一种万能的解决方案。 – tadman 2014-10-08 18:13:59

您的全局变量是一个非常简单的形式caching,当您在多台服务器上运行应用程序时,这是众所周知的问题。有几种方法可以解决此问题:

  1. 正如Bill Nelson所建议的那样:将数据库用作中央存储,并且不要将数据缓存在应用程序中。
  2. 用一个简单的键值存储区来外部化缓存,例如使用Redismany Redis clients in Go之一。
  3. 使用分布式缓存,如groupcache

如果你有你的手太多时间,你使用像NSQ消息解决方案,以实现自己的分布式缓存,但我会建议反对 - 这不是一个简单的问题。