楠木軒

國產數據庫的"自我博弈"

由 沈建伏 發佈於 科技

作者| 王德清

出品|雷鋒網產業組

前言:很長時間以來,大多數據庫從業人士都將IBM大型機、Oracle等傳統數據庫奉為經典,尤其對於數據庫有着極高要求的金融行業來説,在他們眼裏,地球上沒有任何一個數據庫能比他們更穩定了。

隨着產業環境的變化,以Oracle、IBM、微軟三足鼎立的數據庫市場格局正悄然發生着改變,而在這一變化過程中,國產數據庫也順勢而為向傳統數據庫發起了衝擊,並打破了銀行核心系統只能用Oracle數據庫的“潛規則”。

對此,雷鋒網與騰訊雲數據庫TDSQL團隊6位老兵展開了一場深度對話,還原了以TDSQL為代表的國產數據庫的進擊之路。

把時間線拉回到2005年。

彼時,員工平均年齡只有26歲的騰訊,如同一支不起眼的輕騎兵部隊,在剛剛興起的互聯網社交化浪潮中開疆拓土,以QQ為基礎打造了QQ空間、QQ遊戲、騰訊網等爆款產品。

“騰訊之前的業務都比較聚焦,我們作為公司的計費團隊,承擔着公司所有收入實時計費工作,同時每天我們還有大量複雜報表計算。”

説這句話的是現任騰訊副總裁李綱,2003年加入騰訊的他就一直都在騰訊的計費部門工作。隨着騰訊在SNS時代打敗了51.com、人人網、開心網等對手之後,QQ空間等產品帶來的增值業務也水漲船高。

騰訊計費團隊合影

此時有一個問題擺在了李綱的面前:技術上使用的MySQL開源數據庫,面對用户爆發式增長,會經常出現不穩定,故障主備切換不及時、不準確等各種各樣的問題。

“集中式數據庫的產品力很強,兼容性非常強大,但是有一個問題是,邊界感是也是非常明顯的,你到了它的系統極限就會出現問題。”李綱説到。

而當時,騰訊並非是今天這樣的互聯網巨頭,在各個領域騰訊都在與其他對手激戰正酣。如QQ空間有51.com、人人網、開心網等多個對手,遊戲領域則有網易、盛大……

顯然,如果不將技術層使用的數據庫出現的問題解決掉,騰訊將無法在各個領域拿下“山頭”獲得勝利。

在此背景之下,內部經過了多輪討論之後,技術部門終於做出了決定。

自己做數據庫

“業務需要做這個事情,我們就想着先把它做好,也沒有想未來要幹成什麼樣的事業。。”

對於那時的心態,潘安羣(現騰訊雲數據庫技術負責人)依舊記得很清楚。

沒錯,騰訊計費部門作出的決定就是要自己做數據庫,正當李綱他們做出了這個決定之後,時任騰訊CTO的張志東,提出了一個要求:騰訊所有的賬户都要像銀行一樣做到一筆都不差,一分都不差。

而這個要求説白了,既然你們要自己做數據庫,那這個數據庫就要做到金融級的。

有朋友比較清楚,金融行業對於數據庫的要求是最高的,可用性要達到99.999%,也就意味着,全年數據庫發生故障的時間不可以超過5分鐘。

這不是一件容易的事兒。結合騰訊具體業務,除了張志東的要求可靠性和一致性之外,自研的數據庫還需要做到可以無限水平擴展,即能夠根據業務需求進行延伸。

“我們很多業務不能接受很長的交易時長,比如遊戲裏面買一個道具,微信裏發一個紅包,它是要馬上到賬的,因此對於我們數據庫的穩定性、可靠性、性能以及可延展性都提出了很高的要求。”

在QQ空間、QQ遊戲、財付通等一系列業務推動下,定位於金融級一致可靠、互聯網彈性擴展、高性能的分佈式數據庫系統就從2007年開始逐步在騰訊內部孵化,就是後來的TDSQL。

