情况:
我的项目大多是自动化的任务。我的GAE (标准环境)应用程序有40个这样的crons作业,都在默认模块(前端)上运行:
- description: My cron job Nth
url: /mycronjob_n/ ###### Please note n is the nth cron job.
schedule: every 1 minutes
每个cron作业
@app.route('/mycronjob_n/')
def mycronjob_n():
for i in (0,100):
pram = prams[i]
options = TaskRetryOptions(task_retry_limit=0,task_age_limit=0)
deferred.defer(mytask,pram)
mytask
在哪里
def mytask(pram):
#Do some loops, read and write datastore, call api, which I guesss taking less than 30 seconds.
return 'Task finish'
问题:
作为问题的标题,我的RAM快用完了。前端实例小时数增加到100小时。
我的错误想法?
我的问题:(目的:尽量降低前端和后端实例的时长,我接受延迟)
如果3-4个实例无法处理4000个请求,为什么GAE不再增加10 - 20个F1实例,然后在空闲时关闭?我在app.yaml中设置了自动缩放。我在这里看不到GAE自动缩放的含义。
@app.route('/mycronjob_n/') def mycronjob_n():
对于(0,100)中的i: pram = pramsi options = TaskRetryOptions(task_retry_limit=0,task_age_limit=0) mytask(pram) #调用函数mytask
在这里,我的应用程序是否每分钟有40个请求,每个请求运行100 x 30秒=3000秒?那么,这种方法是否也会返回内存不足呢?我是否应该创建一个在F1实例上运行后端服务,并将所有cron作业放在该后端服务上?我听说一个请求可以运行24小时。
我的遗憾:-我很遗憾我选择了GAE来做这个项目。我选择它是因为它有空闲层。但我意识到自由层只是出于兴趣/测试的目的。如果我运行一个真正的应用程序,成本会增加得非常快,这让我觉得GAE很昂贵。尽管我尽了最大努力优化数据存储的读/写,但它们的开销还是很大的。前端时间也总是很长。我每月为GAE支付40美元。每月40美元,如果我选择Heroku,Digital Ocean,也许我可以得到更好的服务器?你认为这样对吗?
发布于 2018-08-29 10:24:25
如果3-4个实例无法处理4000个请求,
为什么不再添加10 - 20个F1实例,然后在空闲时关闭?
GAE最有可能做到这一点--生成几个实例。但是你每分钟都在发送请求,它们不会达到空闲状态足够长的时间,所以它们不会关闭。这会使您的实例运行数小时。
你可以对它做两件事:
您还应该仔细阅读How Instances are Managed。
Important:当您按实例小时数计费时,您的计费行项目中将看不到任何实例类。相反,您将看到相应的实例小时数倍数。例如,如果您使用一个F4实例一个小时,您不会看到列出"F4“,但您会看到按F1费率计费的四个实例小时。
关于内存使用率,将cron作业分成多个任务不一定有帮助,请参阅App Engine Deferred: Tracking Down Memory Leaks
最后,比较GAE和Heroku的成本,Digital Ocean不是一个苹果对苹果的比较: GAE是PaaS,而不是IaaS,我预计它会更贵。选择一个或另一个真的取决于你。
https://stackoverflow.com/questions/52067297
复制相似问题