使用Go在主机之间共享变量

时间:2014-10-08 17:39:33

标签: memory go

我在golang中编写了一个应用程序,它将基本数据加载到global var,因此快速启动应用程序响应,并在用户对数据库进行更改时导出http接口以更新var。

但我部署了另一台服务器,并使用了proxy.There有一个问题,当用户向更新URL发送http请求时,它会将流量加载到其中一个服务器。所以该服务器更新此var,但其他服务器不更新。 / p>

例如utils.go:

package utils

var BasicDatas map[string]*MyModel

func UpdateVar(){
// do some work
}
func PreLoadVar(){
// preload data to basicDatas
}

和main.go

package main
import(
"codebase/utils"
)
func main(){
utils.PreLoadVar()
}

所以,如果无论如何要在多个主机之间共享var?或者任何一个库可以帮助完成这项工作?

Nsq.io似乎是一个不错的选择,但如果有的话,我想寻求一个更简单的选择。 感谢:)

1 个答案:

答案 0 :(得分:1)

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

  1. 根据Bill Nelson的建议:使用您的数据库作为中央存储,根本不要将数据缓存在您的应用程序中。
  2. 使用简单的键值存储区域化您的缓存,例如使用Redismany Redis clients in Go之一。
  3. 使用分布式缓存,例如groupcache
  4. 如果您手上有太多时间,可以使用像nsq这样的消息传递解决方案来实现您自己的分布式缓存,但我建议不要这样做 - 这不是一个简单的问题。