資料庫軟體架構,到底要設計些什麼?

2021-02-23 架構師之路

一、基本概念


概念一:單庫


概念二:分片


分片解決「數據量太大」這一問題,也就是通常說的「水平切分」。

一旦引入分片,勢必面臨「數據路由」的新問題,數據到底要訪問哪個庫。路由規則通常有3種方法:

(1)範圍:range

優點:簡單,容易擴展。

缺點:各庫壓力不均(新號段更活躍)。

(2)哈希:hash

優點:簡單,數據均衡,負載均勻。

缺點:遷移麻煩(2庫擴3庫數據要遷移)。

(3)統一路由服務:router-config-server

優點:靈活性強,業務與路由算法解耦。

缺點:每次訪問資料庫前多一次查詢。

大部分網際網路公司採用的方案二:哈希路由。

概念三:分組


分組解決「可用性,性能提升」這一問題,分組通常通過主從複製的方式實現。

網際網路公司資料庫實際軟體架構是「既分片,又分組」:


資料庫軟體架構,究竟設計些什麼呢,至少要考慮以下四點:


二、如何保證數據的可用性?

解決可用性問題的思路是:冗餘。

如何保證站點的可用性?冗餘站點。

如何保證服務的可用性?冗餘服務。

如何保證數據的可用性?冗餘數據。

數據的冗餘,會帶來一個副作用:一致性問題。

如何保證資料庫「讀」高可用?

冗餘讀庫。



冗餘讀庫帶來什麼副作用?

讀寫有延時,數據可能不一致。

上圖是很多網際網路公司mysql的架構,寫仍然是單點,不能保證寫高可用。

如何保證資料庫「寫」高可用?

冗餘寫庫。


採用雙主互備的方式,可以冗餘寫庫。

冗餘寫庫帶來什麼副作用?

雙寫同步,數據可能衝突(例如「自增id」同步衝突)。

如何解決同步衝突,有兩種常見解決方案:

(1)兩個寫庫使用不同的初始值,相同的步長來增加id:1寫庫的id為0,2,4,6...;2寫庫的id為1,3,5,7…;

(2)不使用數據的id,業務層自己生成唯一的id,保證數據不衝突;

阿里雲的RDS服務號稱寫高可用,是如何實現的呢?

他們採用的就是類似於「雙主同步」的方式(不再有從庫了)。


仍是雙主,但只有一個主提供讀寫服務,另一個主是「shadow-master」,只用來保證高可用,平時不提供服務。

master掛了,shadow-master頂上,虛IP漂移,對業務層透明,不需要人工介入。

這種方式的好處:

(1)讀寫沒有延時,無一致性問題;

(2)讀寫高可用;

不足是:

(1)不能通過加從庫的方式擴展讀性能;

(2)資源利用率為50%,一臺冗餘主沒有提供服務;

畫外音:所以,高可用RDS還挺貴的。

三、如何擴展讀性能?

提高讀性能的方式大致有三種,第一種是增加索引

這種方式不展開,要提到的一點是,不同的庫可以建立不同的索引。


如上圖:

(1)寫庫不建立索引;

(2)線上讀庫建立線上訪問索引,例如uid;

(3)線下讀庫建立線下訪問索引,例如time;

第二種擴充讀性能的方式是,增加從庫

這種方法大家用的比較多,存在兩個缺點:

(1)從庫越多,同步越慢;

(2)同步越慢,數據不一致窗口越大;

第三種增加系統讀性能的方式是,增加緩存

常見的緩存架構如下:


(1)上遊是業務應用;

(2)下遊是主庫,從庫(讀寫分離),緩存;

如果系統架構實施了服務化:

(1)上遊是業務應用;

(2)中間是服務;

(3)下遊是主庫,從庫,緩存;


業務層不直接面向db和cache,服務層屏蔽了底層db、cache的複雜性。

不管採用主從的方式擴展讀性能,還是緩存的方式擴展讀性能,數據都要複製多份(主+從,db+cache),一定會引發一致性問題。

四、如何保證一致性?

主從資料庫的一致性,通常有兩種解決方案:

(1)中間件


如果某一個key有寫操作,在不一致時間窗口內,中間件會將這個key的讀操作也路由到主庫上。

(2)強制讀主


「雙主高可用」的架構,主從一致性的問題能夠大大緩解。

第二類不一致,是db與緩存間的不一致。


這一類不一致,《緩存架構,一篇足夠?》裡有非常詳細的敘述,本文不再展開。

另外建議,所有允許cache miss的業務場景,緩存中的KEY都設置一個超時時間,這樣即使出現不一致,有機會得到自修復。

五、如何保障資料庫的擴展性?

秒級成倍資料庫擴容:

《億級數據DB秒級平滑擴容》

如果不是成倍擴容:

《100億數據平滑數據遷移,不影響服務》

也可能,是要對欄位進行擴展:

《1萬屬性,100億數據,架構設計?》

這些方案,都有相關文章展開寫過,本文不再贅述。

資料庫軟體架構,到底要設計些什麼?

