我已经用Django编写了一个API,其目的是作为网站后端和我们使用的外部服务之间的桥梁,这样网站就不必处理对外部API的许多请求(CRM,日历事件,电子邮件提供商)等等.).
API主要轮询其他服务,解析结果并将其转发到网站后端.
我最初选择了基于Celery的任务队列,因为在我看来,这是将该处理卸载到另一个实例的正确工具,但我开始认为它并不适合这个目的.
由于网站需要同步响应,我的代码包含很多:
results = my_task.delay().get()
要么
results = chain(fetch_results.s(), parse_results.s()).delay().get()
哪种感觉不适合使用Celery任务.
在拉动数十个请求并并行处理结果(例如定期刷新任务)时效率很高- 但为简单请求(fetch - parse-forward)增加了大量开销,这代表了大部分流量.
我是否应该完全同步这些"简单请求"并保留Celery任务用于特定场景?是否有更符合我的API目的的替代设计(可能涉及asyncio)?
在EBS EC2实例上使用Django,Celery(带有Amazon SQS).