摘要:衆所周知,“光棍節”是西方文化席卷中國後的産物。現如今,“光棍節”華麗地演繹了屌絲大逆襲,成為家喻戶曉的購物狂歡節。面對巨大的購買流量,電商企業如何應對支付洪峰?DCDB穩健的架構、優異的性能、獨到的熱點更新技術,不僅可讓核心交易系統資料庫從容面對秒殺及巨量訂單交易等場景,而且可有效降低成本。
分布式資料庫DCDB,騰訊内部代号”TDSQL”,是解決類似于電商、O2O的訂單交易、購買支付場景的利器。
為什麼說DCDB最适用于電商、02O等業務呢?衆所周知,電商等網際網路模式和碎片化的行為,無異給核心交易資料庫帶來巨大的挑戰。即使是某些銀行高大上的業務系統,其平均TPS約在10000,正常峰值約1倍;而在網際網路場景中,任何智能裝置都是交易終端,加上電商等經常出現限時搶購、秒殺等營運活動,無論哪種活動,從資料庫角度就都意味着短時間并發和請求總量都遠高于正常水準。在類似“雙十一”這樣的購物狂歡節中,電商系統若不做好措施,結果就是花錢推廣,反而砸掉自己招牌。通過總結,網際網路場景的交易系統資料庫可能經常遭遇以下情況:
(1)峰值超過正常值數倍的業務請求。
(2)秒殺等場景将帶來大量的線程影響性能。
(3)故障是常态,如何確定故障資料不錯不丢,且不影響全局。
(4)成本效益是業務重要考量點。
峰值超過正常值20倍以上的請求洪峰:
以騰訊米大師為例,系統對接了騰訊内外十餘萬業務的支付交易。這些業務會不定期釋出營銷營運活動,如電商大促、春節紅包、國慶獻禮、遊戲推廣等。在2016全年出現了30多次均值5倍的請求洪峰, 有5次甚至超20倍。下圖為近期某業務做午間大促,導緻整個平台請求量猛增1倍(藍線是上一日對比資料,紅線是當日資料)。

類似問題也是電商等業務常見場景,而米大師的經驗是,除了通過架構将支付系統按場景、業務、流量進行解耦,利用雲的彈性(和雲的備援資源池),在活動時快速自動的部署業務伺服器。并區分業務單元域(SET)部署,前置排程,做分流和異常隔離和緩存外,采用支援水準拆分的分布式架構的資料庫。
因為資料庫本身無法像邏輯層一樣做隔離請求,而将幾張大表水準拆分(分表)。能夠讓資料庫可以随時橫向擴充,是以平時隻需要在性能方面預留一定備援,確定偶發性小峰值并不影響整個資料庫性能。如果遇到可預見的超高峰值,例如年度大促、春節活動等,由業務部門決定是否進行水準擴容。當然,分布式資料庫的原來使得水準擴容十分簡單,而且通過自動再均衡方案,擴容可以僅影響叢集中的少數節點,而其他節點可以在擴容時仍然正常運作不會受到影響。
熱點更新技術,從容應對秒殺等場景:
“秒殺”場景下,大量的使用者在極短的時間内請求少量商品。在資料庫中,一個商品是一行存儲,是以秒殺會導緻大量的線程來競争InnoDB行鎖,當并發度越高時等待的線程也會越多,導緻TPS下降RT上升。這會導緻什麼問題呢?要麼秒殺時,搶購一個商品但整個平台出故障;要麼就出現100個庫存賣出去105個等各類異常。
當然,業内也有一些從資料庫層面的解決方案,例如:把熱點商品放到單獨的熱點庫中;通過緩存系統(如Redis/消息隊列等)緩存熱點請求;或讓業務層将lastmodifytime修改的多條SQL合并減少update。
而DCDB的熱點更新功能,是通過一個全局HASH表存儲有INSERT/UPDATE請求的熱點對象,制定熱點SQL請求過來時,先查找HASH表中有無對應的熱點對象,有就擷取lock,會被阻塞;沒有該熱點對象,那麼建立該熱點對象的方式進行。這種方案通過簡單擴充SQL文法和參數,使得業務不改變架構,僅需修改幾行SQL的情況下,便可以快速應對秒殺等場景(原理如下圖)。當然,配合緩存使用,可以進一步為業務提高性能,減少擊穿的機率
根據測試,我們發現應用和不應用的熱點更新技術會的效果差異非常明顯(測試資料如下圖)。
故障是常态,重要的是如何應對故障:
如果業務是規模比較大,那麼無論是網絡、硬體、軟體或人為的故障都是難以避免。是以,資料庫系統必須做到以下幾點,才能盡可能小的影響業務
隻有保障資料強一緻了才能保證故障切換的時候資料不錯不丢。
故障能不能影響全局,且盡量做到業務無感覺。
支援同城雙活、兩地三中心等架構
立體組合的監控系統,能快速判斷故障,定位問題。
必須要有風險控制政策等措施保證資料安全
而騰訊分布式資料庫DCDB發展了13年,早已預設資料強同步複制,任何節點故障,隻要是已應答均可保證資料不錯不丢。也可設定多種同步方案,不同的業務資料庫采用不同複制政策以求在業務邏輯和資料一緻性之間平衡。
DCDB的分布式架構允許任意節點故障,并不會影響全局,且每個從節點都可用做隻讀通路。在某些僅軟體故障的場景, DCDB的保持連接配接技術,可用軟體故障,確定邏輯層(TProxy)和資料庫連接配接不斷開,且自動重發失敗請求。此時業務是來說,感受就是某個請求時間稍長;即使是資料庫事務,或自動復原,或直接報錯,資料不會錯亂的。
由于DCDB的設計之初就是應用于騰訊内部金融支付類業務,是以同城雙活、年底三中心對其來說早已成熟,常用方案如下圖:
通過對系統從硬到軟、從子產品到流程、從系統更新到正常運維的立體化監控,并結合 “自愈”能力,可讓99%常見故障自動解決,僅1%的故障需要人工幹預,自動化的流程極大提高了故障修複響應效率。
當然,DCDB也是騰訊首個将完整的資訊安全要求和風控體系做到整個資料庫系統中的産品之一。包括業務和運維系統,我們提供惡意打擊、稽核、實時風控等能力;在資料庫層面,也提供了安全稽核平台,資料庫防火牆等一系列安全能力。
此外,成本控制是網際網路企業成功的要素之一,如果是采用商業資料庫,先網際網路這種體量成本将是天價。而采用基于開源協定的分布式資料架構DCDB和騰訊雲服務,按需使用且無高昂的license費用,将極大的節省業務使用資料庫成本。
目前,作為支撐了騰訊内外超過100億以賬戶,200億以上的交易流水和海量的虛拟交易的資料庫,騰訊雲分布式資料庫DCDB已經廣泛應用在銀行、保險、理财、電商、O2O等核心系統中。