大家是怎麼實現tornado的mysql非同步的,tornado與mysql在一起需要怎麼技術的技術實現好?

查詢網路上不少方案,有說同步mysql沒什麼要緊的,不是瓶頸。有說每次mysql都得0.001秒以上的,我深深的迷茫了。

我看知乎也是mysql+tornado的組合,又是如何非同步的呢?

我自己也也想了一種實現,就是在每次查詢時,都成redis里取緩存,涉及到寫操作時才連接mysql,請問這種實現是否好點呢


測試一把就知道了

大家應用場景,壓力,網路延遲,硬體配置都不一樣


並不建議在特定場景中去實現非同步mysql,如果你需要真實需要非同步操作,建議直接換成nodejs這種天然非同步的環境


https://github.com/snower/TorMySQL

所有非同步mysql實現中性能最高的,並且工程使用最完善的實現,真正經過高並發大流量考驗.

排隊削峰

排隊超時防止雪崩

鏈接超時回收

針對非同步編程中最容易出現的沒有正常關閉鏈接放入連接池的連接使用調試

特別優化的iostream


非同步MySQL的使用場景還是很有限的,可以嘗試使用任務隊列來實現,Celery有一個tornado的client,mher/tornado-celery · GitHub

具體使用看以參考這篇文章,tornado中使用celery實現非同步MySQL操作


看下pymysql項目吧,官方的github下有個PyMySQL/Tornado-MySQL · GitHub項目,國內的牛人同樣基於pymysql寫了一個https://github.com/mayflaver/AsyncTorndb


tornado有個插件叫tornado-celery,配合celery可以把tornado對mysql的操作通過tornado-celery交給非同步隊列celery來操作mysql(其實其他的資料庫也可以的),但是這個插件跟tornado有個兼容性的小問題(作者沒有提,我在谷歌上也沒找到類似的提問),只不過這個問題一般情況下不影響運行。但mysql的性能瓶頸不在非同步上,而是在mysql的內部工作機制。這裡用非同步也好,多線程也好,並帶不來多大的性能提升(非本地mysql的測試性能提升相對明顯一些),不過這種非同步持久化對web應用的用戶體驗提升還是蠻有好處的,具體的自己做一下就知道了。


GitHub - zhu327/greentor: Patch pymysql to support tornado asynchronous

自己寫了一個,完全不用yield什麼的,直接用同步的方式嗲用pymysql,打上了補丁後,實際上在socket上是非同步的,並且不會阻塞


啥都聽別人說你是得一直迷茫下去,這種貼近一線的技術選擇沒有親身體驗沒法體會和理解的。


推薦閱讀:

Python方法間調用,self.方法跟cls=類名;cls.方法,二種方式有什麼區別?
Python有哪些殺手級超牛逼框架或庫或應用?
python開發後台,該從哪裡開始,學習過程?
Django 有哪些局限性?
gunicron可以搭載不同worker, 對於非同步worker支持greenlet. 但為什麼官方文檔不推薦搭載tornado worker?

TAG:MySQL | Tornado | 非同步 | Python框架 |