Celery(分布式任务队列)入门学习笔记

在步入到 AWS 后,设计一个典型的分布式计算任务模式是

  1. 提交任务的客户端把一组组待计算任务的输入编制成消息发送到 SQS 或 SNS 队列中
  2. SQS 消息可被  ECS 或 Lambda 处理, SNS 消息还能触发 Lambda,ECS/Lambda 完成实际的计算任务
  3. 结果可以保存到 Redis, S3 或别处, 如果提交任务端想要获取计算结果,可用 ID 来追踪

用 ECS 的好处是可以基于 SQS 的消息数进行 AutoScaling 配置,决定 Worker 的规模; 用 Lambda 适当的用 Concurrency 数来限定 Lambda 的实例数。

而 Python 的 Celery 让这一切变得更简单,它其实就是以上设计的一个集成方案。它以配置的方式选择使用任务队列(Broker), 结果存储方式(Backend), 让任务提交与 Worker 的代码实现简单化。 阅读全文 >>

RabbitMQ 初体验(安装,概念及应用)

之前工作中用过 JMS 的 IBM MQSeries, 自己试玩过 ActiveMQ, 再就是 Kafka, 再到 AWS 上的 SQS 等消息队列。打算调教一下 Python 的 Celery,它首推用 RabbitMQ 作为它的消息,当然也可选择 Redis 或 AWS 的 SQS,首先感觉有必要体验一下 RabbitMQ。

RabbitMQ 是一个 AMQP(Advanced Message Queuing Protocol) 的开源实现, 相关的实现产品还有 OpenAMQ, StormMQ, Apache Qpid, Red Hat Enterprise MRG, Microsoft Azure Service Bus 等,AMQP 与 JMS 还存在一些交集。

本文不打算介绍太多的 RabbitMQ 的一些概念,主要是体验一下如何安装,怎么发送和接受消息,初次体验就不直接上 Docker 了,用 Docker 根本不知道 RabbitMQ 是个什么东西,所以用一个 Ubuntu 20.04 虚拟机来一步步安装。

先用 Vagrant 准备一个虚拟机,Vagrantfile 文件内容如下 阅读全文 >>