1. 程式人生 > >資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載均衡器

資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載均衡器

一、負載均衡技術

負載均衡叢集是由一組相互獨立的計算機系統構成,通過常規網路或專用網路進行連線,由路由器銜接在一起,各節點相互協作、共同負載、均衡壓力,對客戶端來說,整個群集可以視為一臺具有超高效能的獨立伺服器。

1、實現原理

實現資料庫的負載均衡技術,首先要有一個可以控制連線資料庫的控制端。在這裡,它截斷了資料庫和程式的直接連線,由所有的程式來訪問這個中間層,然 後再由中間層來訪問資料庫。這樣,我們就可以具體控制訪問某個資料庫了,然後還可以根據資料庫的當前負載採取有效的均衡策略,來調整每次連線到哪個資料 庫。

2、實現多據庫資料同步

對於負載均衡,最重要的就是所有伺服器的資料都是實時同步的。這是一個叢集所必需的,因為,如果數不據實時、不同步,那麼使用者從一臺伺服器讀出的數 據,就有別於從另一臺伺服器讀出的資料,這是不能允許的。所以必須實現資料庫的資料同步。這樣,在查詢的時候就可以有多個資源,實現均衡。比較常用的方法 是Moebius for SQL Server叢集,Moebius for SQL Server叢集採用將核心程式駐留在每個機器的資料庫中的辦法,這個核心程式稱為Moebius for SQL Server 中介軟體,主要作用是監測資料庫內資料的變化並將變化的資料同步到其他資料庫中。資料同步完成後客戶端才會得到響應,同步過程是併發完成的,所以同步到多個 資料庫和同步到一個數據庫的時間基本相等;另外同步的過程是在事務的環境下完成的,保證了多份資料在任何時刻資料的一致性。正因為Moebius 中介軟體宿主在資料庫中的創新,讓中介軟體不但能知道資料的變化,而且知道引起資料變化的SQL語句,根據SQL語句的型別智慧的採取不同的資料同步的策略以 保證資料同步成本的最小化。

資料庫的讀寫分離

1,實現原理:讀寫分離簡單的說是把對資料庫讀和寫的操作分開對應不同的資料庫伺服器,這樣能有效地減輕資料庫壓力,也能減輕io壓力。主資料庫提 供寫操作,從資料庫提供讀操作,其實在很多系統中,主要是讀的操作。當主資料庫進行寫操作時,資料要同步到從的資料庫,這樣才能有效保證資料庫完整性。

2,實現方法:在MS Sql server中可以使用釋出定義的方式實現資料庫複製,實現讀寫分離,複製是將一組資料從一個數據源拷貝到多個數據源的技術,是將一份資料釋出到多個儲存 站點上的有效方式。使用複製技術,使用者可以將一份資料釋出到多臺伺服器上。複製技術可以確保分佈在不同地點的資料自動同步更新,從而保證資料的一致性。 SQL SERVER複製技術型別有三種,分別是:快照複製、事務複製、合併複製。SQL SERVER 主要採用出版物、訂閱的方式來處理複製。源資料所在的伺服器是出版伺服器,負責發表資料。出版伺服器把要發表的資料的所有改變情況的拷貝複製到分發服務 器,分發伺服器包含有一個分發資料庫,可接收資料的所有改變,並儲存這些改變,再把這些改變分發給訂閱伺服器。

3,優缺點

(1)資料的實時性差:資料不是實時同步到自讀伺服器上的,當資料寫入主伺服器後,要在下次同步後才能查詢到。

(2)資料量大時同步效率差:單表資料量過大時插入和更新因索引,磁碟IO等問題,效能會變的很差。

(3)同時連線多個(至少兩個)資料庫:至少要連線到兩個資料資料庫,實際的讀寫操作是在程式程式碼中完成的,容易引起混亂

(4)讀具有高效能高可靠性和可伸縮:只讀伺服器,因為沒有寫操作,會大大減輕磁碟IO等效能問題,大大提高效率;只讀伺服器可以採用負載均衡,主資料庫釋出到多個只讀伺服器上實現讀操作的可伸縮性。

資料條數很少,資料內容也不大,則直接同步資料

資料條數很少,但是裡面包含大資料型別,比如文字,二進位制資料等,則先對資料進行壓縮然後再同步,從而減少網路頻寬的佔用和傳輸所用的時間。

資料條數很多,此時中介軟體會拿到造成資料變化的SQL語句, 然後對SQL語句進行解析,分析其執行計劃和執行成本,並選擇是同步資料還是同步SQL語句到其他的資料庫中。此種情況應用在對錶結構進行調整或者批量更改資料的時候非常有用。

3、優缺點

(1) 擴充套件性強:當系統要更高資料庫處理速度時,只要簡單地增加資料庫伺服器就 可以得到擴充套件。

