1. 程式人生 > >高併發系統資料庫架構設計

高併發系統資料庫架構設計

在WEB網站的規模從小到大不斷擴充套件的過程中,資料庫的訪問壓力也不斷的增加,資料庫的架構也需要動態擴充套件,在資料庫的擴充套件過程基本上包含如下幾步,每一個擴充套件都可以比上一步驟的部署方式的效能得到數量級的提升。 

1、WEB應用和資料庫部署在同一臺伺服器上

一般的小規模的網站採用這種方式,使用者量、資料量、併發訪問量都比較小,否則單臺伺服器無法承受,並且在遇到效能瓶頸的時候升級硬體所需要的費用非常高昂,在訪問量增加的時候,應用程式和資料庫都來搶佔有限的系統資源,很快就又會遇到效能問題。

2、WEB應用和資料庫部署在各自獨立的伺服器上

web應用和資料庫分開部署,WEB應用伺服器和資料庫伺服器各司其職,在系統訪問量增加的時候可以分別升級應用伺服器和資料庫伺服器,這種部署方式是一般小規模網站的典型部署方式。在將應用程式進行效能優化並且使用資料庫物件快取策略的情況下,可以承載較大的訪問量,比如2000使用者,200個併發,百萬級別的資料量。

3、資料庫伺服器採用叢集方式部署(比如Oracle的一個數據庫多個例項的情況)

資料庫叢集方式能承擔的負載是比較大的,資料庫物理介質為一個磁碟陣列,多個數據庫例項以虛擬IP方式向外部應用伺服器提供資料庫連線服務。這種部署方式基本上可以滿足絕大多數的常見WEB應用,但是還是不能滿足大使用者量、高負載、資料庫讀寫訪問非常頻繁的應用。

4、資料庫採用主從部署方式

在面向大眾使用者的部落格、論談、交友、CMS等系統中,有上百萬的使用者,有上千萬的資料量,存在眾多的資料庫查詢操作,也有較多的資料庫寫操作,並且在多數情況下都是讀操作遠大於寫操作的。在這個時候,假如能將資料庫的讀寫操作分離的話,對於系統來講是一個很大的提高啦。資料庫的主從部署方式就走到我們面前啦。

 主從複製: 

 幾乎所有的主流資料庫都支援複製,這是進行資料庫簡單擴充套件的基本手段。下面以Mysql為例來說明,它支援主從複製,配置也並不複雜,只需要開啟主伺服器上的二進位制日誌以及在主伺服器和從伺服器上分別進行簡單的配置和授權。Mysql的主從複製是一句主伺服器的二進位制日誌檔案進行的,主伺服器日誌中記錄的操作會在從伺服器上重放,從而實現複製,所以主伺服器必須開啟二進位制日誌,自動記錄所有對於主資料庫的更新操作,從伺服器再定時到主伺服器取得二進位制日誌檔案進行重放則完成了資料的複製。主從複製也用於自動備份。 

  讀寫分離: 

  為保證資料庫資料的一致性,我們要求所有對於資料庫的更新操作都是針對主資料庫的,但是讀操作是可以針對從資料庫來進行。大多數站點的資料庫讀操作比寫操作更加密集,而且查詢條件相對複雜,資料庫的大部分效能消耗在查詢操作上了。 
  主從複製資料是非同步完成的,這就導致主從資料庫中的資料有一定的延遲,在讀寫分離的設計中必須要考慮這一點。以部落格為例,使用者登入後發表了一篇文章,他需要馬上看到自己的文章,但是對於其它使用者來講可以允許延遲一段時間(1分鐘/5分鐘/30分鐘),不會造成什麼問題。這時對於當前使用者就需要讀主資料庫,對於其他訪問量更大的外部使用者就可以讀從資料庫。 

  資料庫反向代理: 

  在讀寫分離的方式使用主從部署方式的資料庫的時候,會遇到一個問題,一個主資料庫對應多臺從伺服器,對於寫操作是針對主資料庫的,資料庫個數是唯一的,但是對於從伺服器的讀操作就需要使用適當的演算法來分配請求啦,尤其對於多個從伺服器的配置不一樣的時候甚至需要讀操作按照權重來分配。 
  對於上述問題可以使用資料庫方向代理來實現。就像WEB方向代理伺服器一樣,MYsql Proxy同樣可以在SQL語句轉發到後端的Mysql伺服器之前對它進行修改。 