QQ空間登錄頁

就在計費平台等多個部門的共同努力下,騰訊在2008年擁有了QQ、QQ空間、QQ遊戲和騰訊網四個億級流量入口;2009年,騰訊網遊收入超過盛大;2010年的3月5日晚,QQ同時在線人數超過1億……

經歷過那段時光的朋友都知道,騰訊那時有着難以掩蓋的光環。在這背後,騰訊自研的TDSQL數據庫也有着無法忽略的功勞。

安心喝咖啡

2010年,騰訊成立12週年紀念慶典結束之後,馬化騰發出了一封題為“打開未來之門”的全員信。

馬化騰全員信截圖

“開放”成為了這封全員信的核心思想,這也是騰訊決策層第一次將之定義為戰略級的行動。

技術層面,騰訊推出了開放平台(騰訊雲的前身),允許外部開發者接入。對於數據庫、共享存儲等基礎支撐平台,意味着其不僅要支撐騰訊內部業務運轉,也更要保證外部客户平穩開發和運行。

“騰訊內部是大胖子業務,體量非常大(用户數都是千萬級往上),到了開放平台我們做的時候發現很多小業務(用户百萬級,甚至更少),相對來説,由於場景差異化,他們更容易出現意想不到的故障。”潘安羣如是説到。

“這對數據庫的穩定可用、標準化服務方面提出了更高的要求,我們需要提供一個更加完整的底層數據庫解決方案才能夠讓他們儘可能避免各種問題。”

內部微信支付、網絡遊戲……,外部的不斷增加的開發者,TDSQL就在業務的推動下不斷髮展錘鍊。

到了2014年,以金融級場景為例,TDSQL已經支持了騰訊內部90%的計費業務,託管了數百億賬户,每天進行數億筆交易。

對於擁有夢想的技術人員,從來都不會安於現狀。他們清楚,TDSQL在內部業務的驅動下,已經達到了團隊當年提出“安心喝咖啡”的目標。

就是説,TDSQL在各種突發情況下,例如斷電、服務器故障,工程師依然可以一邊喝咖啡,一邊抖着腿看系統“自愈”。

“TDSQL在研發之初,就是默認所有的硬件設備都是不穩定的,所以應對任何硬件發生的問題都能夠很快的解決掉。”李綱對雷鋒網説到。

點燃心中的火苗

“我們此前有些保守,業務有什麼需求,我們就做什麼滿足他的需求,但2014年之後我們覺得要有更高的挑戰,我們希望技術的選擇、探索能夠走在業務的前面。”

而這個時候正好有一個機會擺在了李綱他們的面前:國內首家民營銀行和互聯網銀行——微眾銀行,面臨着數據庫的選型。

“微眾銀行的定位是普惠金融,他們希望將IT成本降下來,並且能夠廣泛服務用户。”李綱回憶到。

顯然,這樣的要求下,以Oracle為代表傳統集中式數據庫首先就被排除在外了,微眾銀行CTO和李綱聊了半個小時之後,最終選擇了TDSQL作為核心系統數據庫。

TDSQL就此成為了第一個使用在銀行核心系統的國產數據庫。

“我們不僅感覺很驚奇,而且還膽戰心驚。我們和微眾剛接觸的時候,會跟他們説我們一致性、性能做的有多好,而他們首先跟我們講的是,先不説別的,可用性、穩定性能不能保證?”潘安羣對雷鋒網説到。對於銀行等金融機構來講,故障超過半小時,就已是非常嚴重的級別。

因為是首次應用在銀行核心系統,無形中給潘安羣他們帶來了很大的壓力,但在微眾銀行開發人員與騰訊技術人員努力了半年之後,2014年底,微眾銀行核心系統正式投產,承載了微眾銀行數百個核心系統和全行所有OLTP業務。