(2) 可維護性:當某節點發生故障時,系統會自動檢測故障並轉移故障節點的應用,保證資料庫的持續工作。

(3) 安全性:因為資料會同步的多臺伺服器上,可以實現資料集的冗餘,通過多份資料來保證安全性。另外它成功地將資料庫放到了內網之中,更好地保護了資料庫的安全性。

(4) 易用性:對應用來說完全透明,叢集暴露出來的就是一個IP

(1) 不能夠按照Web伺服器的處理能力分配負載。

(2) 負載均衡器(控制端)故障,會導致整個資料庫系統癱瘓。

三、資料庫拆分(分散式)

通過某種特定的條件,將存放在同一個資料庫中的資料分散存放到多個數據庫上,實現分佈儲存,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單臺伺服器了,而是N臺伺服器,這樣就可以降低單臺機器的負載壓力。

垂直(縱向)拆分:是指按功能模組拆分,比如分為訂單庫、商品庫、使用者庫...這種方式多個數據庫之間的表結構不同。

水平(橫向)拆分:將同一個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。

1,實現原理:使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分為,訂單系統,商品管理系統,使用者管理系統業務系統比較明的,垂 直拆分能很好的起到分散資料庫壓力的作用。業務模組不明晰,耦合(表關聯)度比較高的系統不適合使用這種拆分方式。但是垂直拆分方式並不能徹底解決所有壓 力問題,例如 有一個5000w的訂單表,操作起來訂單庫的壓力仍然很大,如我們需要在這個表中增加(insert)一條新的資料,insert完畢後,資料庫會針對這 張表重新建立索引,5000w行資料建立索引的系統開銷還是不容忽視的,反過來,假如我們將這個表分成100個table呢,從table_001一直到 table_100,5000w行資料平均下來,每個子表裡邊就只有50萬行資料,這時候我們向一張只有50w行資料的table中insert資料後建 立索引的時間就會呈數量級的下降,極大了提高了DB的執行時效率,提高了DB的併發量,這種拆分就是橫向拆分

2,實現方法:垂直拆分,拆分方式實現起來比較簡單,根據表名訪問不同的資料庫就可以了。橫向拆分的規則很多,這裡總結前人的幾點,

(1)順序拆分:如可以按訂單的日前按年份才分,2003年的放在db1中,2004年的db2,以此類推。當然也可以按主鍵標準拆分。

優點:可部分遷移

缺點:資料分佈不均,可能2003年的訂單有100W,2008年的有500W。

(2)hash取模分: 對user_id進行hash(或者如果user_id是數值型的話直接使用user_id的值也可),然後用一個特定的數字,比如應用中需要將一個數據 庫切分成4個數據庫的話,我們就用4這個數字對user_id的hash值進行取模運算,也就是user_id%4,這樣的話每次運算就有四種可能:結果 為1的時候對應DB1;結果為2的時候對應DB2;結果為3的時候對應DB3;結果為0的時候對應DB4,這樣一來就非常均勻的將資料分配到4個DB中。

優點:資料分佈均勻

缺點:資料遷移的時候麻煩;不能按照機器效能分攤資料 。

(3)在認證庫中儲存資料庫配置

就是建立一個DB,這個DB單獨儲存user_id到DB的對映關係,每次訪問資料庫的時候都要先查詢一次這個資料庫,以得到具體的DB資訊,然後才能進行我們需要的查詢操作。

優點:靈活性強,一對一關係

缺點:每次查詢之前都要多一次查詢,會造成一定的效能損失。

上文詳細為大家介紹了資料庫大型應用解決方案,希望大家都能很熟練的掌握,相信在大家以後的工作中遇到類似的問題,一定能夠輕鬆解決。

相關推薦

資料庫水平切分實現原理——分庫主從叢集負載衡器

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫

資料庫水平切分實現原理分庫、讀寫分離、負載均衡、主從複製

水平切分資料庫的目的 其主要目的是為突破單節點資料庫伺服器的 I/O 能力限制,解決資料庫擴充套件性問題  通過一系列的切分規則將資料水平分佈到不同的DB或table中,在通過相應的DB路由或者table路由規則找到需要查詢的具體的DB或者table,以進行Query操作

資料庫水平切分實現原理解析分庫主從叢集負載衡器

一、負載均衡技術 負載均衡叢集是由一組相互獨立的計算機系統構成,通過常規網路或專用網路進行連線,由路由器銜接在一起,各節點相互協作、共同負載、均衡壓力,對客戶端來說,整個群集可以視為一臺具有超高效能的獨立伺服器。 1、實現原理 實現資料庫的負載均衡技術,首先要有一個可以控制連線資料庫的控制端。在這裡,它

資料庫水平切分實現原理解析分庫主從叢集負載衡器 (轉載)...

