分布式消息系統嘗試(rabbitmq, celery, redis)
來自: http://python.jobbole.com/84298/
最近在調整游戲的后臺架構,之前因為需要快速出產品,所以整個代碼都揉成一團,也基本沒有做任何分層處理。現在服務器端的開發也開始逐漸招進來,所以打算打算換一套統一的架構,以后做新游戲只要做其中的業務邏輯即可。
其實之前在騰訊的時候,基本不會用到message queue這種,所有的分布式處理都是由自己寫c++ server來互相通信的。這樣的處理雖然開發量稍微大一點,但是性能和靈活性確實很高。
現在自己在外面做,雖然自己已經封裝了一套server的框架出來,但是畢竟還有太多的輪子需要自己制造,所以就想到了之前一直有了解過celery,來看一下這種基于message queue的任務系統能達到什么性能。
RabbitMQ
celery 首推的mq是 rabbitmq ,所以需要先安裝一下:
在mac下用brew 安裝:
Python
brew install rabbitmq
brewinstallrabbitmq</div>
安裝成功之后,即可啟動server了。
不過在這之前,我們先把后臺管理的插件打開:
Python
rabbitmq-plugins enable rabbitmq_management
rabbitmq-pluginsenablerabbitmq_management</div>
之后執行如下命令,啟動server:
Python
rabbitmq-server
rabbitmq-server</div>
這個時候就可以通過 http://127.0.0.1:15672/ 來訪問后臺管理端了,默認的用戶名和密碼是guest guest,可以自己在頁面上修改。截圖如下:
Redis
celery也支持redis作為broker和backend,所以redis也需要安裝一下,這里就不贅述了
Celery
安裝命令為:
Python
pip install celery
pipinstallcelery</div>
性能測試
新建 t.py:
Python
from celery import Celeryapp = Celery(backend='amqp', broker='amqp://')
@app.task def add(x, y): return x + y</pre>
from celeryimport Celery app = Celery(backend='amqp', broker='amqp://') @app.task def add(x, y): return x + y</div>以及測試文件 test.py:
Python
import time from t import addt1 = time.time() result = add.delay(1, 2) print result.get()
print time.time() - t1</pre>
import time from t import add t1 = time.time() result = add.delay(1, 2) print result.get() print time.time() - t1</div>啟動celery worker:
Python
celery -A t worker --loglevel=info -c 2celery -A t worker --loglevel=info -c 2</div>執行 python test.py 輸出結果為:
Python
0.5450170040130.545017004013</div>修改 t.py 為:
Python
from celery import Celeryapp = Celery(backend='redis', broker='redis://')
@app.task def add(x, y): return x + y</pre>
from celeryimport Celery app = Celery(backend='redis', broker='redis://') @app.task def add(x, y): return x + y</div>測試結果為:
Python
0.6037080287930.603708028793</div>無論是rabbitmq還是redis,性能都慢的讓人無法接受,最終還是放棄了用celery做任務分布的想法,還是老老實實的用server通信吧。
</div>本文由用戶 udzw3018 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊
sesese色