類似問題也是電商等業(yè)務(wù)常見場景,而米大師的經(jīng)驗是,除了通過架構(gòu)將支付系統(tǒng)按場景、業(yè)務(wù)、流量進行解耦,利用云的彈性(和云的冗余資源池),在活動時快速自動的部署業(yè)務(wù)服務(wù)器。并區(qū)分業(yè)務(wù)單元域(SET)部署,前置調(diào)度,做分流和異常隔離和緩存外,采用支持水平拆分的分布式架構(gòu)的數(shù)據(jù)庫。

因為數(shù)據(jù)庫本身無法像邏輯層一樣做隔離請求,而將幾張大表水平拆分(分表)。能夠讓數(shù)據(jù)庫可以隨時橫向擴展,因此平時只需要在性能方面預留一定冗余,確保偶發(fā)性小峰值并不影響整個數(shù)據(jù)庫性能。如果遇到可預見的超高峰值,例如年度大促、春節(jié)活動等,由業(yè)務(wù)部門決定是否進行水平擴容。當然,分布式數(shù)據(jù)庫的原來使得水平擴容十分簡單,而且通過自動再均衡方案,擴容可以僅影響集群中的少數(shù)節(jié)點,而其他節(jié)點可以在擴容時仍然正常運行不會受到影響。

熱點更新技術(shù),從容應(yīng)對秒殺等場景:

“秒殺”場景下,大量的用戶在極短的時間內(nèi)請求少量商品。在數(shù)據(jù)庫中,一個商品是一行存儲,所以秒殺會導致大量的線程來競爭InnoDB行鎖,當并發(fā)度越高時等待的線程也會越多,導致TPS下降RT上升。這會導致什么問題呢?要么秒殺時,搶購一個商品但整個平臺出故障;要么就出現(xiàn)100個庫存賣出去105個等各類異常。

當然,業(yè)內(nèi)也有一些從數(shù)據(jù)庫層面的解決方案,例如:把熱點商品放到單獨的熱點庫中;通過緩存系統(tǒng)(如Redis/消息隊列等)緩存熱點請求;或讓業(yè)務(wù)層將lastmodifytime修改的多條SQL合并減少update。

而騰訊熱點更新功能,是通過一個全局HASH表存儲有INSERT/UPDATE請求的熱點對象,制定熱點SQL請求過來時,先查找HASH表中有無對應(yīng)的熱點對象,有就獲取lock,會被阻塞;沒有該熱點對象,那么創(chuàng)建該熱點對象的方式進行。這種方案通過簡單擴展SQL語法和參數(shù),使得業(yè)務(wù)不改變架構(gòu),僅需修改幾行SQL的情況下,便可以快速應(yīng)對秒殺等場景(原理如下圖)。當然,配合緩存使用,可以進一步為業(yè)務(wù)提高性能,減少擊穿的概率

根據(jù)測試,我們發(fā)現(xiàn)應(yīng)用和不應(yīng)用的熱點更新技術(shù)會的效果差異非常明顯(測試數(shù)據(jù)如下圖)。

故障是常態(tài),重要的是如何應(yīng)對故障:

如果您的業(yè)務(wù)是規(guī)模比較大,那么無論是網(wǎng)絡(luò)、硬件、軟件或人為的故障都是難以避免。因此,數(shù)據(jù)庫系統(tǒng)必須做到以下幾點,才能盡可能小的影響業(yè)務(wù)

只有保障數(shù)據(jù)強一致了才能保證故障切換的時候數(shù)據(jù)不錯不丟。

故障能不能影響全局,且盡量做到業(yè)務(wù)無感知。

支持同城雙活、兩地三中心等架構(gòu)

立體組合的監(jiān)控系統(tǒng),能快速判斷故障,定位問題。

必須要有風險控制策略等措施保證數(shù)據(jù)安全

而騰訊分布式數(shù)據(jù)庫DCDB發(fā)展了13年,早已默認數(shù)據(jù)強同步復制,任何節(jié)點故障,只要是已應(yīng)答均可保證數(shù)據(jù)不錯不丟。也可設(shè)置多種同步方案,不同的業(yè)務(wù)數(shù)據(jù)庫采用不同復制策略以求在業(yè)務(wù)邏輯和數(shù)據(jù)一致性之間平衡。

分布式架構(gòu),也使得DCDB任意節(jié)點故障,并不會影響全局,且每個從節(jié)點都可用做只讀訪問。在某些僅軟件故障的場景, DCDB的保持連接技術(shù),可用軟件故障,確保邏輯層(TProxy)和數(shù)據(jù)庫連接不斷開,且自動重發(fā)失敗請求。此時業(yè)務(wù)是來說,感受就是某個請求時間稍長;即使是數(shù)據(jù)庫事務(wù),或自動回滾,或直接報錯,數(shù)據(jù)不會錯亂的。

由于DCDB的設(shè)計之初就是應(yīng)用于騰訊內(nèi)部金融支付類業(yè)務(wù),因此同城雙活、年底三中心對其來說早已成熟,常用方案如下圖:

通過對系統(tǒng)從硬到軟、從模塊到流程、從系統(tǒng)升級到常規(guī)運維的立體化監(jiān)控,并結(jié)合 “自愈”能力,可讓99%常見故障自動解決,僅1%的故障需要人工干預,自動化的流程極大提高了故障修復響應(yīng)效率。

當然,DCDB也是騰訊首個將完整的信息安全要求和風控體系做到整個數(shù)據(jù)庫系統(tǒng)中的產(chǎn)品之一。包括業(yè)務(wù)和運維系統(tǒng),我們提供惡意打擊、稽核、實時風控等能力;在數(shù)據(jù)庫層面,也提供了安全審核平臺,數(shù)據(jù)庫防火墻等一系列安全能力。

此外,成本控制是互聯(lián)網(wǎng)企業(yè)成功的要素之一,如果是采用商業(yè)數(shù)據(jù)庫,先互聯(lián)網(wǎng)這種體量成本將是天價。而采用基于開源協(xié)議的分布式數(shù)據(jù)架構(gòu)DCDB和騰訊云服務(wù),按需使用且無高昂的license費用,將極大的節(jié)省業(yè)務(wù)使用數(shù)據(jù)庫成本。

目前,作為支撐了騰訊內(nèi)外超過100億以賬戶,200億以上的交易流水和海量的虛擬交易的數(shù)據(jù)庫,騰訊云分布式數(shù)據(jù)庫DCDB已經(jīng)廣泛應(yīng)用在銀行、保險、理財、電商、O2O等核心系統(tǒng)中。

分享到

songjy

相關(guān)推薦