IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

分布式消息系统尝试(rabbitmq, celery, redis)

Vimer 2014-11-19 23:07:06 累计浏览 3,509 次
本机暂存

   最近在调整游戏的后台架构,之前因为需要快速出产品,所以整个代码都揉成一团,也基本没有做任何分层处理。现在服务器端的开发也开始逐渐招进来,所以打算打算换一套统一的架构,以后做新游戏只要做其中的业务逻辑即可。

   其实之前在腾讯的时候,基本不会用到message queue这种,所有的分布式处理都是由自己写c++ server来互相通信的。这样的处理虽然开发量稍微大一点,但是性能和灵活性确实很高。

   现在自己在外面做,虽然自己已经封装了一套server的框架出来,但是毕竟还有太多的轮子需要自己制造,所以就想到了之前一直有了解过celery,来看一下这种基于message queue的任务系统能达到什么性能。

RabbitMQ

   celery首推的mq是rabbitmq,所以需要先安装一下:

   在mac下用brew 安装:

brew install rabbitmq

   安装成功之后,即可启动server了。

   不过在这之前,我们先把后台管理的插件打开:

rabbitmq-plugins enable rabbitmq_management

   之后执行如下命令,启动server:

rabbitmq-server

   这个时候就可以通过 http://127.0.0.1:15672/ 来访问后台管理端了,默认的用户名和密码是guest guest,可以自己在页面上修改。截图如下:

   NewImage

Redis

   celery也支持redis作为broker和backend,所以redis也需要安装一下,这里就不赘述了

Celery

   安装命令为:

pip install celery

性能测试

   新建 t.py:

from celery import Celery

app = Celery(backend='amqp', broker='amqp://')


@app.task
def add(x, y):
    return x + y

   以及测试文件 test.py:

import time
from t import add


t1 = time.time()
result = add.delay(1, 2)
print result.get()

print time.time() - t1

   启动celery worker:

celery -A t worker --loglevel=info -c 2

   执行 python test.py 输出结果为:

0.545017004013

   修改 t.py 为:

from celery import Celery

app = Celery(backend='redis', broker='redis://')

@app.task
def add(x, y):
    return x + y

   测试结果为:

0.603708028793

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. redis源代码分析 - persistence (累计阅读 32,229)
  2. Twitter/微博客的学习摘要 (累计阅读 12,261)
  3. Redis消息队列的若干实现方式 (累计阅读 12,088)
  4. 面试题 – 为什么我的朋友圈不见了? (累计阅读 11,953)
  5. 基于Redis构建系统的经验和教训 (累计阅读 10,522)
  6. Zookeeper研究和应用 (累计阅读 9,482)
  7. 浅谈redis数据库的键值设计 (累计阅读 9,354)
  8. 【2014年版】异地购房提取北京公积金 (累计阅读 9,148)
  9. 分布式哈希和一致性哈希 (累计阅读 8,815)
  10. Feed架构-我们做错了什么 (累计阅读 8,732)