當前,微眾銀行每一個賬户的科技運維成本降至僅為3.5元/年,僅為國內其它銀行的1/10,相比國際銀行則更低,只有其成本的2%至5%

截至目前,微眾銀行基於TDSQL搭建的分佈式銀行核心系統已成功服務超過2.5億客户,實現年均日交易3.6億筆,單日交易峯值近6億筆,最高TPS達到10萬+。

這個項目也成為了騰訊金融雲第一個案例,而這個案例點燃了潘安羣他們心中的火苗:讓TDSQL真正的走出去。

早期核心團隊合影,前排右三為潘安羣

一點點看着TDSQL長起來的潘安羣很清楚,TDSQL 實際上已經完全具備了承擔銀行核心交易的能力。放眼當時整個行業來看,極大部分金融政企機構核心數據庫仍受制於國外傳統集中式數據庫產品。

然而,讓大家都信服TDSQL的能力,微眾銀行的案例還缺少點意思,主要有以下原因:

  • 微眾銀行是騰訊發起成立的,選用了TDSQL缺少了些説服力;

  • 微眾銀行是一家互聯網銀行,沒有線下網點,業務模式也和傳統銀行很不同。它能用國產數據庫,並不完全證明傳統銀行也可以用。

  • 微眾銀行的系統搭建是從無到有的過程,不涉及到替換的問題,TDSQL能否真正應用於金融傳統核心系統還無法證明。

但對於心中已經燃起火苗的潘安羣,這股火一直都在憋着。

就在2016年11月10日,潘安羣發了這樣一條朋友圈:力爭讓每一張錢都能打上TDSQL Inside的標籤。

真正的舞台

這些年,國產數據庫發展創新持續在進行,不過一直都沒有觸及傳統銀行核心。

在這個過程中,TDSQL的研發人員也都沒閒着,一直在打磨着產品。

“客户使用數據庫產品希望是一鍵式的,不僅是在開發的時候,包括以後業務擴容的時候都是輕量化、標準化、不容易出錯,這是最重要的。”TDSQL專家工程師雷海林對雷鋒網接着説到:

“對此,我們打造了DBbrain智能運營平台;在遷移的兼容性方面,我們同樣也做了很多的工作。”

在這些工作全部完成之後,雷海林他們很清楚,TDSQL已經完全具備了標準成熟的數據庫產品所要求的能力。

機會總是會留給有準備的人的。

2018年,張家港銀行核心系統使用的Sybase數據庫已經跟不上業務的發展了。

一到年底銀行業務高峯期,CPU使用率就衝上去,I/O 吞吐也直接到瓶頸,有時候跑着跑着,核心數據庫突然就卡住一秒。而核心數據庫卡住一秒,張家港行科技部數據庫團隊也跟着緊張一秒。

一旦哪天真的停了下來,後果將不堪設想,這也讓行領導決定升級其核心繫統數據庫。

銀行升級核心系統數據庫一直以來的潛規則是,首選考慮的會是Oracle數據庫。然而整個Oracle一套軟硬件核心就需要大幾千萬的支出,同時集中式數據庫並不符合雲時代彈性擴展的趨勢。

就在張家港行科技部數據庫團隊負責人盧麗歡犯難的時候,和張家港銀行、TDSQL有過合作的長亮科技團隊得知了這個消息,不斷給張家港銀行安利TDSQL。

“不僅性能好,價格也便宜!”

聽到TDSQL的能力和價格,盧麗歡心動了。然而方案提交之後,就引起了軒然大波,因為在國內還沒有一家傳統銀行核心系統數據庫升級選擇過國產數據庫。

但此前張家港銀行的一個非核心繫統使用過TDSQL數據庫,表現也很穩定,因此這個方案讓張家港銀行的領導有了些心動。

開了10多次會進行論證之後,行領導最終拍板確定,這次銀行核心系統數據庫就選用TDSQL。然而,為了安全,這次核心系統數據庫替換採用賽馬機制進行:

