Skip to content

Celery应用

TFRobotServer中会存在一些异步任务,比如定时任务(刷新AccessToken)、后台任务(partition_doc)等,这些任务会通过Celery来实现。

Celery实现的能力都应该是TFRobot无关的,所有的任务要求均通过Broker传入,Worker执行。即一个企业内,所有的TFRobot都会共用一个Celery集群,所有的消息传递也基于企业内统一的RabbitMQ,因此在设计Celery任务时不可以依赖于TFRobot的内部状态。

重点关注的Celery概念

AutoScaling

支持的池类型:prefork, gevent

自动缩放组件用于根据负载动态调整池的大小:

自动缩放器在有工作要做时增加更多的池进程,并在工作负载低时开始减少进程。

可以通过 --autoscale 选项启用自动缩放,该选项需要两个数字:池进程的最大和最小数量:

--autoscale=AUTOSCALE 通过提供 max_concurrency 和 min_concurrency 启用自动缩放。例如: --autoscale=10,3 (始终保持 3 个进程,但必要时可增长到 10 个)。

你还可以通过继承 Autoscaler 类定义自己的自动缩放规则。一些度量标准的想法包括负载平均值或可用内存量。你可以通过 worker_autoscaler 设置指定自定义的自动缩放器。