添加到taskqueue存储桶时,任务队列启动延迟和截止时间超出错误

时间:2015-12-02 04:03:06

标签: google-app-engine task-queue google-app-engine-python

两周前我遇到了一个奇怪的问题。我有一个在GAE Python(服务器端)运行的系统,有100个餐馆和1000个用户工作没有问题,但突然,因为两周前,每天高峰时间,任务队列中的任务在他们开始时经历了长时间的延迟,两周前只有1或2秒,现在是15到60秒,影响了用户体验和可用性。我必须使用taskqueues修改所有代码,并将其替换为对urlfetch请求异步的调用,而无需等待rpc(在某些客户中成功测试)。最糟糕的是,当在队列中添加任务时,他们在高峰时间(超过100 QPS)导致超过123错误,每天丢失50到1000个请求(每天300.000没有问题)。任务和我的过程非常快,它们只持续50ms到3秒,而不是更多,但我在“LIMBO”中获得了60000ms以上的很多,从未执行过甚至没有启动就被取消(我有记录.debug消息,在每个永远不会被执行的任务/进程的开始)。我有2个空闲实例和所有设置,以便在挂起延迟超过500毫秒时无限制地增加实例。我的实例的开始时间只有1秒,启动时没有特殊的进程。我有6个模块,用于任务的独立模块,问题是影响调用task.add的模块将任务添加到存储桶(而不是执行任务的模块)。我在本论坛和google文档中提出了所有修改以避免数据存储争用,我也停用了日志,我使用了很多memcache,我将F1实例更改为F2,蚂蚁此错误仍在继续。它出现了两个周期。我有一年半的时间运行我的应用程序,没有问题,突然出现了这个问题。

有没有人遇到同样的问题,在这种情况下,你有推荐吗?请注意,我的代码在一年内工作正常,这个问题出现在两周前,用户数量增长但不是很多,两周前有850个用户,现在是1.000,所以我认为不是规模问题。我的流程非常高效快捷。我有3年的GAE Python编程和30年的TI经验,对我来说这很奇怪,可能与平台变化有关。

这是我的module.yaml标准配置:

runtime: python27
api_version: 1
instance_class: F2
threadsafe: true

automatic_scaling:
  min_idle_instances: 2
  max_idle_instances: automatic
  min_pending_latency: 10ms
  max_pending_latency: 500ms
  max_concurrent_requests: 20

这是taskqueue配置(我有10个队列,每个队列有10个餐馆)

- name: TaskRegOr00  
  rate: 10/s  
  bucket_size: 100

1 个答案:

答案 0 :(得分:0)