非同步資料落地對於IM的重要性

markdown
# 非同步資料落地對於IM的重要性 ## 結論 今天我在將建立訊息的API,從先在MySQL落地,改由直接送給Client並另外起一個Cron做異步落資料落地之後,效能從`每秒20人送訊息200人收訊息(4000封/s)`提升至`每秒60人發訊息600人收(36000封/s)`,實屬相當大的進步。 ## 原因 我想是MySQL對於多次連接+小資料的更新與新增很不拿手,因為MySQL每次都是要碰Disk的,而且資料不是連續的導致I/O的時間會很長。 在調整成異步落地之後資料不會經過Disk,而是從API->MQ->Websockt->Client,所以快很多。 並且在異步的資料落地時,採用的是批次插入資料,這可以讓MySQL只需要少量I/O就可以完成大筆資料插入。 ## 應注意的部分 ### 不適合的場景 * 100%訊息都無法遺失,只要預到停電,OOM等事故,Mem是會消失的。 * 資料有立即提取的需求,既然是異步,就無法保證在加入一筆資料之後馬上查詢可以查到資料。 ## 適合的部份 * 資料不是那麼重要的,可以接收遺失,策略可以是幾分鐘內的可能會遺失,

留言

這個網誌中的熱門文章

成人剪舌繫帶聽過嗎?我剪了!!

Scp - ssh 的遠端檔案傳輸指令

睡覺使你更有效率