同時建造一套基於TDSQL數據庫的系統和一套基於Oracle數據庫的系統,二者互為備份,到投產前再決定誰來成為主數據庫。但是,無論是TDSQL還是 Oracle,都要滿足一個硬指標:1500TPS。也就是至少支持每秒1500次的交易。

“張家港銀行領導的這個決定讓我們燃起了鬥志,能給我們一個突圍的機會就已經很不容易了,也讓我們有了更大的動力來做這個事情。”TDSQL高級工程師張文對雷鋒網表示到。

至此,騰訊雲數據庫團隊期待的真正舞台拉開了帷幕。

掀開新的一頁

説到這兒,我們不得不提長亮科技。如果把TDSQL比作一塊磚的話,騰訊雲做的是提供“磚”的事情,長亮科技則負責把從騰訊雲搬過來的“磚”砌到張家港銀行的服務器上。

2018年10月,長亮科技團隊進駐了張家港銀行的機房,開始了第一次的測試。

當將TDSQL數據庫灌入服務器,機器點亮,第一次測試開始,當結果出現之後,結果卻令現場的人大跌眼鏡:100TPS,只有目標成績的十五分之一。

當遠在深圳的張文聽到這個結果時,立馬感覺不可思議。然而白紙黑字的結果就擺在那,既然你説不可能,你來呀!

張文第一時間從深圳出發,他堅信TDSQL絕對沒有問題,只是個小問題,兩三天肯定就解決了。

然而落地趕到張家港銀行之後,自信的他,身後也冒起了冷汗,再看到身後銀行領導的眼神,壓力更大了。

為了找到問題,項目組工程師一條一條的SQL語句去測試,很快,發現行裏原有庫表設計有一個小問題,只要略微調整一下,TPS 的表現就能瞬間回血一大格。

時間也並非如張文所預估的兩三天,經過半個多月的優化,TDSQL性能直線突破了1500TPS,張家港銀行領導的眼神也變得如往常一樣熱情。

就這樣,搭載TDSQL數據庫的核心繫統建好了,為了保證系統穩定性,項目組工程師又開始進行兼容性測試。

這裏需要説清楚的是,銀行核心系統就像大樹的樹幹,基於這個樹幹會長出多個系統出來,這也就意味着,樹幹必須要保證與樹枝之間兼容,而在張家港銀行,基於核心系統“生長”的系統有上千個。

為了保證與其他系統的兼容性,長亮團隊工程師選擇了500多個常用的交易系統,就這樣一步一步的測試,所有人的心也都放了下來。

最終,行領導決定:正式把TDSQL作為主數據庫,Oracle數據庫作為備份。

監管機構也認可的這個計劃,上線時間也隨之被確定:2019年8月16號。

當所有人都在盼望着最後一刻到來的時候,卻又發生了一件詭異的事情。

“當時他們採購了一批機器,這批機器規格和我們測試環境一模一樣,但在實際測試時候發現,網絡I/O時快時慢,你沒有請求時機器性能很低,如果給它壓力比較大,性能就發揮得很好,我們覺得很詭異,與正常的反應正相反。”張文回憶到。

面對這個情況,不僅是身在張家港的工程師,包括騰訊深圳本地的工程師都開始來幫忙定位這個問題。甚至當時還聯繫了服務器廠家,然而廠家也沒能給出具體的解決方案。

“越是危機,越需要冷靜。很快我們就發現服務器本身的接口其實很空閒,那麼時延很可能來自網絡。趕快抓包分析,問題被定位在了數據庫服務器網絡模塊上。再細緻定位,問題出在網卡上。”

經過大家的共同努力,很快從一個國外論壇上找到了線索:戴爾服務器為了節能,會在極端高併發的時候,自動開啓網卡的省電模式,問題隨之被解決。

坐在桌旁回憶起這段往事的張文,至今仍心有餘悸。

