架構
支付寶的架構設計需要考慮到互聯網金融業務的特殊性,比如要求更高的業務連續性,更好的高擴展性,更快速的支持新業務發展等特點。將
整個平台划分為三層:
1.運維平台(IAAS):主要提供基礎資源的可伸縮性,比如網絡、存儲、數據庫、虛擬化、IDC(互聯網數據中心)等,保證底層系統平台的穩定性;
2.技術平台(PAAS):主要提供可伸縮、高可用的分布式事務處理和服務計算能力,能夠做到彈性資源的分配和訪問控制,提供一套基礎的中間件運行環境,屏蔽底層資源的復雜性;
3.業務平台(SAAS):提供隨時隨地高可用的支付服務,並且提供一個安全易用的開放支付應用開發平台。
圖示如下。
可伸縮性的含義:種對軟件系統計算處理能力的設計指標,高可伸縮性代表一種彈性,在系統擴展成長過程中,軟件能夠保證旺盛的生命力,通過很少的改動甚至只是硬件設備的添置,就能實現整個系統處理能力的線性增長,實現高吞吐量和低延遲高性能。簡單的說就是做更多的事情。
架構特性
邏輯數據中心架構
雙十一大促當天業務量倍增,系統的復雜度越來越高,之前按照點的伸縮性架構無法滿足要求,需要一套整體的可伸縮方案,可以按照一個單元的維度進行擴展。能夠提供支持異地伸縮的能力,提供N+1的災備方案,提供整體性的故障恢復體系。於是提出了邏輯數據中心架構,核心思想是把數據水平拆分的思路向上層提到接入層、終端, 從接入層開始把系統分成多個單元,單元有幾個特性:
1.每個單元對外是封閉的,包括系統間交換各類存儲的訪問;
2.每個單元的實時數據是獨立的,不共享。而會員或配置類對延時性要求不高的數據可共享;
3.單元之間的通信統一管控,盡量走異步化消息。同步消息走單元代理方案;
概念圖如下:
解決了幾個關鍵問題:
1.由於盡量減少了跨單元交互和使用異步化,使得異地部署成為可能。整個系統的水平可伸縮性大大提高,不再依賴同城IDC;
2.可以實現N+1的異地災備策略,大大縮減災備成本,同時確保災備設施真實可用;
3.整個系統已無單點存在,大大提升了整體的高可用性;同城和異地部署的多個單元可用作互備的容災設施,通過運維管控平台進行快速切換,有機會實現100%的持續可用率;
4.該架構下業務級別的流量入口和出口形成了統一的可管控、可路由的控制點,整體系統的可管控能力得到很大提升。基於該架構,線上壓測、流量管控、灰度發布等以前難以實現的運維管控模式,現在能夠十分輕松地實現。
“異地多活”架構是指,基於邏輯機房擴展能力,在不同的地域IDC部署邏輯機房,並且每個邏輯機房都是“活”的,真正承接線上業務,在發生故障的時候可以進行邏輯機房之間的快速切換。
支付寶“異地多活”架構示意圖:
分布式數據架構
支付寶分布式數據架構可伸縮策略主要分為三個維度:
1.按照業務類型進行垂直拆分
2.按照客戶請求進行水平拆分(也就是常說的數據的sharding策略)
3.對於讀遠遠大於寫的數據進行讀寫分離和數據復制處理
圖示如下:
支付寶內部交易數據的可伸縮性設計
交易系統的數據主要分為三個大數據庫集群:
1.主交易數據庫集群,每一筆交易創建和狀態的修改首先在這⾥完成,產生的變更再通過可靠數據復制中心復制到其他兩個數據庫集群:消費記錄數據庫集群、商戶查詢數據庫集群。該數據庫集群的數據被水平拆分成多份,為了同時保證可伸縮性和高可靠性,每一個節點都會有與之對應的備用節點和failover節點,在出現故障的時候可以在秒級內切換到failover節點。
2.消費記錄數據庫集群,提供消費者更好的用戶體驗和需求;
3.商戶查詢數據庫集群,提供商戶更好的用戶體驗和需求;
對於分拆出來的各個數據節點,為了保證對上層應用系統的透明,研發了一套數據中間產品來保證交易數據做到彈性擴容。
數據的可靠性
分布式數據架構下,在保證事務原有的ACID(原子性、一致性、隔離性、持久性)特性的基礎上,還要保證高可用和可伸縮性。
根據CAP和BASE原則,設計了一套基於服務層面的分布式事務框架,他支持兩階段提交協議,在保證事務的ACID原則的前提下,確保事務的最終一致性 ,叫做“柔性事物”策略。
分布式事務框架的流程圖:
實現:
1.一個完整的業務活動由一個主業務服務與若干從業務服務組成。
2.主業務服務負責發起並完成整個業務活動。
3.從業務服務提供TCC型業務操作。
4.業務活動管理器控制業務活動的一致性,它登記業務活動中的操作,並在活動提交時確認所有的兩階段事務的confirm操作,在業務活動取消時調用所有兩階段事務的cancel操作。”
與2PC協議比較:
1.沒有單獨的Prepare階段,降低協議成本
2.系統故障容忍度高,恢復簡單
關鍵組件異步可靠消息策略如下:
關鍵設計點:
1.若在第2、3、4步出現故障,業務系統自行決定回滾還是另起補償機制;若在第6、7步出現異常,消息中心需要回查生產者;若在第8步出現異常,消息中心需要重試。第6步的確認消息由消息中心組件封裝,應用系統無需感知。
2.此套機制保障了消息數據的完整性,進而保障了與通過異步可靠消息通訊的系統數據最終一致性。
3.某些業務的前置檢查,需要消息中心提供指定條件回查機制。