5、資料庫垂直分割

主從部署資料庫中,當寫操作佔了主資料庫的CPU消耗的50%以上的時候,我們再增加從伺服器的意義就不是很大了,因為所有的從伺服器的寫操作也將佔到CPU消耗的50%以上,一臺從伺服器提供出來查詢的資源非常有限。資料庫就需要重新架構了,我們需要採用資料庫垂直分割槽技術啦。
最簡單的垂直分割槽方式是將原來的資料庫中獨立的業務進行分拆(被分拆出來的部分與其它部分不需要進行Join連線查詢操作),比如WEB站點的BLOG和論壇,是相對獨立的,與其它的資料的關聯性不是很強,這時可以將原來的的資料庫拆分為一個BLog庫,一個論壇庫,以及剩餘的表所組成的庫。這三個庫再各自進行主從資料庫方式部署,這樣整個資料庫的壓力就分擔啦。
另外查詢擴充套件性也是採用資料庫分割槽最主要的原因之一。將一個大的資料庫分成多個小的資料庫可以提高查詢的效能,因為每個資料庫分割槽擁有自己的一小部分資料。假設您想掃描1億條記錄,對一個單一分割槽的資料庫來講,該掃描操作需要資料庫管理器獨立掃描一億條記錄,如果您將資料庫系統做成50個分割槽,並將這1億條記錄平均分配到這50個分割槽上,那麼每個資料庫分割槽的資料庫管理器將只掃描200萬記錄。

6、資料庫水平分割

在資料庫的垂直分割槽之後,假如我們的BLOG庫又再次無法承擔寫操作的時候,我們又該怎麼辦呢?資料庫垂直分割槽這種擴充套件方式又無能為力了,我們需要的是水平分割槽。
水平分割槽意味著我們可以將同一個資料庫表中的記錄通過特定的演算法進行分離,分別儲存在不同的資料庫表中,從而可以部署在不同的資料庫伺服器上。很多的大規模的站點基本上都是主從複製+垂直分割槽+水平分割槽這樣的架構。水平分割槽並不依賴什麼特定的技術,完全是邏輯村面的規劃,需要的是經驗和業務的細分。
如何分割槽呢?對於大型的WEB站點來說,必須分割槽,並且對於分割槽我們沒有選擇的餘地,對於那些頻繁訪問導致站點接近崩潰的熱點資料,我們必須分割槽。
在對資料分割槽的時候,我們必須要存在一個分割槽索引欄位,比如USER_ID,它必須和所有的記錄都存在關係,是分割槽資料庫中的核心表的主鍵,在其它表中作為外來鍵,並且在使用主鍵的時候,該主鍵不能是自增長的,必須是業務主鍵才可以。

 餘數分割槽: 

 我們可以將User_ID%10後的值為依據存入到不同的分割槽資料庫中,該演算法簡單高效,但是在分割槽資料庫個數有變動的時候,整個系統的資料需要重新分佈。 

 範圍分割槽: 

 我們可以將User_ID的範圍進行分割槽,比如1-100000範圍為一個分割槽資料庫,100001-200000範圍為一個分割槽資料庫,該演算法在分割槽資料庫個數有變動的時候,系統非常有利於擴充套件,但是容易導致不同分割槽之間的壓力不同,比如老使用者所在的分割槽資料庫的壓力很大,但是新使用者的分割槽資料庫的壓力偏小。    

  對映關係分割槽:  

  將對分割槽索引欄位的每個可能的結果建立一個分割槽對映關係,這個對映關係非常龐大,需要將它們寫入資料庫中。比如當應用程式需要知道User_id為10的使用者的BLOG內容在那個分割槽時,它必須查詢資料庫獲取答案,當然,我們可以使用快取來提高效能。 
  這種方式詳細儲存了每一個記錄的分割槽對應關係,所以各個分割槽有非常強的可伸縮性,可以靈活的控制,並且將資料庫從一個分割槽遷移到另一個分割槽也很簡單,也可以使各個分割槽通過靈活的動態調節來保持壓力的分佈平衡。

