分佈式數據庫在光大銀行關鍵業務系統的應用探索

近十年,我和我的團隊一直負責光大銀行總行的數據庫運維,這裏面既包括交易型數據庫,也包括 MPP,還有 Hadoop 這樣的大數據運維。在運維的過程中,我們一直也在思考現在的數據庫有哪些問題、面臨哪些風險、數據庫技術的發展趨勢是什麼,這一點是很重要的,因爲它決定了我們爲什麼要轉向分佈式,我們希望分佈式能替我們解決哪些問題,它能夠解決哪些問題和它不能夠解決哪些問題。我們現在運維的數據庫包括商業數據庫,像 Oracle、SQL Server、DB2;也有開源數據庫,像關係型的 MySQL、NoSQL 數據庫、Redis(KV 型),還有大數據、MPP,和分佈式數據庫等等。

目前運維的數據庫面臨哪些挑戰?

以我們的觀點去看現在銀行數據庫面臨哪些挑戰呢?我們認爲有下面幾點。

1. 處理能力受限

很多人都認爲我們現在處理能力受限,但是數據庫能力受限到底瓶頸在哪裏?在我們看來在高的業務壓力下瓶頸主要有兩點:

一是集中式存儲資源的壓力。我們可以用最高端的存儲,用最好的設備,但他終究是一個單點,他的性能受整體的限制;

二是熱點資源。其實我們做數據庫的時候更會發現相較於硬件的限制,軟件的限制可能更大,像我們經常遇到的鎖衝突的問題可能還是比較表層的問題,其實更多的是在數據庫軟件給你提供 ACID 和各種 SQL 接口的時候,他本身不是沒有代價的,而是有成本的,這些成本本身會造成熱點的內存、熱點的序列、熱點的內部閂鎖等衝突,這些衝突在高壓力下會對我們的性能造成極大的影響。

2. 部署集中會導致風險的集中

我們可以用最高端的設備,可以用最好的軟件集羣,我們可以將故障率降低到非常非常的低,也可以讓切換時間變得非常短,變成秒級,讓他可以在幾秒的時間切換完,但是他仍舊避免不了一點,就是在我們的數據庫是集中式的時候,一旦出現問題,在這幾秒之內我們所有的交易都會停止。這其實是我們想提升的一個方面,我們希望有一個能夠 24 小時不間斷運行的數據庫。

3. 跨數據庫中心多活部署

銀行是兩地三中心的結構,它的投入很大,我們希望每個中心都利用起來,能夠利用我們運維中數據中心的資源儘量的對外提供業務服務,這也是我們希望能夠通過分佈式的方案去解決的。因爲在傳統的架構下,我們只能用最高端的設備,比如雙活的存儲、雙活的軟件,但這在更多的情況下提供的是更高的可用性,並不能保證我們在所有的數據中心同時對外服務。

4. 數據庫產品多樣化

面對內外部多變形勢,抵禦產品供應鏈風險,我認爲供應鏈的問題一直存在,在這我們必須要感謝大洋彼岸的大統領,因爲他讓我們知道這個問題現在有多麼的緊迫,因爲我們是 China,我們可能要跟大統領說一下“感謝,讓我們意識到這個問題”。它決定了我們爲什麼要轉向分佈式數據庫,我們希望分佈式數據庫或者說分佈式架構替我們解決什麼樣的問題,因爲這是一個比較複雜的應用場景,當我們在整個應用場景遇到一些問題的時候,當我們面臨一些抉擇的時候,甚至是遇到一些困難的時候,它可以讓我們回到問題的本原,回到我們的初心,讓我們想想我們當時要解決什麼問題,我們要選擇什麼樣的技術去解決這個問題。

銀行需要什麼樣的數據庫?

我們總結了一下銀行到底需要什麼樣的數據庫。

首先數據庫是科技重器。

