王曉燕



摘要: 分布式數據庫提供更加強大的并發處理能力、更好的資源擴展性以及架構彈性,近年來被廣泛應用于商業領域。本文通過對分布式數據庫的深入研究以及多種部署方案的對比分析,提出適用于某企業互聯網數據平臺的數據部署方案。
關鍵詞: 分布式數據庫; 集中式數據庫; 共享數據庫集群; 非共享數據庫集群
中圖分類號:TP392
文獻標志碼:A
文章編號:2095-2163(2017)04-0056-04
0引言
近年來,隨著互聯網企業的快速發展,分布式數據庫系統已廣泛應用于商業領域。較之傳統的集中式數據庫架構,其性能優勢在于能夠提供更為強大的并發處理能力、更為優質的資源擴展性和架構彈性,但卻在數據一致性方面略弱于集中式數據庫。業界較為流行的分布式數據庫架構主要分為4種:多活共享數據庫集群、大規模平行處理數據庫(MPP)、分布式數據文件處理系統(典型產品Hadoop)和基于數據中間件調度管理的非共享數據庫集群[1]。其中,多活共享數據庫集群和基于數據中間件調度管理的非共享數據庫集群更適用于面向客戶交易的應用場景,而其它2種架構則主要適用于大數據分析的應用領域。
某企業在自身互聯網應用平臺建設過程中,根據其金融行業背景及業務特點,并結合現有技術能力和管理水平,研發設計并實現了一種面向大型互聯網應用平臺的基于多活共享數據庫集群和非共享數據庫集群相結合的分布式數據庫系統架構。
1技術應用簡介
目前業界成熟的多活共享數據庫集群主要通過Oracle RAC和DB2 pureScale兩種技術產品展開核心研究,并且僅在計算資源層面上研發獲得了分布式架構,而在數據的邏輯結構層面并未真正推行分布式設計。基于數據中間件調度管理的非共享數據庫集群的最佳實現是采用MyCAT中間件+MySQL數據庫組成的分布式集群。該架構中,數據可被靈活地垂直拆分和水平切分,是真正意義上的分布式數據庫系統架構,但卻也在一定程度上提升了與其相關的技術復雜度和管理復雜度。
國內互聯網應用平臺的案例中,大型互聯網公司出于對降低成本及技術發展自主可控等因素的考慮,更傾向于使用MySQL分布式數據庫技術方案。而金融企業考慮到開源數據庫產品的技術風險較大,自身技術研發和維護能力有限等因素,更傾向于使用由商用數據庫產品(Oracle、DB2等)構建的分布式數據庫方案。但也有數家機構技術理念頗顯前衛,正嘗試在互聯網應用平臺建設中使用開源技術及產品,并采取循序漸進的穩健策略,先在外圍應用系統中使用,而隨著開源技術和產品成熟度提高及自身技術團隊和能力建設的加強,則逐步向重要應用系統形成有益拓展與推廣。
2產品選型分析
DB2 pureScale技術在近幾年才趨于成熟和商用,使用案例極少,容易在運用時遭遇首發故障,需經過市場和時間檢驗。Oracle RAC技術問世已達十余年,且得到業界的普遍認可,并在金融領域推出較多使用案例,因而呈現出頗高的技術成熟度。MySQL分布式數據庫架構的靈活性和擴展性均為較好,成本投入經濟實惠,在超大規模互聯網應用平臺案例中業已得到復雜交易和超高強度并發交易場景的實際檢驗。
基于前述討論可知,綜合考慮到互聯網應用領域的IT架構特點、金融行業的風險要求,以及引入并掌握多種主流數據庫產品技術對企業未來發展提供更加靈活、更為多元化的IT服務能力則將具有可觀重大的現實意義。因而研究中摒棄傳統的“小型機+DB2數據庫”技術架構,而是選擇更為開放的“X86服務器平臺+Oracle或MySQL數據庫”的技術路線。
3數據應用場景分析
該企業數據應用場景主要分為3類:前端交互應用類數據、中端交易應用類數據、后端賬務核算及平臺管控類數據。其中,前端交互應用類數據主要包括:網銀、商戶、營銷活動、交易推送等;該類數據不采用分庫分表設計思想,因此集中式數據庫設計可降低技術復雜度。而中端交易應用類數據主要包括:賬戶、支付、產品、客戶等。該類數據采用分庫分表設計思想,旨在更好地滿足應用產品及服務的快速部署和迭代的需求,故采用分布式數據庫設計將更為現實合理,可極大地提高數據拆分或整合的靈活性和擴展性。后端核算及管控類數據主要包括賬務核算、平臺管理、平臺監控等。核算賬務類數據對數據一致性要求極高,而平臺管理及監控等數據的規模較小,無需采用分庫分表設計,故采用集中式數據庫結構更為適合。
4數據庫系統設計目標
針對互聯網應用平臺的相關特性要求,對數據庫系統設計方案提出以下定制目標[2]:
1)高可用性。互聯網應用平臺數據庫系統應在邏輯和物理層面提供良好的高可用性設計,確保設備硬件及數據邏輯副本具有多份冗余。
2)高并發處理能力。互聯網應用平臺數據庫系統不但要具備正常日間交易的處理能力,還要能在特殊時段或秒殺場景下平穩地應對高并發交易量的沖擊。
3)可擴展性。互聯網應用平臺數據庫系統能夠良好地適應業務交易量的發展趨勢,在各種性能和容量資源方面都具有強大的可擴展能力。
4)靈活性。針對應用系統的快速迭代和變更,互聯網應用平臺數據庫系統應配備較強的部署靈活性。能夠較好地適應數據拆分和整合的變化需求。
5)業務連續性。互聯網應用平臺數據庫系統應形成較強的容災能力,能夠在人為和自然災害發生后盡快恢復系統服務狀態,盡可能降低數據丟失量和影響范圍,同時符合數據安全要求的關鍵性指標也可得到有效控制與保障。
5數據庫系統技術方案
為滿足互聯網應用平臺數據庫系統的設計目標要求,提出3種技術方案。在此,給出研究論述如下。
5.1A方案
A方案基于Oracle RAC的數據庫雙活集群設計思想,全部采用高端4路X86機架式服務器,根據不同應用需求建立4組Oracle RAC數據庫雙活集群,每組集群由2臺物理服務器組成。利用Oracle RAC技術實現本地高可用和性能負載均衡。endprint
集群A部署的數據庫包括:網銀、商戶、營銷活動、交易推送等;集群B部署的數據庫包括:賬戶和支付;集群C部署的數據庫包括:產品和客戶;集群D部署的數據庫包括:賬務核算、平臺管理、平臺監控等。研究中,A方案部署結構設計如圖1所示。
隨著業務發展和性能需要,可將數據庫集群規模由2個節點在線擴充至4個節點。在集群B和C部署的數據庫,可通過新建RAC集群B′和C′實現數據模塊的水平拆分。數據庫內部的表可通過分片設計以提高數據結構的使用性能和容量。
數據庫的文件和數據全部存放在外接共享存儲陣列上,并利用存儲底層遠程復制技術實現數據容災。若未來需要建立異地容災環境,則采用Oracle ADG技術將主生產中心的數據異步復制到異地容災環境。
5.2B方案
B方案基于Oracle RAC和MySQL的數據庫混合架構設計思想,主要采用2種硬件架構的服務器類型:部署Oracle RAC集群的服務器采用高端4路X86機架式服務器,其結構與A方案類似;部署MySQL數據庫的服務器采用中端2路X86機架式服務器。利用MySQL主從復制技術實現高可用集群[3],同時給每個集群配備一個準同步復制的只讀數據庫,通過讀寫分離模式提高性能負載。
Oracle RAC集群A部署企業網銀、商戶、營銷活動、交易推送等數據庫;RAC集群B部署核算、平臺管理、監控等數據庫;建立2組MySQL高可用集群分別部署賬戶、支付和產品、客戶等數據庫。
隨著業務增長及性能要求不斷提高,可對后端交易類應用的數據庫進行多節點水平切分來構建數據模塊的分拆部署,提高數據庫的整體性能。數據庫內部的表可通過分片設計提高數據結構的使用性能和容量。
數據庫的存儲可以采選2種處理模式。其中,Oracle RAC數據庫集群的數據文件存放于外接共享存儲陣列;MySQL數據庫是將數據文件存放于數據庫服務器的內置硬盤(SSD硬盤或閃存卡,滿足數據庫高讀寫性能要求),并利用RAID10對其進行數據保護和性能提升。采用內置硬盤的存儲方案不受制于共享式存儲陣列和SAN資源承載能力以及空間束縛,能夠更為快速、靈活地擴充數據庫服務器節點。
容災方面,Oracle RAC集群將利用存儲底層遠程復制技術實現容災。而MySQL分布式數據庫的主從復制技術無法實時同步復制,不能保證數據零丟失,因此普遍采用的容災策略是盡量把數據模塊縮小、打散,并選擇多站點部署(3個及以上)。該策略可使MySQL數據庫極大地降低對容災環境的依賴,由容災架構變為分布式多活架構,嚴格控制故障和災難對數據的影響范圍,減少數據丟失量。
因此,B設計方案是將交易類應用的數據庫橫向拆分成2個數據單元,每個單元均包含相互關聯的賬戶、支付、產品、客戶信息。將2個數據單元分別部署在主生產中心和同城災備中心,通過數據庫主從異步復制技術(RPO>>0)在對端建立容災數據庫環境;若網絡資源存在局限性而難以達成跨站點部署,可先將MySQL高可用集群全部部署于主生產中心,同城災備中心僅存放異步復制的數據庫容災環境,設計不足即是將會產生大量數據丟失。未來須通過機房環境和網絡資源的改善,逐步實現跨更多站點的分布式部署架構。也可將數據庫文件存放在外接共享存儲陣列,利用SRDF技術實現數據同步復制的同城災備中心,確保數據零丟失,但在一定程度上卻會降低數據庫部署的靈活性。
研究中,B方案部署結構設計則如圖2所示。
5.3C方案
C方案基于Oracle多種技術結合的數據庫架構設計思想。在服務器選型方面,采用2種硬件架構的服務器類型:部署Oracle RAC集群的服務器采用高端4路X86機架式服務器,其結構與A方案類似;部署Oracle ADG高可用數據庫集群的服務器采用中端2路X86機架式服務器。高可用集群內部節點之間采用數據同步復制技術確保本地數據零丟失,并通過讀寫分離提高性能負載。
Oracle RAC集群A部署企業網銀、商戶、營銷活動、交易推送等數據庫;RAC集群B部署核算、平臺管理、監控等數據庫;建立4個Oracle ADG高可用集群分別部署后端交易類應用的賬戶、支付、產品、客戶等數據庫;也可建立2個數據庫高可用集群,每個集群分別部署2個數據庫,需要根據非功能測試和驗證后確定最終方案。
面對業務增長及性能要求的不斷提高,Oracle RAC集群可通過動態擴充節點來增強處理能力。而針對后端交易類應用的數據庫,當單個高可用集群資源性能不足時可快速建立一個新集群,將數據庫水平切分為若干數據模塊,部分遷移至新建集群,達到提高該數據庫整體性能的研究效果;數據庫內部的表可通過分片設計改進數據結構的使用性能和容量。若某個數據庫需要提升讀操作性能,可利用ADG技術為該數據庫實例建立2個只讀副本。
數據庫的數據文件都存放在外接共享存儲陣列上,并通過存儲底層遠程復制技術實現數據的同城容災。未來機房環境、網絡資源及存儲資源滿足條件時,可借鑒B方案將容災架構調整為跨站點多活架構。
研究中,C方案部署結構設計即如圖3所示。
6結束語
面對開源數據庫技術的互聯網應用正進入普遍優化實施的潮流趨勢下,企業的互聯網應用平臺的項目建設既要注重相關技術產品的安全穩定運行,更重要的是客觀理性地認識到這種技術趨勢在其自身良好發展背景下所體現出的合理性和必然性。因此,綜合考慮技術發展、方案可行性、應用適配[CM(26]性、成本投入、運維管理及自身發展等諸多方面因素,最終選擇基于Oracle RAC雙活集群和MySQL分布式集群相結合的方案B作為該企業互聯網應用平臺的數據庫系統技術方案。互聯網應用平臺的數據庫系統建設是一個非常復雜、龐大的項目,除了最為關鍵的架構問題外,還有很多技術細節問題需要尋求有效解答。比如MySQL數據庫的分片方案、分布式SQL語句的編寫規范、分布式數據庫系統的數據遷移和運維管理體系等。本文旨在討論互聯網應用平臺數據庫系統架構層面的設計與分析,其他技術問題仍有待在后續工作中展開重點深入的探討與研究。
參考文獻:
[1] 周英飚. 通用無共享數據庫集群研究與實現[J]. 計算機工程與應用,2007,43(32):156-160.
[2] 陳爭航. 分布式數據庫系統研究與應用[D]. 成都:西南交通大學,2014.
[3] 陳冠華. 基于消息中間件的高可用MySQL集群的研究[D]. 武漢:華中科技大學,2007.
[4] 胡金柱,譚支鵬. 分布式對象數據庫系統中的對象管理策略[J].小型微型計算機系統,2001,22(1):96-99.
[5] 戴婉榮. 基于分布式數據庫的數據同步機制的研究與應用[D]. 武漢:武漢理工大學,2010.
[6] 蘇燕強. Oracle分布式數據庫及其應用研究[J]. 計算機應用與軟件,2004,21(8):36-37,121.
[7] 陳珉喻,喻丹丹,徐國慶. 分布式數據庫系統中數據一致性維護方法研究[J]. 國防科技大學學報,2002,24(3):76-80.endprint