問題:核心業務處理轉發系統在處理前段發來的請求時,由於各個事務中有連接數據庫寫操作,當並發量足夠大時,業務系統由於直連mysql更新數據庫,所以需要等待mysql處理完反饋結果,也就是說要等待數據庫I/O的時間。導致並發量增大,當增加到該模塊處理發閥值時,會將部分請求丟棄不做處理,最終結果是會有部分用戶請求被忽略。
為了解決上述問題,在該模塊與mysql之間,建立一個消息隊列的機制,分為A,B兩個模塊,A部分與該模塊(以后稱為O模塊)耦合,以后直連mysql的操作,全部發到A模塊,A模塊寫入待執行命令文件,B模塊讀文件。實現業務邏輯與實際I/O的分離,提高O模塊處理能力。
遇到的問題:
1. 事務完整性,執行命令為一個事務一條命令,也就是說一條命令會包含一條至多條sql語句。
2. 命令執行失敗后寫日志,而不能通過O模塊失敗,這個由於O模塊業務特點,不會因為部分sql執行失敗導致整個事務流程的變化。
3. 同步讀寫問題:也就是說高峰期,寫肯定會有一些延遲,如果讀寫同時進行,那讀肯定讀的不是最新的內容了。這個只能通過業務邏輯程序自己控制了,要么就是這部分處理不走消息隊列,直接還是走mysql了。