大家回想一下銀行的本原,銀行是經營什麼的?有人說銀行是經營錢的,我覺得不準確,印鈔廠是經營錢的,銀行的使命其實是財富的流轉。以前的票號說匯通天下,意思是讓財富在空間之間流轉,現在大家貸款買房,銀行給你貸款,過幾十年你把他還清,在幾十年之後你去住這個房子,這是銀行讓財富在時間上流轉,其實銀行的使命是讓財富在時空之中流轉,在流轉的過程中爲什麼你相信銀行能承擔這個使命呢?是因爲銀行有一個經營的核心,這個核心是信用,只有有信用的銀行你才願意把錢存給它,這個信用不僅僅是你的錢要一分不差的給你,同時還要準時的給你。如果你取存款的時候銀行跟你說:“你一個月之後再來吧,對不起現在沒有錢。”你還會存給他嗎?不會。銀行經營的核心決定了我們後臺支撐銀行的整個系統,不僅僅是數據庫,都要有準確極致的要求,既要時間準確,又要數字準確。

第二是銀行業務發展本身的需要。互聯網金融某信、某寶的發展倒逼銀行信息系統不斷提升,既要提升交易的性能,也要提升我們批處理的性能,因爲銀行整個金融系統是互相連接的,你要這樣做,別人也要這樣做,我們要連成一個整體的金融網。

第三是監管的要求。這一點可能是銀行發展和互聯網金融發展比較大的一個區別,在這裏我跟大家分享一下,在過去兩年雙十一大促的時候,光大銀行一直在雙十一網聯的統計中成功率排名第一,其實準確的說網聯考覈的不僅是成功率,成功率是 99.9%,可以說很好,但是不夠,網聯還要考覈成功的絕對數量。去年雙十一大促的時候,光大銀行在全國銀行中排名第一,是因爲光大銀行在整個雙十一促銷過程中只有三筆交易超時,所以整個系統對我們的要求是相當苛刻的。我們在整個環境中,不僅在量大之後只能有很低的失敗比例,而且幾乎要求你每筆交易都不能錯。另外監管要求,如果有幾筆交易錯了一定要找出原因,他對我們的運維管理和對我們的問題分析有極高的要求,這可能是在實際應用場景中和現有的互聯網金融的一個區別。

第四是銀行也同樣面臨成本壓力。經常有人跟我們說銀行很好,有錢,你買買買就可以了,銀行是有錢,但是沒有一分錢是可以隨便花的,所以買買買只存在於段子中,現實是每一分錢都要精打細算,我們希望把錢投入到一個真正有收益的地方,銀行需要的就是這樣的數據庫,這樣的科技產品。

關於分佈式數據庫,我們的思考

基於上面這些思考,我們轉向分佈式數據庫,我們希望分佈式數據庫能解決我們的難題,同時符合銀行對數據庫的要求。關於分佈式數據庫我們的思考大概有以下幾種說法,有的我們同意,有的我們不太同意,在這裏我跟大家分享一下。

第一點是說中國的分佈式數據庫技術是世界第一梯隊,這點我們認同。因爲中國的分佈式數據庫技術得益於中國有世界上最大的互聯網應用,就像你要做一個好的廚子,一定要有好的食客一樣,我們有了好的食客,我們就有了成爲好廚子的潛質。

第二點是當前(2020 年)分佈式數據庫產品已經成熟了嗎?經過我們的調研對比測試,我們覺得這個答案是 No。分佈式數據庫產品的完全成熟,當然也不排除後面會出現技術爆炸、飛躍,我們認爲還需要五年以上的時間。大家可以回想一下這個路程,我們舉一個國外產品的例子,現在國外最大的一個數據庫廠商 70 年代末成立,進入中國是 80 年代末,真正在中國鋪開是 90 年代末,經歷了 20 年的時間。我們現在雖然有了各種技術的飛躍,但是有些時間跨度還是不可避免的,所以對於第二個問題的答案我們認爲是 No。緊接着是第三個問題,我們要繼續等待五年之後嗎?對不起,我們的答案也是 No,其實不光是數據庫,對所有產品的成熟,我們認爲有三種因素:

  • 第一產品自身;
  • 第二是應用開發的成熟,產品自身好還是不好是他自身的能力,但你需要知道怎麼用他;
  • 第三是運維管理,就是你會不會管理他,會不會維護他。

就像一輛車一樣,把車做的很好這是產品自身的問題,那我們會不會開,你會開了之後有沒有人會修。當所有這三個條件都成熟的時候,一個產品和他的環境才成熟,我們沒法等待一個產品,先把車造好了,我們再去學怎麼開,然後我們再去學怎麼修,這三個條件一定是同步的。所以正是基於這個判斷,光大銀行在做分佈式數據庫這個項目的時候定了一個原則,叫躬身入局,我們要參與其中,通過我們的應用開發、測試、運維、實踐與產品、技術和生態共同成長。生態也很重要,大家想想原來的廠商在中國的推廣是僅靠廠商本身嗎?我覺得不僅僅是,我們要感謝像 ITPUB 這樣的互聯網社區, 是這些社區讓我們一起成熟起來,包括在同業之間的分享和促進。

光大銀行分佈式數據庫實踐

我們比較早認知到分佈式數據庫和整個分佈式架構轉型對銀行科技工作的重要作用。從光大銀行信息科技部整個部門來說,把分佈式數據庫的建設工作列爲了部門的年度重點工作之一,從 2018 年就開始研究,到 2019 年我們連續同業調研、技術測試、選型論證以及試點的上線,今年我們的計劃是進一步推廣使用的範圍。因爲我是分佈式數據庫建設的項目經理,我們以前也經常引入一些新產品,那這個項目和以前我們做的其他項目有什麼不同呢?還是回到問題的本原,回到我們的初心,我們一開始要拿分佈式數據庫解決什麼問題。我們希望它解決的是三個問題:

  • 第一是性能的問題;
  • 第二是可用性的問題;
  • 第三是多活的問題。

銀行有很多系統,小的有幾百個,大的有幾千個,這些系統中有大量的邊緣系統,在以前這些邊緣系統可以給我們新技術的測試提供很好的場景,但是在分佈式數據庫這個項目中,這個場景不太適用,因爲我們對邊緣系統的可用性的容忍度很高,一個邊緣系統沒有我們之前說的那幾個問題,他沒法驗證我們的處理能力、穩定性、可用性,沒法幫助我們去鍛造開發測試和運維團隊的技術能力。而且我們知道分佈式數據庫是比較複雜的,在這種系統中引入分佈式數據庫的時候,相對來說投入的設備量也比較大,並且他沒有真正解決技術問題,也沒有真正創造技術價值,所以正是基於這些考慮,我們首先要把分佈式數據庫應用到真正需要的系統。所以有人跟我開玩笑說,我們以前做項目都是 Normal 模式,但這個項目一上來就是 Hard 模式。

光大銀行有兩個受客面最大的系統,也就是對客的系統,一個是理財,一個是繳費,恰恰是這兩個系統,我們把他拿來做分佈式數據庫的引入的試點,可以說是“到中流擊水”,我們就要做到“第一戰即攻堅戰”。

1. 新一代財富管理平臺

光大銀行是一個有理財基因的銀行,2004 年光大銀行在國內發行了第一款人民幣理財產品,所以 2004 年也被稱爲中國的理財元年,2018 年光大集團的董事長李曉鵬提出了打造一流財富管理銀行的願景, 2019 年光大銀行成爲了首批獲批成立理財子公司的股份制商業銀行,到了同年的 9 月,光大銀行理財公司正式開業,成爲了首家開業的股份制商業銀行的理財公司。

新一代財富管理平臺是支撐我們整個光大銀行理財公司運營的核心繫統,首先它要符合我們的資管新規和理財新規,是新一代的理財業務的全流程管理平臺,裏面既包括銷售註冊登記,還要包括理財產品的研發設計、生命管理以及理財相關實時業務管理,可以說是被銀行上下寄予厚望的一套系統。

在這裏安利一下光大的理財,光大理財的品牌叫做七彩陽光理財,大家看到這個圖裏七彩陽光是七種不同的理財風格,既有權益理財,也有混合型理財,我們把 TiDB 用到了現金理財,就是綠色的這一部分,叫陽光碧現金理財,在這裏我們是在受衆最廣的渠道中去應用我們真正需要它的技術。

並不是說有了分佈式數據庫,整個就萬事大吉,一鍵我們分佈式了,其實整個過程還是很複雜的,我們設計了全面的分佈式架構來確保我們的新一代理財系統能夠支撐光大銀行理財子公司的財富管理的業務,依託光大銀行私有云基礎設施,基於我行自主研發平臺 4.0 開發框架,並且定製了分佈式批處理的方案。我們的設計目標是餘額寶每小時理財交易 2000 萬,零錢通單日 5000 萬,同時還要滿足未來三到五年的業務發展和接入更多互聯網的渠道,其實他是一個面向未來的系統,這個系統去年 11 月上線運行,今年 4 月正式對外開放。

