KGo*_*KGo 2 python heroku instance newrelic
所以我的朋友告诉我,Heroku上的实例是持久性的(我不确定词汇是否正确,但他暗示所有用户共享相同的实例).
因此,如果我有app.py
,并且实例运行它,那么所有用户都共享该实例.这意味着我们可以使用dict作为临时缓存来存储小东西,以缩短响应时间.
因此,举例来说,如果我的服务API,我也许可以这样定义缓存这个,然后使用它.
那是真的吗?我试着查看,但找不到任何东西.
我在1 dyno上将链接的API部署到heroku,并且每秒只有几个请求,服务它需要100多秒.所以我的理解是缓存不起作用.(根据新的遗物,这里可能有用的是大多数时间是由于请求排队.)
Sim*_*tti 10
Heroku Devcenter有几篇关于Heroku架构的文章.
进程不共享内存.此外,您的代码被编译成一个slug并进行优化,以便分发给dyno管理器.简单来说,这意味着您甚至不知道哪台机器将执行您的代码.从理论上讲,5个用户点击您的应用程序可能会被路由到5个不同的计算机和进程.
最后但同样重要的是,请记住,如果您的应用只运行一个网络动态,那么该网络动态将会睡眠.您必须拥有多个网络动态,以防止网络动态故障.当dyno进入睡眠模式时,内存被释放,您将丢失内存中的所有数据.
这意味着您的方法不起作用.
一般来说,在Heroku中你应该使用外部存储.例如,您可以使用Memcached加载项并将缓存信息存储在Memcached中.
另请注意,您不应将文件系统用作缓存.不仅因为它比Memcached慢,还因为Cedar堆栈文件系统应该被认为是短暂的.