我正在尝试使用celery和rabbitmq每分钟调用近1万个REST API请求。但是,发布速度太慢,几乎达到100 / s。当我将请求减少到每分钟近1000个请求时,其发布速度高达400 / s。
增加工作人员,将工作人员的交付方式更改为暂时的,增加并发性(使用事件变量作为池),将任务划分为使用不同的队列并没有很大地影响公共比率。仅减少任务数就可以显着提高发布率。
如何增加rabbitmq的发布率?还有什么应该尝试的?
我正在使用celery版本4.2.2,rabbitmq版本3.6.10。 AWS EC2 t2.large(vCPU = 2,8GB RAM)实例用于数据库(mongodb),消息队列(rabbitmq)和管理(rabbitmq admin和flower) AWS EC2 t2.micro(vCPU = 1,1GB RAM)实例用于工作服务器
celery.py中的配置
CELERY_USERNAME = get_env_variable('CELERY_USER')
CELERY_PASSWORD = get_env_variable('CELERY_PASSWORD', is_password=True)
CELERY_HOSTNAME = get_env_variable('CELERY_HOST')
CELERY_VHOST = get_env_variable('CELERY_VHOST')
CELERY_BROKER = 'amqp://%s:%s@%s/%s' % (CELERY_USERNAME, CELERY_PASSWORD, CELERY_HOSTNAME, CELERY_VHOST)
app = Celery('scheduler',
broker=CELERY_BROKER,
broker_pool_limit=10,
include=['scheduler.tasks'],
)
用于运行工作程序的命令
celery -A scheduler worker -l info -c 50 -P eventlet --prefetch-multiplier 10
当我尝试每分钟1k个请求时
最后两个支柱是相关结果
当我尝试每分钟发送1万个请求时
-编辑-
我为每个任务记录了一些日志,发现celery beat Scheduler缓慢发送任务。有什么办法可以提高这个比率?