同主站常規實物訂單中心一樣,京米虛擬訂單中心定位於訂單數據的匯聚、變更及狀態維護等,目前已經聚合了手機充值、加油卡、機票酒店、景點門票火車票、點卡頁游等大量虛擬商品和部分非虛擬商品的訂單詳情數據,同時為京東主站訂單中心提供訂單展示,對接風控、營銷等業務方提供訂單數據分析應用等。虛擬訂單中心的核心功能主要圍繞數據搬運工(Hamal)產品運行, Hamal 是京米依托開源項目研發的 MySQL 數據庫 binlog 監聽產品,在保證高可用的前提下實現了高指標的監聽轉換過程。
虛擬訂單中心的主要架構:
Hamal 作為虛擬訂單中心數據管道的入口,其首要的任務是保證數據庫數據變動的精准消費,因此必須謹慎設計 binlog 的消費記錄和異常消費后續處理機制等。健壯性和高可用 Hamal 使用 zookeeper 集群管理監聽實例和記錄 binlog 的消費位置信息。對於目標庫,多個 Hamal 實例在啟動時搶占該庫的映射節點以獲取監聽權限,落選的實例則以熱備份形式監聽 zk 對應節點 binlog 位置信息,在遭遇服務不可用或宕機時,迅速通過搶占接力監聽服務和 binlog 信息;Hamal 也支持同時監聽目標庫的多個目標從庫,冪等的消費 binlog 以防止目標庫單節點宕機故障。由此,多重防災機制力保服務的72小時高可用及數據的完備性,目前穩定提供日監聽千萬行記錄,從未拋棄過一條訂單。
快消費
Hamal 采用類似 TCP 滑動窗口的 binlogEvent 消費的 Get 和 ACK 機制:每次接收批量binlog 記錄,並行解析數據的變更,發送 JMQ 消息后確認消費(ACK),以窗口長度作為binlogPosition 的增長步調。Hamal 通過自產自銷 MQ 消息方式繼續驅動訂單數據的后續業務處理,后續過程包含數據變更的去重、DML 過濾、存儲等,同時也可以為風控、營銷、訂單交易等系統提供個性化數據訂閱服務。這樣即可以解耦 binlog 消費環節以加速消費,又可以隔離同步監聽服務和業務邏輯。
讀寫分離
Hamal 采集的訂單數據轉換成訂單模型后繼續流向虛擬訂單中心的三重存儲介質中:傳統Mysql 數據庫作為原始數據的第一重存儲,ES 和緩存系統用於數據索引和分析,以實現讀寫分離。存儲訂單數據上,DAO 模塊同樣使用消息隊列解耦,訂單數據存儲到數據庫后,以自產自銷 JMQ 的形式推送訂單數據到 ES 和緩存系統以輕量化存儲過程,減少多級存儲間耦合又能夠均衡集群負載。
多級搜索
作為數據管道出口,訂單網關系統(GW)對外提供了可定制模版數據或消息數據訂閱、數據分頁查詢、訂單搜索統計等服務,是對接數據應用的關鍵環節。網關系統實現了非常完備且強悍的多級平滑搜索過程,當訂單搜索超時或失敗時立刻跳轉到下級搜索,降級搜索的結果反補上級數據源;如果虛擬訂單中心檢索失敗,搜索會落地到產品線數據庫做最終檢索,檢索成功則會反補該訂單到訂單中心的各級存儲中,檢索失敗則必然是單號有誤;當虛擬訂單服務完全不可用時,網關搜索將直接降級到原產品線生產數據庫拉取訂單數據。多級檢索方案,保證最完善的用戶體驗!
如今,歷經兩次技術版本演進和多次618、雙十一大促考驗的虛擬訂單中心,接入的虛擬業務達30+,穩定承載了虛擬平台的核心訂單數據,累計訂單數據已近10億,並不斷挑戰新高,正逐漸成為虛擬商品以及其他非標准商品融入京東電商主體系的重要通道。
閱讀原文: