2014-10-08 183 views
0

我有一個應用程序在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

回答

1

您的全局變量是一個非常簡單的形式caching,當您在多臺服務器上運行應用程序時,這是衆所周知的問題。有幾種方法可以解決此問題:

  1. 正如Bill Nelson所建議的那樣:將數據庫用作中央存儲,並且不要將數據緩存在應用程序中。
  2. 用一個簡單的鍵值存儲區來外部化緩存,例如使用Redismany Redis clients in Go之一。
  3. 使用分佈式緩存,如groupcache

如果你有你的手太多時間,你使用像NSQ消息解決方案,以實現自己的分佈式緩存,但我會建議反對 - 這不是一個簡單的問題。