希望對大家系統性理解資料庫軟體架構有幫助。

架構師之路-分享可落地技術

相關推薦

《回表查詢?索引覆蓋?| 1分鐘系列》新出爐

《優化工具,迅猛定位低效SQL | 1分鐘系列》

《資料庫允許空值(null)是悲劇的開始 | 1分鐘系列》

《兩類非常隱蔽的全表掃描 | 一分鐘系列》

相關焦點

  • 從架構深度解析阿里雲自研資料庫POLARDB
    ▲蔡松露 阿里云云資料庫資深技術專家、架構師  阿里云云資料庫架構師,主要負責阿里雲POLARDB、NoSQL技術以及阿里雲資料庫整體架構等工作。在搜尋引擎、NoSQL資料庫、分布式系統、作業系統內核等領域有深厚積累與豐富的經驗。  摘要:從架構、產品設計、未來工作等方面全方位闡述下一代雲原生資料庫POLARDB。  正文:  今天主要給大家介紹一下POLARDB。POLARDB是什麼?
  • 數據中臺到底包括什麼內容?一文詳解架構設計與組成
    建設數據中臺需要搭建建設數據中臺的基建工具,要滿足各種結構化、非結構化數據的採集、存儲與處理,要根據場景處理離線和實時數據的計算與存儲,要將一個個數據處理任務串聯起來以保障數據的運轉能賦能到業務端。 [1]大數據的4V指Volume(數據量大)、Variety(類型繁多)、Velocity(速度快,效率高)、Value(價值密度低)。
  • 年初敖丙天貓面試真題:如果設計一個資料庫?我人傻了
    我們知道,軟體工程是為了解決軟體危機的,它是採用工程的概念、原理、 技術和方法來開發與維護軟體,把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。 在軟體開發的過程中,資料庫設計是非常重要的,它需要根據需求分析設抽象出E-R圖,邏輯結構設計,資料庫選型,物理設計,實施及運維。
  • 10個最佳實踐技巧,實現有效的微服務架構!
    今天,小芯給大家帶來的是不能不提系列——正確實施微服務架構的10條技巧(也是10個最佳實踐)。微服務架構是什麼?這是筆者自己整理的定義:微服務架構是將軟體系統分解為自主模塊,這些自主模塊可獨立部署,並通過輕量級,與語言無關的方式進行通信,共同實現業務目標。軟體系統很複雜。
  • 架構設計的四大思維支柱
    筆者在 InfoQ 前文《關於架構演進發展的探討》和《架構演進的第四個趨勢:行業級標準化》中,提出了筆者對架構發展趨勢的一些淺見,也介紹了企業級業務架構方法論的來龍去脈,本文擬基於上述文章提煉一下企業軟體(大家常說的 B 端軟體)架構設計中的四大思維支柱供大家參考。
  • 進入雲原生、分布式的時代,什麼才是資料庫的正確打開方式
    Gartner 公布 2020 年度全球資料庫魔力象限評估結果,在今年Gartner將OPDBMS(事務性關係型資料庫)與DMSA(大數據管理與分析)合二為一成為新的Cloud DBMS Market(統一的雲資料庫系統市場)的挑戰下,阿里雲挺進全球資料庫第一陣營——領導者象限,是中國資料庫歷史上重大突破,也是中國基礎軟體行業首次進入
  • 0基礎入門軟體測試該學些什麼?怎麼學?
    有很多人員會不斷問自己,自己到底要不要學測試,或者要不要堅持做測試,測試的職業發展到底怎麼樣?如果你還在迷茫,在到處找各種大牛問類似的問題,我希望這篇文章,你看完能夠結束你的這個煩惱,給你更多的指明方向,當然也有更多的壓力。
  • 想要成為一名優秀的軟體測試工程師,需要學些什麼?
    隨著網際網路產品功能的日漸複雜,企業越來越重視中高級軟體測試工程師在研發團隊中的比重,高需求促使轉行的人也越來越多,可能很多人都覺得軟體測試的門檻很低,很容易進入到這個行業,是的,雖然軟體測試的門檻低,但如果想要在這一行有穩定長久的發展,還是需要掌握非常多的專業技能的。
  • Greenplum的資料庫使用無共享MPP體系結構
    近期涉及Greenplum的資料庫使用無共享MPP體系結構內容備受矚目,很多讀者對此也很有興趣,現在給大家羅列關於Greenplum的資料庫使用無共享MPP體系結構最新消息。據EMC稱,該交易將為EMC的信息基礎架構業務中的新數據計算產品部門奠定基礎。Greenplum的資料庫使用無共享MPP(大規模並行處理)體系結構,該體系結構設計用於商業智能和商品硬體上的分析處理,並且該公司一直在努力幫助企業將數據存儲在雲中。根據Forrester Research分析師James Kobielus的說法,該交易表明數據倉庫領域正處於新一輪整合的開始。
  • 一場替換傳統資料庫的行動正在全球範圍悄然進行
    在大數據時代,不斷增長的數據量、快速處理數據的需求以及數據類型、結構和來源的多樣性給資料庫敏捷、高效、可擴展性以及個性化管理帶來了全新挑戰。開源技術賦能了大數據生態的高質量發展。賽迪智庫信息化和軟體服務業所博士蒲松濤表示,經過了數十年的發展,開源軟體和開源工具已經應用到了大數據產業發展的各個環節,基於開源軟體,企業可以快速構建大數據應用平臺,提供豐富的大數據開發和應用工具。
  • 科藍軟體:公司在北美、中國大陸、中國香港及韓國有專業的資料庫...
    同花順金融研究中心10月14日訊,有投資者向科藍軟體提問, 你好!公司資料庫海外市場拓展方式?有無專職海外銷售及技術團隊?金融軟體是否有海外拓展規劃?公司回答表示,公司在北美、中國大陸、中國香港及韓國有專業的資料庫研發技術團隊及銷售團隊。
  • 融資首發 | 資本押注云原生資料庫,偶數完成B輪融資
    公司對自己的定位為AI和大數據軟體提供商,為全球各行業客戶提供AI和新一代資料庫產品。  公司產品是以新一代雲資料庫OushuDB為核心的智能數據平臺,支持高性能實時查詢和機器學習。這些架構一般可以支持到上百個節點,但隨著業務的複雜度和數據量提升,依然無法完全滿足用戶需求。這種MPP架構為第二代數據倉庫。  為了解決MPP架構的可擴展性缺陷,以Hadoop為代表的資料庫漸漸崛起。這些Hadoop資料庫將數據存儲在HDFS分布式文件系統上,擴展性強,可以延伸到上千個節點。
  • 雲網絡工程師必看丨6大最新OpenStack網絡架構
    下一步的目標主要還是 OVSDB 的 HA(關鍵 Feature)、L3 Gateway 和 NAT 的支持(關鍵 Feature)、Native 的 DHCP、MetaData 等等,還有一段路要走啊。OVN 剛推出很多人看好,原因最主要是強大的社區,其次剛開始給出的設計文檔也不錯,遺憾的是剛拿出來的版本距離長期設計目標就差的很遠(OVSDB 的 HA 問題,甚至目前還是單進程的!
  • 業務變化不息,架構演進不止 第四屆領域驅動設計峰會線上開啟
    不同於往屆的線下舉行形式,本屆峰會採取線上的形式,致力於打造一場架構設計和技術實踐的盛宴。作為軟體架構設計新的潮流,領域驅動設計(Domain Driven Design,簡稱DDD)強調業務和技術的統一性,為複雜領域軟體工程的設計決策提供實踐框架,幫助企業不斷拓展數位化業務。
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • 阿里雲POLARDB*:創新的雲託管資料庫
    要跨越這些障礙,可以採用雲計算解決方案,它儼然已經成為了大大小小的組織使用的主流技術。關係型資料庫作為雲託管服務應用廣泛,稱為資料庫即服務(DBaaS)解決方案。但是基於雲的RDBMS可能本身存在難題。因此,雲託管關係型資料庫解決方案必須實現數字轉型。
  • 微影技術架構實踐之路
    第一時期,速成《六脈神劍》第二時期,大禹治水流量分流第三時期,服務原子化邁向微服務 第一時期,速成《六脈神劍》        當目標是「活下來」時,一開始別管什麼高大上的技術了,做好基本,並且一定要立竿見影。
  • 基於大數據的輿情分析系統架構 - 架構篇
    我們計劃分兩篇介紹完整的輿情新架構,第一篇主要是提供架構設計,會先介紹時下主流的大數據計算架構,並分析一些優缺點,然後引入輿情大數據架構。第二篇會有完整的資料庫表設計和部分示例代碼。大家敬請期待。系統設計需求分析結合文章開頭對輿情系統的描述,海量大數據輿情分析系統流程圖大體如下:圖1 輿情系統業務流程原始網頁存儲庫,這個庫需要能支持海量數據,低成本,低延時寫入。網頁數據寫入後,要做實時結構化提取,提取出來的數據再進行降噪,分詞,圖片ocr處理等。
  • 尹博學:百度分布式資料庫實踐與挑戰
    【IT168 技術】2012資料庫技術大會於4月13日在北京永泰朋福.喜來登酒店隆重召開。本次大會已經是IT168、ITPUB、IXPUB、ChinaUnix聯合主辦的第三屆資料庫技術會議。大會將針對大數據架構設計、資料庫安全、分布式資料庫、商業智能、NoSQL、Hadoop等多個重點話題進行深入探討。
  • 對話阿里雲李飛飛:雲原生資料庫的時代來了
    而在資料庫這一領域,也正在發生由傳統資料庫向雲原生資料庫進化。這一點在阿里資料庫體系上體現得尤為明顯。從最早依賴商業軟體,擁有 20 多個節點的 Oracle RAC 資料庫集群,成為開發使用開源 MySQL 最好的企業之一,再到雲託管資料庫以及今天的雲原生分布式資料庫,阿里資料庫完成了從商用、開源到自研的發展路徑,並以極其迅猛之勢形成山河。