具體到了 TiDB,我們這次實施的是 TiDB 3.0.5 產品,我們在北京有兩個中心,同城跨中心部署,15 節點,5 副本的 TiKV,設計的是 40TB 的邏輯容量,每個節點是專門爲這個項目採購的機架式服務器,有兩個 4TB 的 SSD,24 核,512G 的內存。

因爲這是個重要產品,應該說“切入即決戰”,所以爲了保障新一代數據庫的平穩運行,我們可以開最好的車,但是一定要繫好安全帶,這個安全帶就是我們在實施的過程中,除了 TiDB 本身,我們還把 TiDB 的數據實時複製到了 MySQL,用一個異構的數據庫來保證一旦出現極端情況,能有一個逃生環境,去挽救我們的數據,挽救我們整個的應用。
大家都知道 TiDB 之前版本有個樂觀鎖特性(TiDB 4.0 版本 正式推出了悲觀鎖功能,和 RC 隔離級別,使用 TiDB 4.0 讓應用適配更容易),這個是怎麼適配的呢?後面 TiDB 有他自己的一個方案,但是我們這個版本還沒有這個特性,我們在整個過程中做了大量的適配的,在出現業務衝突的時候,應用程序和業務代碼能捕獲異常、重試機制,我們和 TiDB 的專家也做了很多合作,我們的開發人員也做了很多修改,爲什麼這麼做呢?還是回到初心,我們希望用一個產品解決這個問題,但我們不完全依賴某個產品解決我們的問題,我們根據他的特色選定了他,然後我們要適配他,這個事就像愛情一樣,你愛他就要愛他的全部。

2. 雲繳費

我們有一個口號叫“雲繳費繳出新生活”,這是光大銀行近年來着力打造的一個名品業務,它也是我們光大銀行在金融惠民宗旨下,通過銀行的資源、銀行的科技能力不斷的去方便大家,通過整合水、電、燃氣等等項目,我們向第三方開放這些繳費資源,把各個服務提供商整合在一起,向我們其他的銀行同業,行內、行外、某信、某寶這些第三方支付公司提供輸出。大家用某信、某寶去繳費的時候可沒有注意過,後面真正的繳費系統其實是光大銀行的雲繳費。

另外說一句雲繳費其實是光大銀行目前 TPS 最高的系統,在這個系統中我們用的是由光大銀行、光大科技和萬里開源合作打造的一款分佈式數據庫中間件叫 EverDB,是我們自有知識產權的一個產品。

光大銀行數據庫技術領域發展規劃

我們回到初心,再分享一下光大銀行在數據庫技術發展上的規劃。

我們雖然這次講分佈式,但分佈式並不是光大銀行在數據庫領域的所有,尤其銀行的系統特點是系統多,我們相信未來分佈式數據庫和集中數據庫一定會各司其職。並不是每個系統都會用分佈式數據庫,分佈式數據庫適配的是那些大併發、高頻次的業務系統,集中式數據庫仍然有它的生存空間,而且從數量來說,它沒準還是佔相對大的一個比例,它適配的是傳統業務系統,我們通過 RDS 的服務化部署能夠提供數據庫服務,國外商業產品、國內數據庫、開源產品結合使用,最後達到一個比較均衡的比例。

在分佈式數據庫領域我們會做到產品引入和自主研發結合,通過這種開放共贏的方法,打造有光大銀行特色分佈式的技術方案。

最後在應用推廣方面,今年我們還會在互聯網渠道、支付等系統中應用分佈式數據庫產品,同時我們會啓動新一代分佈式核心建設。

所有這些規劃,我們都非常歡迎像 PingCAP 這樣有實力的公司和我們共同發展、共同創造,當然更希望數據庫領域的專家還有才俊能夠加入我們,讓我們共同創造科技、創造財富。

本文整理自王志剛在 TiDB DevCon 2020 上的演講,王志剛爲光大銀行數據庫運維主管。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章