相關推薦

併發系統資料庫架構設計

在WEB網站的規模從小到大不斷擴充套件的過程中,資料庫的訪問壓力也不斷的增加,資料庫的架構也需要動態擴充套件,在資料庫的擴充套件過程基本上包含如下幾步,每一個擴充套件都可以比上一步驟的部署方式的效能得到數量級的提升。 1、WEB應用和資料庫部署在同一臺伺服

併發系統限流設計

概述 高併發系統時有三把利器用來保護系統:快取、降級和限流,快取的目的是提升系統訪問速度和增大系統能處理的容量,降級是當服務出問題或者影響到核心流程的效能則需要暫時遮蔽掉,待高峰或者問題解決後再開啟,而有些場景並不能用快取和降級來解決,比如

架構學習之路——可用併發系統設計原則 (轉)

作者 Geekwolf 本文作者為網易高階運維工程師 本文主要是學習開濤《億級流量網站架構核心技術》一書學習筆記及自己的感悟: 架構設計三大定律 墨菲定律 - 任何事沒有表面看起來那麼簡單 - 所有的事都會比預計的時間長 - 可能出錯的事情總會出錯 - 擔心

架構可用併發系統設計原則

網際網路架構下的【高可用高併發】系統設計原則,希望對你有用。   ------------------------------------------------------ ------------------------------------

架構學習之路——可用併發系統設計原則

本系列部落格主要是學習開濤《億級流量網站架構核心技術》一書學習筆記及自己的感悟: 架構設計三大定律 墨菲定律 – 任何事沒有表面看起來那麼簡單 – 所有的事都會比預計的時間長 – 可能出錯的事情總會出錯 – 擔心某種事情發生,那麼它就更有可能發生 康威定律 – 系統架構師公司組織架構的反映 – 按照

網際網路併發系統下的安全認證架構設計

使用的工具是Wireshark,這是一個網路封包分析軟體,用於擷取網路封包,並儘可能顯示出最為詳

程式設計師修神之路--併發系統設計負載均衡架構

菜菜哥,上次你給我講的分庫分表策略對我幫助很大 有幫助就好,上次請我的咖啡也很好喝~ 呵呵,不過隨著訪問量的不斷加大,網站我又加了nginx做負載均衡 好呀,看來要進階高階工程師啦~ 負載均衡也很簡單呀,一個nginx就搞定了,現在可以說我精通負載均衡了吧 其實負載均衡的內容還有很多 一個系統

併發系統設計與時間和空間的平衡

    高併發系統設計與時間和空間的平衡 高可用上文我們已經講過了,可當前網際網路時代,怎麼少的了高併發呢?高併發和高可用一樣, 已經變成各個系統的標配了,如果你的系統QPS沒有個大幾千上萬,都不好意思跟人打招呼,雖然可能每天的呼叫量不超過100。  

如何設計一個併發系統

  系統拆分,將一個系統拆分為多個子系統,用dubbo來搞。然後每個系統連一個數據庫,這樣本來就一個庫,現在多個數據庫,不也可以抗高併發麼。     快取,必須得用快取。大部分的高併發場景,都是讀多寫少,那你完全可以在資料庫和快取裡都寫一份,然後讀的時候大量走快取不就得了。畢竟人家redis

【本人禿頂程式設計師】面試題:如何設計一個併發系統

←←←←←←←←←←←← 我都禿頂了,還不點關注! 面試題 如何設計一個高併發系統? 面試官心理分析 說實話,如果面試官問你這個題目,那麼你必須要使出全身吃奶勁了。為啥?因為你沒看到現在很多公司招聘的 JD 裡都是說啥,有高併發就經驗者優先。 如果你確實有真才實學,在網際