“如果沒有找到問題的話,我們可能就需要用測試的機器來頂上了,雖然這批機器被我們一年多的測試折磨得千瘡百孔。但這並不是我們想要的方案。”

2019年8月15日23:31分,張文發了一條朋友圈:

《張家港十二時辰》暑期鉅獻!

激動的心情溢於言表,並配了下面這張圖。

2019年8月16日21:00,星期五,張家港銀行老的核心繫統熄火。

2019年8月18日18:00,星期日,張家港銀行新的核心繫統啓動。

然而,每個人的心依舊在懸着。

2019年8月19日10:00,星期一,張家港銀行交易量猛衝,達到峯值,然後緩慢回落。

成了,大廳裏掌聲雷動。

從這之後,張家港銀行成了“旅遊勝地”。嘉興銀行、富邦華一銀行、青海省聯社、山東城商聯盟、華通銀行紛紛派人來參觀取經。

值得一提的是,張家港銀行使用的TDSQL經過優化之後,核心系統可以達到6200TPS。在性能方面,高頻賬户類交易耗時在300毫秒之內,查詢類交易耗時在100毫秒之內,20秒內可以完成1萬筆批量代發代扣業務,日終跑批耗時17分鐘,存貸款結息耗時16分鐘,相比老核心日終批處理耗時60分鐘、存貸款結息耗時180分鐘有着質的變化。

同時,成本更是被極大優化。一個可以比對的數據是,集中式數據庫綜合硬件成本估算在4000—5000萬,而張家港銀行的分佈式TDSQL方案不到1000萬,降低了近75%。

而那個被用來作為備份的Oracle數據庫,最終沒被派上用場。

新的時代

就在張家港銀行核心系統上線之後,諮詢TDSQL數據庫的銀行多了起來,就在張家港銀行項目結束之時,TDSQL的另一個團隊正做的熱火朝天。

平安銀行信用卡A+新核心系統數據庫選型也選擇了TDSQL。而這次,更是一次業內首次將銀行核心系統從傳統集中式大型機下移至國產分佈式架構平台的嘗試。

負責這個項目的同事是王輝,他對雷鋒網表示到:“平安銀行的科技能力在全國都算是名列前茅,所以他們本身對合作對象的能力要求非常高。”

在這個高要求下,系統開發的過程自然並不會一帆風順。

“平安那時候採購了兩批機型,戴爾和聯想的,他們在測試TDSQL的時候戴爾服務器延時偏大,聯想偏小,發現這個問題之後,他們還未查明原因,就直接到我們項目會議室説你們產品有問題,趕緊把誰給我叫過來看一下。”

當時,平安的負責人很着急,王輝希望對方能夠把情況講清楚,但對方卻認為已經沒有時間間去詳細溝通這個事情,認為產品存在性能問題。雙方緊張之下,王輝只好到樓下買了一瓶飲料喝了下去,轉了一圈才上去。

上樓之後,首先跟對方先對了一個規矩:彆着急。

之後在騰訊同學的測試下,發現是兩批服務器的配置不一樣。向行方提供了詳細測試報告後,騰訊同學的專業折服了平安的負責人。

而這時候,他們也有了一個約定,等系統平穩上線之後,要一起喝頓酒。

而就在正式上線前最後一次版本升級過程中,為了確保升級過程順利,騰訊雲事先通知了升級期間應用不能進行壓力測試,但是這個通知被行方無意中疏忽了,而在騰訊升級時,仍然做了壓力測試導致出現了一些問題。

第一時間,平安銀行就通知了騰訊雲認為產品又有問題,而5分鐘後,平安銀行則又通知不是騰訊雲的問題。在此之後,為了讓客户加強對產品的信心,雙方定下了一個“15分鐘原則”,即問題發生後雙方各自檢查15分鐘,再一起交流、溝通。

雷峯網:“這是不是一個由不信任到信任的過程?”


