对云应用平台的分布式运行方式算是理解了

这两天用python搞了一个小程序,本地运行良好,发布到新浪云上之后问题就来了,表现为配置不生效。

其实看到这种现象就差不多能理解了,我的程序中为了加速访问,使用了全局变量来缓存配置。本地调试时,只有一台电脑,只有一个应用实例,修改配置后把全局变量更新下就OK了。但是新浪云上,是分布式的,应用会分布在多台不同的服务器中,这时不知道到底有多少个应用实例在同时运行。通过线上网页请求方式修改配置,只会刷新一个应用实例的全局变量,其他实例是不变的,这就造成了配置不同步或不生效。

唉,看来全局变量是不能有了,所有配置还是老老实实扔数据库或者Memcache吧,每次请求都从数据库重载配置,修改配置时直接写入数据库。

百度这个问题时,看到论坛中有人说,这个设计只适合php,对其他语言来说,都是致命的。虽然不至于这么严重,但总归是略有麻烦的。

另外找到了新浪云具体的运行方式,应该是在代码提交后,所有服务器全部重载应用,在应用被请求时,创建应用实例,之后会缓存实例一段时间,以加快访问速度。一段时间的空闲后,系统会回收缓存的应用。回收缓存后如果再次请求应用,服务器就会重新创建应用实例。按这个处理方式,在一定时间内,系统“应该”是可以自动完成所有应用的重载的,但不能依赖系统的自动处理,万一应用一直被访问,系统也许就永远不会自动重载了。

再次强调,全局变量不能有!但愿新浪云能帮我改掉这个坏习惯吧。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

扫码去手机上看