第1章  引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。水平切分資料庫,可

資料庫水平切分實現原理解析——分庫主從叢集負載衡器(轉)

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫:可

資料庫水平切分實現原理解析分庫主從叢集負載衡器

原文地址:資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載均衡器 作者:laoliulaoliu 文章來源:http://zhengdl126.iteye.com/blog/419850 此人的部落格有大量關於網站架構的文章可供參考。 分表:

數據庫水平切分(拆庫拆)的實現原理解析(轉)

數字 一個數據庫 java ins 結果 都對 不同 com 嚴重 第1章 引言 隨著互聯網應用的廣泛普及,海量數據的存儲和訪問成為了系統設計的瓶頸問題。對於一個大型的互聯網應用,每天幾十億的PV無疑對數據庫造成了相當 高的負載。對於系統的穩定性和擴展性造成了極大的問題。

數據庫水平切分實現原理解析——分庫主從集群負載衡器(轉)

支付 讀取 dba 我們 課題研究 穩定性 存在 use 根據 第1章 引言 隨著互聯網應用的廣泛普及,海量數據的存儲和訪問成為了系統設計的瓶頸問題。對於一個大型的互聯網應用,每天幾十億的PV無疑對數據庫造成了相當高的負載。對於系統的穩定性和擴展性造成了極大的問題。通過數

python學習之列表物件實現原理解析

l=[1,2,3] id(l[0]) 1652911120 id(l[1]) 1652911152 id(l[2]) 1652911184

Mysql MVCC實現原理解析

  MVCC(Multi-Version Concurrency Control | 多版本併發控制)  InnoDB通過為每一行記錄新增兩個額外的隱藏的值來實現MVCC,這兩個值一個記錄這行資料何時被建立,另外一個記錄這行資料何時過期(或者被刪除)。但是InnoDB

fetch的實現原理解析

fetch的實現原理解析 說明 fetch是基於原生的XMLHttpRequest物件來實現資料請求的。 同時,fetch也是基於Promise實現鏈式呼叫的。 那麼,實現fetch的本質:就是實現ajax的封裝以及Promise的實現。 ajax的封裝 在原生的api中,XMLHt

資料庫索引的實現原理(面試問題:請說出資料庫索引實現原理

轉載:https://blog.csdn.net/hxpjava1/article/details/55803923 資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引的實現通常使用B樹及其變種B+樹。 在資料之外

資料庫索引的實現原理

說白了,索引問題就是一個查詢問題。。。 資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引的實現通常使用B樹及其變種B+樹。 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這

java引數傳遞底層實現原理解析

1.如下程式碼最終輸出為:??? 這裡就要說到java 傳遞引數的兩種方式:值傳遞與引用傳遞. 1.值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。 2.引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地

從使用者中心開始聊“單KEY”類業務資料庫水平切分架構實踐

本文將以“使用者中心”為例,介紹“單KEY”類業務,隨著資料量的逐步增大,資料庫效能顯著降低,資料庫水平切分相關的架構實踐: 如何來實施水平切分。 水平切分後常見的問題 。 典型問題的優化思路及實踐。 一、使用者中心 使用者中心是一個非常常見的

kafka exactly once 的實現原理解析

最近看了不少關於kafka的資料,對於exactly once的理解,推薦看看2篇別人的部落格,寫的還是比較有條理的。  http://3gods.com/bigdata/Kafka-Message-Delivery-Semantics.html 先看這篇,有個大概的瞭解

架構師之路---資料庫水平切分實踐

本人一應屆生,在去實習的地鐵上,看了一篇沈劍老師寫資料庫水平切分架構思路,看完人清氣爽。現在寫一篇部落格記錄下。 引言: 涉及到資料庫水平切分問題,主要有以下兩種問題: 第一:專案開始之前進行資料庫架構設計,考核,規劃以後資料庫量大的情況有很好的擴充套

從B樹談到資料庫的索引實現原理

4、如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含欄位作為主鍵,這個欄位長度為6個位元組,型別為長整形

MLlib中決策樹演算法的實現原理解析

決策樹作為一種分類迴歸演算法,在處理非線性、特徵值缺少的資料方面有很多的優勢,能夠處理不相干的特徵,並且對分類的結果通過樹的方式有比較清晰的結構解釋,但是容易過擬合,針對這個問題,可以採取對樹進行剪枝的方式,還有一些融合整合的解決方案,比如隨機森林RandomForest

JVM 中synchronized的底層實現原理解析

鎖是應用開發中的一種常見同步機制, 而synchronized則是java中的一種內建的同步方式, 所以也有人稱其為Intrinsic Locking, 它提供了互斥的語義和可見性保證, 當一個執行緒已經獲取當前物件鎖時, 其他試圖獲取同一個鎖的執行緒只能等待或