了解最新公司動(dòng)態(tài)及行業(yè)資訊
隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲(chǔ)和訪問成為系統(tǒng)設(shè)計(jì)的難題。 對(duì)于一個(gè)小型的互聯(lián)網(wǎng)應(yīng)用來說,一百萬甚至上億的PV每晚無疑會(huì)給數(shù)據(jù)庫造成特別高的負(fù)載,給系統(tǒng)的穩(wěn)定性和擴(kuò)展性帶來很大的問題。
1.負(fù)載均衡技術(shù)
負(fù)載均衡是由一組通過常規(guī)或?qū)S镁W(wǎng)絡(luò)連接的獨(dú)立計(jì)算機(jī)系統(tǒng)組成,路由器連接在一起,節(jié)點(diǎn)配合其他常見的負(fù)載均衡和客戶端壓力,整個(gè)集群可以看作是一個(gè)超高性能專用服務(wù)器平臺(tái)。
1.實(shí)現(xiàn)原理
要實(shí)現(xiàn)數(shù)據(jù)庫的負(fù)載均衡技術(shù),首先要有一個(gè)控制終端,可以控制與數(shù)據(jù)庫的連接。 在這里,它攔截了數(shù)據(jù)庫和程序的直接連接,所有程序訪問的中間層,然后是訪問數(shù)據(jù)庫的中間層。 在這些方法中,我們可以具體控制對(duì)數(shù)據(jù)庫的訪問,然后可以采用有效的平衡策略,根據(jù)數(shù)據(jù)庫當(dāng)前的負(fù)載情況來調(diào)整數(shù)據(jù)庫連接。
2.多基地?cái)?shù)據(jù)同步的實(shí)現(xiàn)
對(duì)于負(fù)載均衡來說,最重要的是所有服務(wù)器的數(shù)據(jù)是實(shí)時(shí)同步的。 這對(duì)于一個(gè)集群來說是必須的,因?yàn)槿绻皇菍?shí)時(shí)的或者異步的,那么用戶從服務(wù)器讀取不同的數(shù)據(jù),從另外一個(gè)服務(wù)器讀取數(shù)據(jù),這是不允許的。 因此,必須進(jìn)行數(shù)據(jù)庫的數(shù)據(jù)同步。 這樣就可以在查詢中有多個(gè)資源,達(dá)到平衡。 常用的方法是 SQL Mobis SQL集群,集群服務(wù)器會(huì)用來駐留核心程序在每臺(tái)機(jī)器的數(shù)據(jù)庫中,核心程序調(diào)用 to SQL中間件,主要作用是在檢測(cè)中改變數(shù)據(jù)庫數(shù)據(jù)將更改后的數(shù)據(jù)同步到其他數(shù)據(jù)庫,數(shù)據(jù)同步完成后客戶端會(huì)得到響應(yīng)。 同步是并行完成的,所以多個(gè)數(shù)據(jù)庫和數(shù)據(jù)庫之間的同步時(shí)間基本相同; 據(jù)悉,同步過程是在商業(yè)環(huán)境中完成的,保證隨時(shí)多份數(shù)據(jù),數(shù)據(jù)一致性,因?yàn)閯?chuàng)新了數(shù)據(jù)庫主機(jī)上的中間件,除了讓中間件知道數(shù)據(jù)的變化,以及數(shù)據(jù)變化引起的SQL語句,根據(jù)智能SQL語句采用不同類型的數(shù)據(jù)同步策略,保證數(shù)據(jù)同步的代價(jià)最小。
數(shù)據(jù)棒數(shù)量少,數(shù)據(jù)量小,直接同步數(shù)據(jù)。
數(shù)據(jù)條數(shù)量少,但包含大數(shù)據(jù)類型,如文本、二進(jìn)制補(bǔ)碼數(shù)據(jù)等,之后先對(duì)數(shù)據(jù)進(jìn)行壓縮再同步服務(wù)器運(yùn)維技術(shù),以減少網(wǎng)絡(luò)帶寬和傳輸時(shí)間。
有很多數(shù)據(jù)列。 此時(shí),中間件會(huì)獲取到修改數(shù)據(jù)的SQL語句,然后對(duì)SQL語句進(jìn)行分析,分析其執(zhí)行計(jì)劃和執(zhí)行成本,選擇是同步數(shù)據(jù)還是將SQL語句同步到其他數(shù)據(jù)庫。
3.優(yōu)點(diǎn)和缺點(diǎn)
(1) 可擴(kuò)展性強(qiáng):當(dāng)系統(tǒng)需要更高的數(shù)據(jù)庫處理速度時(shí),只需減少數(shù)據(jù)庫服務(wù)器即可進(jìn)行擴(kuò)展。
(2) 可維護(hù)性:當(dāng)一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),系統(tǒng)會(huì)手動(dòng)檢查故障并轉(zhuǎn)移故障節(jié)點(diǎn)的應(yīng)用程序,以保證數(shù)據(jù)庫的持續(xù)運(yùn)行。
(3)安全性:由于數(shù)據(jù)在多臺(tái)服務(wù)器上同步,可以實(shí)現(xiàn)數(shù)據(jù)冗余,保證數(shù)據(jù)安全,數(shù)據(jù)庫可以順??利加載到內(nèi)網(wǎng),更好的保護(hù)數(shù)據(jù)庫的安全。
(4)易用性:對(duì)應(yīng)用程序完全透明服務(wù)器運(yùn)維技術(shù),集群暴露在IP上。
(1) 不能根據(jù)Web服務(wù)器的處理能力來分配負(fù)載。
(2) 負(fù)載均衡器(控制端)出現(xiàn)故障會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫系統(tǒng)癱瘓。
二.數(shù)據(jù)庫與讀寫分離
1、實(shí)現(xiàn)原理:讀寫分離,簡單的說,一個(gè)單獨(dú)的數(shù)據(jù)庫讀寫不同的數(shù)據(jù)庫服務(wù)器操作,可以有效的降低數(shù)據(jù)庫的壓力,降低IO壓力。 數(shù)據(jù)庫主要提供寫操作,從數(shù)據(jù)庫讀操作,實(shí)際上在很多系統(tǒng)中,主要是讀操作。 主庫寫入時(shí),數(shù)據(jù)同步到從庫,可以有效保證數(shù)據(jù)庫的完整性。
(eBay的讀寫比例為260:1,eBay的讀寫分離)
(谷歌數(shù)據(jù)庫分布)
方法: 2、MSSQL服務(wù)器可以使用數(shù)據(jù)庫復(fù)制和發(fā)布的定義來實(shí)現(xiàn)讀寫分離。 復(fù)制是從一個(gè)數(shù)據(jù)源的多個(gè)數(shù)據(jù)源復(fù)制一組數(shù)據(jù)并發(fā)布到網(wǎng)站上一個(gè)有效數(shù)據(jù)類型的多個(gè)存儲(chǔ),利用復(fù)制技術(shù),用戶可以確保發(fā)布在多個(gè)服務(wù)器上的數(shù)據(jù)副本被手動(dòng)同步和更新,并分布在不同的位置,從而保證數(shù)據(jù)的一致性。 SQL復(fù)制技術(shù)分為快照復(fù)制、事務(wù)復(fù)制和合并三種。 SQL 主要用于由發(fā)布和訂閱服務(wù)處理的復(fù)制。 源數(shù)據(jù)所在的版本號(hào)是發(fā)布者,負(fù)責(zé)發(fā)布數(shù)據(jù)。 包含一個(gè)分發(fā)數(shù)據(jù)庫,??該數(shù)據(jù)庫接收對(duì)數(shù)據(jù)的所有修改并在將它們分發(fā)給訂閱者之前保存它們。
3.優(yōu)點(diǎn)和缺點(diǎn)
(1)數(shù)據(jù)實(shí)時(shí)性差:數(shù)據(jù)與自讀服務(wù)器不同步。 當(dāng)數(shù)據(jù)寫入后,數(shù)據(jù)會(huì)被同步,下次再查詢。
(2)數(shù)據(jù)量大時(shí),同步效率不高:當(dāng)單表數(shù)據(jù)由于索引、磁盤IO等問題難以插入和更新時(shí),性能會(huì)特別差。
(3)同時(shí)連接多個(gè)(至少兩個(gè))數(shù)據(jù)庫:連接至少兩個(gè)數(shù)據(jù)數(shù)據(jù)庫,實(shí)際的讀寫操作在程序代碼中完成,容易造成混淆。
(4) 高性能、高可靠性和可擴(kuò)展性 讀:只讀服務(wù)器,由于沒有寫操作,會(huì)大大降低c盤的IO性能,大大提高工作效率; 只讀服務(wù)器可以使用負(fù)載均衡,主數(shù)據(jù)庫釋放讀操作到多個(gè)只讀服務(wù)器的可伸縮性。
三、數(shù)據(jù)庫/數(shù)據(jù)表拆分(分布式)
在一定條件下,多個(gè)數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)會(huì)被存儲(chǔ)在多個(gè)數(shù)據(jù)庫中,同一個(gè)數(shù)據(jù)庫會(huì)分布式存儲(chǔ),訪問特定的數(shù)據(jù)庫會(huì)通過路由規(guī)則進(jìn)行路由,這樣每次訪問的臉都不是一個(gè)單臺(tái)服務(wù)器,服務(wù)器數(shù)量增加可以增加單機(jī)的負(fù)載壓力。 提示:2005版本以后,表分區(qū)可以支持友好性。
(垂直)解析:指功能模塊(如訂單存儲(chǔ)、商品存儲(chǔ)、用戶存儲(chǔ)等)的拆分,使得多個(gè)數(shù)據(jù)庫之間的表結(jié)構(gòu)不同。
橫向(??ntal)拆分:將同一張表中的數(shù)據(jù)定義到不同的數(shù)據(jù)庫中,這個(gè)數(shù)據(jù)庫中的表結(jié)構(gòu)是完全一樣的。
(橫向拆裝)
(水平拆裝)
1、實(shí)現(xiàn)原則:垂直碼率的使用主要看應(yīng)用類型的分段方式是否合適。 例如系統(tǒng)可以分為單體系統(tǒng)、商品管理系統(tǒng)、客戶管理系統(tǒng)。 大清的業(yè)務(wù)系統(tǒng),縱碼率可以很好的起到將數(shù)據(jù)庫角色的壓力分散到業(yè)務(wù)模塊的作用。 不清楚,耦合度(表相關(guān)性)高的系統(tǒng)不適合用這種切分方式。但是垂直切分的方式并不能解決壓力等所有問題。 5000w的訂單,訂單群的運(yùn)營壓力一直很高。 如果我們需要在這張表中減少(插入),那就是新的數(shù)據(jù)插入。 建庫完成后,就可以為表建立索引了。 反之,5000w指標(biāo)體系成本數(shù)據(jù)的提升也不容忽視。 如果我們把表分成100張表,數(shù)據(jù)從到平均到每個(gè)子表,每個(gè)子表上只有行數(shù)據(jù),所以我們只有50W索引中的一行數(shù)據(jù)插入數(shù)據(jù)表格會(huì)顯示增長率,增強(qiáng)數(shù)據(jù)庫的運(yùn)行效率,增強(qiáng)數(shù)據(jù)庫的并發(fā),水平劃分幀率
2.實(shí)現(xiàn)方式:垂直拆分,拆分方式實(shí)現(xiàn)起來比較簡單,根據(jù)表名訪問不同的數(shù)據(jù)庫即可。 這是上面的一些要點(diǎn)。
(1)幀率:比如購買前三天,一年分為、等。 其實(shí)也可以按照關(guān)鍵標(biāo)準(zhǔn)來打分。
優(yōu)點(diǎn):部分遷移
缺點(diǎn):數(shù)據(jù)分布不均,2003年的訂單可能是100W,2008年是500W。
(2):Hash散列(或者類型如果value也可以直接),然后使用具體的數(shù)字,比如數(shù)據(jù)庫應(yīng)用需要切分成4個(gè)數(shù)據(jù)庫,我們使用4號(hào)的hash值運(yùn)算,這是%4,每次操作后會(huì)有四種可能的結(jié)果:1,當(dāng)2對(duì)應(yīng)DB1的結(jié)果時(shí); 結(jié)果為3時(shí),對(duì)應(yīng)DB2; 當(dāng)結(jié)果為0時(shí),對(duì)應(yīng)DB3; db4,非常均勻地將數(shù)據(jù)分布到4 dB。
優(yōu)點(diǎn):均勻分布的數(shù)據(jù)
缺點(diǎn):數(shù)據(jù)遷移麻煩; 數(shù)據(jù)不能根據(jù)機(jī)器性能攤銷。
(3) 保存認(rèn)證庫中的數(shù)據(jù)庫配置
它正在建立一個(gè)數(shù)據(jù)庫。 數(shù)據(jù)庫維護(hù)來自DB的映射關(guān)系。 我們每次訪問數(shù)據(jù)庫,首先需要查詢數(shù)據(jù)庫,獲取具體的數(shù)據(jù)庫信息,然后才能進(jìn)行我們需要的查詢操作。
優(yōu)點(diǎn):彈性強(qiáng),一對(duì)一關(guān)系
缺點(diǎn):每次查詢前多查詢一次,會(huì)造成一定的性能損失。
24小時(shí)免費(fèi)咨詢
請(qǐng)輸入您的聯(lián)系電話,座機(jī)請(qǐng)加區(qū)號(hào)