我有一个运行 10 个 Web 服务(同类)的 Docker 集群。他们都在使用 MongoDB,其中包括数据持久性。
这是在main()服务启动时从 调用的代码:
// Init establishes a connection with MongoDB instance.
func Init(mongoURL string) *mgo.Session {
mongo, err := mgo.Dial(mongoURL)
misc.PanicIf(err)
// make sure we are strongly consistent
mongo.SetMode(mgo.Strong, true)
// update global state
db = mongo
Entries = db.DB("").C("entries")
Channels = db.DB("").C("channels")
Settings = db.DB("").C("settings")
Metadata = db.DB("").C("metadata")
// only use this on first load, to confirm the settings are there
// every refresh should be done via UpdateGlobalSettings (thread-safe)
GlobalSettings = &GlobalSettingsStruct{}
GlobalSettings.Init()
return mongo
}
所以基本上API和工人只需使用全局变量,例如Entries,Settings等等。
运行一段时间后,该服务停止正常工作。每蒙戈动作,比如Entries.find(...)回报的错误:Closed Explicitly。
这意味着什么?我应该定期刷新 mongoDB 连接还是应该关闭它并重新建立与每个请求的连接?
该应用程序以性能为导向,因此尽管 mongo 连接已关闭,但一切仍在运行,因为一切都在内存或集群缓存上运行。我不想做一些延迟处理的愚蠢事情。
12345678_0001
蛊毒传说
慕哥9229398
相关分类