IT技术博客大学习 共学习 共进步

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

Vimer 2014-11-19 23:07:06 浏览 3,405 次

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

   其实之前在腾讯的时候,基本不会用到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. 分布式缓存系统 Memcached 入门 (阅读 16,042)
  2. Zookeeper工作原理 (阅读 11,942)
  3. GFS, HDFS, Blob File System架构对比 (阅读 10,342)
  4. Zookeeper研究和应用 (阅读 9,341)
  5. 一致性哈希算法及其在分布式系统中的应用 (阅读 9,043)
  6. 分布式日志系统scribe使用手记 (阅读 8,842)
  7. 分布式哈希和一致性哈希 (阅读 8,665)
  8. HBase技术介绍 (阅读 7,942)
  9. 分布式系统的事务处理 (阅读 7,244)
  10. Memcache分布式部署方案 (阅读 6,666)