聲明:本文發表於《金融電子化雜誌》2016年12期,經受權轉發,系做者原創,經謝絕我的、媒體、公衆號或網站未經受權轉載,違者追究其法律責任。數據庫
移動互聯網、大數據與雲計算做爲新的基礎設施,催生了新的互聯網經濟,也正在推進各行各業的升級。在過去十多年中,金融服務飛速發展,移動支付支撐了零售業線上線下的變革,基於大數據的信貸服務支持了無數小微企業的創業創新,老百姓能夠隨時隨地享受曾經高門檻的理財、保險等金融服務。以普惠服務爲目標、數據與技術驅動、新型信用體系爲基礎的新金融已經成爲新經濟的基石。安全
伴隨着螞蟻金服在新金融領域的探索,螞蟻金服技術團隊也在金融技術與架構領域不斷開拓。從 2005 年每秒處理 1 筆交易到 2015 年雙十一每秒處理 8.59 萬筆交易,從單一的支付到覆蓋微貸、理財、保險、信用、銀行等,經過十多年的探索與實踐,咱們造成了一套包含金融級分佈式交易、分佈式大數據分析與決策等在內的完整架構與技術體系。服務器
在本文中,咱們將與你們交流金融級分佈式交易相關的實踐與體會。網絡
若是將建造系統比做蓋樓的話,建一個常規的系統要先立穩四根柱子:高可用、安全、性能、成本。但要建一個移動互聯網時代的金融級大廈,除了上述四根柱子須要更加牢固,還須要加上兩根柱子:資金安全與數據質量。這六根柱子,是咱們在架構螞蟻金服的每個系統時的首要目標。架構
具體來講,咱們對一個金融級系統有如下關鍵目標:併發
高可用:具有 99.99% 以上的高可用性。系統可以容忍各類軟硬件設施的故障,能夠在服務不中斷的狀況下進行升級,在嚴苛的應用場景下保證承諾的服務質量,容忍各類人爲失誤。對於關鍵系統,還須要具有異地容災能力。框架
安全:具有多層次檢測、感知與防護各種安全攻擊的能力。系統有能力實時、精細地分析系統行爲與數據流發現異常,必要時能夠快速調集資源阻斷大規模、有組織的攻擊。運維
性能:對於實時交易業務,要求極快的響應時間與極高併發能力。對於批量業務,要求極大的吞吐量。尤爲重要的是,系統必須具有很強的可伸縮性與彈性,在須要時能夠快速調集資源應對突發的業務量。異步
成本:在知足高可用、安全與性能的前提下,成本是一個重要約束。咱們將單筆交易的平均處理成本(月交易總筆數/月成本)、以及峯值交易的處理成本(每提高 1000 交易 TPS 須要追加的成本)做爲兩個關鍵指標去持續優化。除了必須在基礎軟硬件與系統關鍵鏈路上作極致的優化外,靈活的資源調度與按需伸縮能力是優化成本的關鍵。分佈式
資金安全:這是金融級系統與常規系統的一個關鍵差別。要作到資金處理絕對不出差錯,須要交易與數據具有強一致性,須要在任何故障場景數據不丟不錯,須要具有準實時的交易資金覈對能力,須要在異常場景下有精細化熔斷與快速恢復能力。
數據質量:數據質量是金融服務質量的基礎。數據從採集、生成、流轉、存儲、計算、使用須要經歷不少環節,要確保通過這麼多環節後,數據依然是準確、完整和及時的,須要系統具有全鏈路的數據質量管控與治理能力。
金融交易系統是否能夠走分佈式路線?如何基於分佈式的思想與技術達到以上 6 個關鍵目標?接下來,咱們就以螞蟻金服的實踐爲基礎,分享對這個問題的觀點。
微服務是一種普遍應用的分佈式架構。經過將系統分解爲單一職責、高內聚、鬆耦合、獨立部署、自主運行的「微「服務,能夠極大提高系統的靈活性與擴展能力。但因爲每個微服務是自包含的數據與計算單元,當一個有嚴格一致性要求的交易,被分佈在不少節點上執行時,如何保證數據與服務處理達到金融級的強一致性,成爲一個難題。儘管能夠用支持分佈式事務的數據庫或數據中間件來保證數據分佈時的一致性,但解決不了當服務分佈時的一致性問題。因爲分佈式事務對資源加鎖的時間長、粒度大,也制約了系統的可伸縮性與高可用性。
爲了解決這個難題,咱們提出一種使微服務具有強一致性的微交易架構。在這種架構中,涉及到交易操做的微服務具有事務屬性。一個微交易提供三種操做TCC(Try-Confirm-Cancel),其中 Try 操做負責業務檢查與資源預留,Confirm 操做負責實際操做,Cancel 操做負責釋放預留的資源。一次完整的交易由一系列微交易的 Try 操做組成,若是全部的 Try 操做都成功,最終由微交易框架來統一Confirm,不然統一 Cancel,從而實現了相似經典兩階段提交協議(2PC)的強一致性。但不一樣於 2PC,微交易架構力求高效與可伸縮。TCC 三個操做都是基於本地事務的短事務,Try 操做只預留必須的業務資源,好比一筆交易涉及10元錢,僅預留帳戶中的 10 元錢,而不是鎖定整個帳戶,TCC 協議在提交時,也沒有單獨的 Prepare 階段,將提交協議的成本降到最低。
從 2008 年初上線至今,微交易架構已經應用到螞蟻金服的各類金融業務場景,經歷過歷次大促高峯考驗,證實這套架構與技術的可行性。
目前,主要商業數據庫本質上是單機系統,其容量、性能和可靠性均依賴於單個或少許高性能服務器與高可靠存儲的組合,成本高昂且擴展困難。儘管經過運用微交易架構,能夠將對數據操做的壓力分拆多個數據庫,解決了水平可擴展的問題,但數據庫自己的性能、成本與可靠性依然是一個難點。所以,阿里巴巴與螞蟻金服從 2010 年起,開始研發專門的金融級分佈式數據庫 OceanBase。
OceanBase 在如下幾個方面,對傳統數據庫架構進行了突破:
高性能:數據庫的一個顯著特徵是總數量比較大,但天天變化(增刪改)的數據只是總數據量的很小一部分。所以 OceanBase 將數據劃分爲基線數據和修改增量。基線數據即數據庫在某個時間點的一個快照,存放在每臺 OceanBase 服務器的硬盤中,修改增量即快照點以後的增刪改數據,相對比較小,一般存放在每臺 OceanBase 服務器的內存中。經過這種方式,使得增刪改操做基本都在內存中進行,從而得到接近內存數據庫的事務處理性能;
強一致:經典的主庫+備庫方式的數據庫,很難兼具高可用與強一致能力。爲了解決這個問題,OceanBase 使用多數據副本(>=3)投票協議,對於每一個寫事務,OceanBase 只有在事務日誌(redo log)到達超過半數服務器後,才應答客戶。這樣當少數服務器(例如 3 臺中的 1 臺,或者 5 臺中的 2 臺)異常時,剩下的服務器至少有一臺有事務日誌,保證了數據庫不由於少數服務器故障而致使數據丟失;
高可用:關鍵業務的數據庫必須達到 99.999% 的可用性,服務器故障、機房或網絡故障都不能致使數據庫不可用。OceanBase 一般由分佈於多個機房(3 個或以上)的機羣組成,每一個機羣有完整數據,其中一個機羣做爲主庫對外提供讀寫服務,其他機羣做爲備庫,接收主庫的事務日誌和回放日誌。當主庫故障時,剩下的機羣會馬上自動發起投票選舉,選出新的主庫,新主庫從其餘機羣得到可能存在的最新事務日誌並回放,完成後對外提供服務。
目前 OceanBase 已經穩定支撐了支付寶的核心交易、支付與帳務,支撐了網商銀行的核心繫統,經歷了屢次「雙十一」的考驗,造成了跨機房、跨區域部署的高可用架構,並在平常運行、應急演練和容災切換中發揮了重要做用。
「兩地三中心」是一種在金融系統中普遍應用的跨數據中心擴展與跨地區容災部署模式,但也存在一些問題:在擴展能力上,因爲跨地區的備份中心不承載核心業務,不能解決核心業務跨地區擴展的問題;在成本上,災備系統僅在容災時使用,資源利用率低,成本較高;在容災能力上,因爲災備系統冷備等待,容災時可用性低,切換風險較大。
所以,螞蟻金服沒有選擇「兩地三中心」部署模式,而是實現了異地多活與容災模式。異地多活與容災架構的基礎是對系統進行單元化。每個單元能夠認爲是一個縮小規模的、包含從接入網關、應用服務到數據存儲的全功能系統。每一個單元負責必定比例的數據與用戶訪問。單元有如下關鍵特性:
自包含性:好比用戶的一次帳戶充值交易,涉及到的全部計算與數據都在一個單元內完成;
鬆耦合性:跨單元之間只能進行服務調用,不能直接訪問數據庫或其它存儲。對於一些必須跨單元的交易處理,好比分屬於兩個不一樣單元的用戶之間的轉帳交易,跨單元的服務調用次數儘量少,在業務與用戶體驗容許的狀況下儘可能異步處理。這樣,即便兩個單元之間相距上千千米,也能夠容忍跨單元的訪問時延;
故障獨立性:一個單元內的故障,不會傳播到其它單元;
容災性:單元之間相互備份,確保每一個單元在同城和異地都有可在故障期間進行接管的單元。數據在單元間的備份方式,咱們以 OceanBase 提供的多地多中心強一致方案爲主。
經過單元化架構,可以將一個大規模系統分拆成許多個相對獨立的小規模系統,每個單元系統能夠部署到任何地區的數據中心,從而實現了靈活的異地多數據中心部署模式。系統的主要伸縮模式變成單元的增減,但一個單元內部的規模與複雜性不變,下降了系統的複雜性。單元之間的故障隔離,下降了軟硬件故障的影響面。「活」的單元和跨單元的快速切換能力,使同城異地的容災處理更爲簡單高效。
目前,螞蟻金服的核心繫統已經分佈在上海、深圳、杭州等多個城市的多個數據中心,核心交易流量分佈在各個數據中心,而且能夠進行調度與切換。經過異地多活,系統能夠在全國範圍內任意擴展,服務器資源獲得了充分利用,提高了系統應對地區級災難的能力。
每一年,支付寶系統都要應對雙11、新春紅包等活動的極高交易量。儘管單元化架構讓咱們具有應對峯值的能力,但要下降高峯期的資源投入,系統還須要具有按需伸縮的能力。
咱們解決這個問題的方法是,活動前,在雲計算平臺上快速申請資源,構建新的單元,部署應用與數據庫。而後將流量與數據「彈出」到新的單元,快速提高系統容量。當活動結束後,再將流量與數據「彈回」,釋放雲計算平臺上的資源。經過這種方式,能夠大大下降資源採購與運行成本。
彈性操做,須要在流量、數據與資源之間協調一致地操做,尤爲是有狀態的數據的彈性操做是最困難的,須要不中斷業務,也須要保證數據的一致性。這些操做若是依靠運維人員人工執行會十分複雜低效,須要架構、中間件與管控系統的支持。
彈性混合雲架構與技術在實踐中有如下一些關鍵點:
1. 經過統一資源調度,靈活地申請與分配計算、存儲與網絡資源,建立單元,快速部署數據庫、中間件與應用;
2. 經過中間件,將應用與基礎設施充分解耦,不管流量、數據與資源如何分佈,應用系統不須要改變;
3. 經過分佈式架構與數據規範,以及中間件支持,保證全部請求、服務、數據、消息等都有全局惟一的 ID 和一致的 ID 編碼規則。根據 ID,從接入網關、服務中間件、消息中間件、數據中間件等都可以正確地路由服務請求與數據訪問;
4. 經過統一管控平臺,將高層的彈性操做,翻譯成各個組件的部署與配置指令,而且統一調度執行,使操做協調一致、精準高效。
基於彈性混合雲架構,2015 年雙十一,支付寶有 10% 的支付流量運行在阿里雲計算平臺上。2016 年雙十一,咱們計劃將 50% 的高峯期支付流量運行在阿里雲計算平臺上,帶來成本的極大優化。
螞蟻金服的實踐證實了在金融級中間件、數據庫和雲計算平臺的支持下,分佈式架構能夠徹底勝任複雜、高要求的金融級交易,而且給出了一種可供參考的技術架構與實施路線。
將來,螞蟻金服依然會在金融級分佈式架構與技術方面深耕與拓荒。在這一領域,咱們給本身提出兩個新的重大命題:
1. 如何處理每秒 1 億筆交易:萬物互聯時代,無處不在的交易終端和無數新的交易場景,會繼續帶來金融交易量的指數型增加。什麼樣的架構與技術,能夠處理萬物互聯時代的天量交易,是須要未雨綢繆去攻堅與突破的;
2. 將金融級分佈式架構與技術變成「普惠」的雲計算服務,爲千千萬萬金融服務機構服務。爲了實現這個目標,螞蟻金服和阿里雲共同提出了「螞雲計劃」,共建新一代的金融雲平臺,將來服務全球 5 萬家金融機構,共創全球化的普惠金融。
中國已經在金融服務創新上處於世界領先,新金融須要新技術做爲底盤與引擎,這是中國金融技術的挑戰與機遇。螞蟻金服期待與中國金融業的專家一塊兒,共同創造將來的新金融技術,爲世界技術作出更多中國的貢獻。
公衆號:金融級分佈式架構(Antfin_SOFA)