no.11京東虛擬業務多維訂單系統架構設計讀後感

binlog:binglog是mysql數據庫開啓Row模式時提供的二進制日誌,以binlogEvent形式記錄對數據發生或潛在發生更改(事務開啓)的SQL語句和數據,相似於 oracle 數據庫的歸檔日誌,能夠用來查看數據庫的變動歷史、數據庫增量備份和基於時間點的恢復及 Mysql 的複製等。mysql

同步監聽原理:簡單來講就是模擬mysql的主從複製過程,先僞形成slave向master 庫發送COM_REGISTER_SLAVE 命令註冊客戶端,這樣master纔會發送binlogEvent;接着發送COM_BINLOG_DUMP命令,並指定binlog文件和Position信息,便可從Master庫得到包含詳細數據的binlogEvent二進制流,binlogEvent包含了全部數據庫的事件類型(DDL、DML、TCL、受權等)、庫表信息、字段信息和行數據,餘下的工做通過過濾、解析、協議反序列化獲得想要的訂單數據。sql

Hamal做爲虛擬訂單中心數據管道的入口,其首要的任務是保證數據庫數據變更的精準消費,所以必須謹慎設計binlog的消費記錄和異常消費後續處理機制等。數據庫

快消費:Hamal採用相似TCP滑動窗口的binlogEvent消費的Get和ACK機制:每次接收批量binlog記錄,並行解析數據的變動,發送JMQ消息後確認消費(ACK),以窗口長度做爲binlogPosition的增加步調。Hamal經過自產自銷MQ消息方式繼續驅動訂單數據的後續業務處理,後續過程包含數據變動的去重、DML過濾、存儲等,同時也能夠爲風控、營銷、訂單交易等系統提供個性化數據訂閱服務。這樣便可以解耦binlog消費環節以加速消費,又能夠隔離同步監聽服務和業務邏輯。緩存

讀寫分離:Hamal採集的訂單數據轉換成訂單模型後繼續流向虛擬訂單中心的三重存儲介質中:傳統 Mysql 數據庫做爲原始數據的第一重存儲,ES和緩存系統用於數據索引和分析,以實現讀寫分離。存儲訂單數據上,DAO模塊一樣使用消息隊列解耦,訂單數據存儲到數據庫後,以自產自銷JMQ的形式推送訂單數據到ES和緩存系統以輕量化存儲過程,減小多級存儲間耦合又可以均衡集羣負載。oracle

多級搜索:做爲數據管道出口,訂單網關係統(GW)對外提供了可定製模版數據或消息數據訂閱、數據分頁查詢、訂單搜索統計等服務,是對接數據應用的關鍵環節。網關係統實現了很是完備且強悍的多級平滑搜索過程,當訂單搜索超時或失敗時馬上跳轉到下級搜索,降級搜索的結果反補上級數據源;若是虛擬訂單中心檢索失敗,搜索會落地到產品線數據庫作最終檢索,檢索成功則會反補該訂單到訂單中心的各級存儲中,檢索失敗則必然是單號有誤;當虛擬訂單服務徹底不可用時,網關搜索將直接降級到原產品線生產數據庫拉取訂單數據。多級檢索方案,保證最完善的用戶體驗!設計

相關文章
相關標籤/搜索