支援事務機制的併發NewSql資料庫設計實戰

NewSQL 是對各種新的可擴充套件/高效能資料庫的簡稱,這類資料庫不僅具有NoSQL對海量資料的儲存管理能力,還保持了傳統資料庫支援ACID和SQL等特性。 NoSQL將改變資料的定義範圍。它不再是原始的資料型別,如整數、浮點。資料可能是整個檔案。NoSQL可能會嚇到DBA,因為他們擔心失

億級資料量併發資料庫水平切分的結構設計-02

1.基本概念:2.如使用者中心的單key型資料:    資料結構如:User(uid, login_name, passwd, sex, age, nickname, …);     需根據uid,login_name的查詢條件;    傳統分庫模型的設計以及問題:     

億級資料量併發資料庫水平切分的結構設計-01

很多網際網路業務,隨著資料量的逐步增加,資料庫逐漸成為系統的瓶頸。主從同步讀寫分離的架構方案只能提升資料庫的讀效能,對單庫資料量的膨脹,以及寫效能的瓶頸並不能夠很好解決。此時資料庫水平切分技術孕育而生,不同的業務場景下該如何進行水平切分,切分過程中需要注意的技術點,切分後遇到新的問題及解決方案是怎樣的,特此5

41、如何設計一個併發系統

1、面試題 如何設計一個高併發系統? 2、面試官心裡分析 說實話,如果面試官問你這個題目,那麼你必須要使出全身吃奶勁了。為啥?因為你沒看到現在很多公司招聘的jd裡都是說啥,有高併發就經驗者優先。 所以如果你確實有真才實學,在網際網路公司裡幹過高併發系統,那你確實拿offer基本如探囊

【乾貨合集】大流量與併發資料庫架構與實踐技巧

2016年9月20-21日20:00-21:30,淘寶開放平臺與阿里云云棲社群將聯合舉辦“大流量高併發網際網路應用實踐線上峰會”,為廣大開發者分享阿里的海量使用者支撐及運營經驗。 報名入口:http://yq.aliyun.com/webinar/join/49?spm=5176.8155509.4376

大資料量併發訪問資料庫結構的設計

如果不能設計一個合理的資料庫模型,不僅會增加客戶端和伺服器段程式的程式設計和維護的難度,而且將會影響系統實際執行的效能。所以,在一個系統開始實施之前,完備的資料庫模型的設計是必須的。    在一個系統分析、設計階段,因為資料量較小,負荷較低。我們往往只注意到功能的實現,而很

如何設計一個併發系統

面試題 如何設計一個高併發系統? 面試官心理分析 說實話,如果面試官問你這個題目,那麼你必須要使出全身吃奶勁了。為啥?因為你沒看到現在很多公司招聘的 JD 裡都是說啥,有高併發就經驗者優先。 如果你確實有真才實學,在網際網路公司裡幹過高併發系統,那你確實拿 offer 基本如探囊取物,沒啥問題。面試官也絕對不

軟件系統架構設計

交互 學習 流行 變化 發生 過程 架構設計方法 lynx 設計 軟件系統架構(Software Architecture)是關於軟件系統的結構、行為、屬性、組成要素及其之間交互關系的高級抽象。任何軟件開發項目,都會經歷需求獲取、系統分析、系統設計、編碼研發、系統

淺談基於Prism的軟件系統架構設計

then idata items main.c 說明 sop open send 全局   很早就想寫這麽一篇文章來對近幾年使用Prism框架來設計軟件來做一次深入的分析了,但直到最近才開始整理,說到軟件系統的設計這裏面有太多的學問,只有經過大量的探索才能夠設計出好的軟件產

世界杯皇冠體育足球競猜系統整體架構設計

ref 缺少 默認 == targe 架構設計 body left 結果 競猜業務邏輯很簡單世界杯皇冠體育足球源碼下載dsluntan.com 企娥3393756370世界杯皇冠體育足球源碼下載、普遍用於各種賽事中、籃球賽、足球賽、包括最近興起的遊戲電競賽事,對於社區產品來