王輝:“是的,雖然他們選擇了TDSQL,但是開始並沒有太相信我們,而我們不管是什麼問題,都會幫助他們解決,最終都滿足了他們的要求。”

有着Oracle和AWS從業經歷的王輝對雷鋒網表示到,這樣的服務在與跨國公司的合作中根本體驗不到,其中有以下3個原因:

  • 第一,語言障礙,這是最大的問題;

  • 第二,國際化的企業很難為某個客户定製;

  • 第三,整個服務流程和問題處理流程非常長,它的時效很難滿足國內個別客户的要求,尤其是金融要求,你要達到這個時效,付出的費用非常高。

就這樣,在騰訊事無鉅細的服務之下。2020年10月31日凌晨5時,平安銀行信用卡A+新核心系統成功上線,其新系統能保障10億級交易賬户,並可實現10億級的海量日交易量,真正為平安集團接下來的“雙11”大戰構建出銅牆鐵壁。

“上線前的頭兩週和上線之後的後兩週,我們是24小時響應的,投產的那三天我們是24小時大概有6個人在現場。”王輝回憶到。

在他看來,給客户的感覺就應該是產研包括騰訊雲團隊都在全程保駕護航。

也就在對話結束之後,王輝和張文便匆忙趕往機場,去為另一個客户提供技術服務。

一條正確的路

 “我是2003年加入的騰訊,在這個過程中我們整個數據庫團隊到目前為止,主創團隊所有成員幾乎都還在,團隊超級穩定,我們昨天晚上和微眾銀行一個合作很深的部門年度聚餐,連着六年聚餐,發現都還是那些人。”李綱回憶到。

2017年騰訊雲TDSQL團隊滿十年工齡員工合影

“我們過去十多年基本上沒有走偏過,這也是能夠讓我們團隊始終保持穩定非常重要的原因。”潘安羣也如是説到。

穩定的團隊,吸引了更多的數據庫人才不斷加入這個團隊。加之公司持續不斷地進行投入,則讓這個團隊在每一個方向點選擇上的堅定一致。

 “數據庫的正朝着雲原生、超融合、國產化這三個方向進行發展。”

2020年12月24日,騰訊雲正式宣佈數據庫品牌TDSQL全新升級,李綱在舞台上如是説到。

原有的TDSQL、TBase、CynosDB三大產品線統一升級為“騰訊雲企業級分佈式數據庫TDSQL”,升級後的騰訊雲TDSQL將涵蓋分佈式、分析型、雲原生等多引擎融合的完整數據庫產品體系。

“我們更希望客户、包括行業對騰訊雲數據庫體系能有一個更清晰的認知。”李綱表示。

根據他回憶,因為三個數據庫名稱和自身特點本身就沒有吻合的匹配度,甚至有不少客户會產生“該選用哪個數據庫”的困惑。

同樣在他們看來,未來超融合技術體系還會解決多引擎共存下對雲數據庫的開發與應用選擇帶來的挑戰,TDSQL也將通過AI智能調度,以及Serverless等方案,來實現多引擎的統一標準化服務,讓用户能夠快速實現研發及服務的全鏈路打通,而無需關心技術細節。

回望TDSQL這段從開源到適配,從適配到自研的歷程,騰訊雲將每一次經由業務適配考驗後的思考、經驗都化作數據庫服務的“活水”,灌溉自身業務的同時也灌溉了行業、開發者社區。

從企業內部走向產業市場,歷經金融、政務、教育、文旅、工業、醫療、交通等多個場景的TDSQL,已經從產品化、技術成熟度、實際行業場景打磨的成長階段,走向了推動國產化數據庫良性發展的階段。

事實證明,TDSQL走的這條路是一條國產數據庫可以走得通的路。

必須承認的是,與國際上通用的商業數據庫產品相比,國產數據庫還有不小的差距。但通過國內數據庫企業不斷的“自我博弈”,這樣的差距必然會越來越小,甚至在雲時代實現超越。