新聞中心
數(shù)據(jù)庫(kù)架構(gòu):詳解設(shè)計(jì)組成及其功能

成都創(chuàng)新互聯(lián)"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營(yíng)銷需求!成都創(chuàng)新互聯(lián)具備承接各種類型的成都做網(wǎng)站、成都網(wǎng)站建設(shè)項(xiàng)目的能力。經(jīng)過(guò)十余年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評(píng)。
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫(kù)建設(shè)已經(jīng)成為了現(xiàn)代企業(yè)信息化建設(shè)的重要組成部分。而數(shù)據(jù)庫(kù)架構(gòu)是數(shù)據(jù)庫(kù)建設(shè)中不可或缺的一環(huán),不僅關(guān)系到數(shù)據(jù)庫(kù)的性能、安全、可靠性等方面,還涉及到企業(yè)的核心業(yè)務(wù)流程以及信息資源的管理。本文將從以下幾個(gè)方面詳解數(shù)據(jù)庫(kù)架構(gòu)的設(shè)計(jì)組成及其功能。
一、數(shù)據(jù)庫(kù)架構(gòu)的基本組成
1. 數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS)
數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 是數(shù)據(jù)庫(kù)架構(gòu)的基礎(chǔ)組成部分,是指通過(guò)軟件或硬件的方式,對(duì)大量數(shù)據(jù)進(jìn)行組織、管理、存儲(chǔ)和檢索的系統(tǒng)。
常見(jiàn)的 DBMS 有 Oracle、MySQL、SQLServer、PostgreSQL 等,它們都可以通過(guò) SQL 語(yǔ)言來(lái)操作數(shù)據(jù)庫(kù)。
2. 數(shù)據(jù)庫(kù)模型
數(shù)據(jù)庫(kù)模型是指對(duì)數(shù)據(jù)進(jìn)行建模,描述了數(shù)據(jù)庫(kù)中實(shí)體、屬性、關(guān)系及其對(duì)應(yīng)的操作。
常見(jiàn)的數(shù)據(jù)庫(kù)模型有層次模型、網(wǎng)狀模型、關(guān)系模型、對(duì)象模型等,其中關(guān)系模型是應(yīng)用最廣泛的數(shù)據(jù)庫(kù)模型。
3. 數(shù)據(jù)庫(kù)實(shí)例
數(shù)據(jù)庫(kù)實(shí)例是指一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行時(shí)的內(nèi)存實(shí)例,包括了操作系統(tǒng)進(jìn)程、共享內(nèi)存區(qū)、數(shù)據(jù)緩存區(qū)和臨時(shí)文件等。它以數(shù)據(jù)庫(kù)管理系統(tǒng)為基礎(chǔ),實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的增刪改查等常用操作。
4. 數(shù)據(jù)庫(kù)對(duì)象
數(shù)據(jù)庫(kù)對(duì)象是指在數(shù)據(jù)庫(kù)中創(chuàng)建的數(shù)據(jù)結(jié)構(gòu),如表、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等。數(shù)據(jù)庫(kù)對(duì)象的設(shè)計(jì)直接影響到數(shù)據(jù)庫(kù)的可擴(kuò)展性、可靠性和性能。
5. 數(shù)據(jù)庫(kù)連接
數(shù)據(jù)庫(kù)連接是指在應(yīng)用程序和數(shù)據(jù)庫(kù)之間建立的通信鏈路。在數(shù)據(jù)庫(kù)架構(gòu)中,數(shù)據(jù)庫(kù)連接管理是一項(xiàng)重要的工作,對(duì)于提高數(shù)據(jù)庫(kù)性能、穩(wěn)定性具有關(guān)鍵作用。
二、數(shù)據(jù)庫(kù)架構(gòu)的功能及實(shí)現(xiàn)
1. 數(shù)據(jù)庫(kù)存儲(chǔ)管理
數(shù)據(jù)庫(kù)存儲(chǔ)管理是指對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)進(jìn)行儲(chǔ)存和管理的過(guò)程,包括表空間管理、數(shù)據(jù)文件管理、數(shù)據(jù)塊管理、段管理等。通過(guò)對(duì)存儲(chǔ)管理的優(yōu)化,可以提高數(shù)據(jù)庫(kù)的性能和可靠性,減少數(shù)據(jù)丟失和損壞的風(fēng)險(xiǎn)。
2. 數(shù)據(jù)庫(kù)備份與恢復(fù)
數(shù)據(jù)庫(kù)備份與恢復(fù)是指在數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)和日志文件進(jìn)行備份,以便于在出現(xiàn)災(zāi)難性故障時(shí)進(jìn)行恢復(fù)。通過(guò)備份與恢復(fù)的方式,可以有效地減少數(shù)據(jù)丟失的風(fēng)險(xiǎn),保障企業(yè)的核心業(yè)務(wù)不受影響。
3. 數(shù)據(jù)庫(kù)安全性管理
數(shù)據(jù)庫(kù)安全性管理是指對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行安全保護(hù)的過(guò)程,包括用戶管理、權(quán)限管理、數(shù)據(jù)加密等。通過(guò)有效的安全性管理,可以保障企業(yè)的數(shù)據(jù)安全,避免數(shù)據(jù)泄露、丟失等問(wèn)題。
4. 數(shù)據(jù)庫(kù)性能優(yōu)化
數(shù)據(jù)庫(kù)性能優(yōu)化是指通過(guò)對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)、索引、查詢語(yǔ)句等方面的優(yōu)化,提高數(shù)據(jù)庫(kù)的響應(yīng)速度、并發(fā)處理能力等性能指標(biāo)。通過(guò)性能優(yōu)化,可以加速數(shù)據(jù)訪問(wèn)和數(shù)據(jù)處理,提高企業(yè)的工作效率。
5. 數(shù)據(jù)庫(kù)監(jiān)控與調(diào)優(yōu)
數(shù)據(jù)庫(kù)監(jiān)控與調(diào)優(yōu)是指對(duì)數(shù)據(jù)庫(kù)運(yùn)行時(shí)的性能和狀態(tài)進(jìn)行監(jiān)控和統(tǒng)計(jì),并進(jìn)行調(diào)優(yōu)操作,提高數(shù)據(jù)庫(kù)的性能和可靠性。通過(guò)監(jiān)控和調(diào)優(yōu),可以開(kāi)發(fā)出更佳的數(shù)據(jù)庫(kù)架構(gòu)方案,提高數(shù)據(jù)庫(kù)的整體質(zhì)量。
三、數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的注意事項(xiàng)
盡管數(shù)據(jù)庫(kù)架構(gòu)的設(shè)計(jì)組成十分重要,但在設(shè)計(jì)過(guò)程中也有一些需要特別注意的事項(xiàng),包括:
1. 合理規(guī)劃數(shù)據(jù)模型,避免數(shù)據(jù)冗余,確保數(shù)據(jù)的完整性。
2. 合理安排表空間和磁盤空間,避免空間碎片和存儲(chǔ)性能下降。
3. 合理統(tǒng)計(jì)數(shù)據(jù),并制定相應(yīng)的性能優(yōu)化方案。
4. 增強(qiáng)數(shù)據(jù)庫(kù)安全性,為企業(yè)數(shù)據(jù)提供更好的保障。
5. 良好的數(shù)據(jù)庫(kù)連接管理和數(shù)據(jù)庫(kù)監(jiān)控實(shí)踐,實(shí)時(shí)掌握數(shù)據(jù)庫(kù)運(yùn)行情況,及時(shí)發(fā)現(xiàn)和解決問(wèn)題。
數(shù)據(jù)庫(kù)架構(gòu)的設(shè)計(jì)組成及其功能是十分重要的,也是優(yōu)化數(shù)據(jù)庫(kù)性能和提高數(shù)據(jù)庫(kù)安全性的根本。通過(guò)合理的架構(gòu)設(shè)計(jì)和優(yōu)化方案,可以更大限度地提高數(shù)據(jù)庫(kù)的性能、安全性和可靠性,為企業(yè)信息化建設(shè)提供堅(jiān)實(shí)的保障。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220數(shù)據(jù)庫(kù)系統(tǒng)中的幾種架構(gòu)及處理方式
來(lái)具體說(shuō)說(shuō)數(shù)據(jù)庫(kù)集群吧
集群主要分成三大類 (高可用集群, 負(fù)載均衡集群,科學(xué)計(jì)算集群)
高可用集群( HighCluster)
負(fù)載均衡集群(Load Balance Cluster)
科學(xué)計(jì)算集群(High Performance Computing Cluster)
1、高可用集群(HighCluster)
常見(jiàn)的就是2個(gè)節(jié)點(diǎn)做成的HA集群,有很多通俗的不科學(xué)的名稱,比如”雙機(jī)熱備”, “雙機(jī)互備”, “雙機(jī)”。高可用集群解決的是保障用戶的應(yīng)用程序持續(xù)對(duì)外提侍正供服務(wù)的能力。 (請(qǐng)注意高可用集群既不是用來(lái)保護(hù)業(yè)務(wù)數(shù)據(jù)的,保護(hù)的是用戶的業(yè)務(wù)程序?qū)ν獠婚g斷提供服務(wù),把因軟件/硬件/人為造成的故障對(duì)業(yè)務(wù)的影響降低到最小程度)。
2、負(fù)載均衡集群(Load Balance Cluster)
負(fù)載均衡系統(tǒng):集群中所有的節(jié)點(diǎn)都處于活動(dòng)狀態(tài),它們分?jǐn)傁到y(tǒng)的工作負(fù)載。一般Web服務(wù)器集群、數(shù)據(jù)庫(kù)集群和應(yīng)用服務(wù)器集群都屬于這種類型。
負(fù)載均衡集群一般用于相應(yīng)網(wǎng)絡(luò)請(qǐng)求的網(wǎng)頁(yè)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器。這種集群可以在接到請(qǐng)求時(shí)老世悔,檢查接受請(qǐng)求較少,不繁忙的服務(wù)器,并把請(qǐng)求轉(zhuǎn)到這些服務(wù)器上。從檢查其他服務(wù)器狀態(tài)這一點(diǎn)上看,負(fù)載均衡和容錯(cuò)集群很接近,不同之處是數(shù)量上更多。
3、科學(xué)計(jì)算集群(High Performance Computing Cluster)
高性能計(jì)算(High Perfermance Computing)集群,簡(jiǎn)稱HPC集群。這類集群致力于提供單個(gè)計(jì)算機(jī)所不能提供的強(qiáng)大的計(jì)算能力。
高性能計(jì)算分類:
3.1、高吞吐計(jì)算(High-throughput Computing)
有一類高性能計(jì)算,可以把它分成若干可以并行的子任務(wù),而且各個(gè)子任務(wù)彼此間沒(méi)有什么關(guān)聯(lián)。象在家搜尋外星人( SETI@HOME _ Search forat Home )就是這一類型應(yīng)用。
這一項(xiàng)目是利用Internet上的閑置的計(jì)算資源來(lái)搜尋外星人。SETI項(xiàng)目的服務(wù)器將一組數(shù)據(jù)和數(shù)據(jù)模式發(fā)給Internet上參加SETI的計(jì)算節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)在給定的數(shù)據(jù)上用給定的模式進(jìn)行搜索,然后將搜索的結(jié)果發(fā)給服務(wù)器。服務(wù)器負(fù)責(zé)將從各個(gè)計(jì)算節(jié)點(diǎn)返回的數(shù)據(jù)匯集成完整的 數(shù)據(jù)。因?yàn)檫@種類型應(yīng)用的一個(gè)共同特征是在海量數(shù)據(jù)上搜索某些模式,所以把這類計(jì)算稱為高吞吐計(jì)算。
所謂的Internet計(jì)算都屬于這一類。按照 Flynn的分類,高吞吐計(jì)算屬于返頌SIMD(Single Instruction/Multiple Data)的范疇。
3.2、分布計(jì)算(Distributed Computing)
另一類計(jì)算剛好和高吞吐計(jì)算相反,它們雖然可以給分成若干并行的子任務(wù),但是子任務(wù)間聯(lián)系很緊密,需要大量的數(shù)據(jù)交換。按照Flynn的分類,分布式的高性能計(jì)算屬于MIMD(Multiple Instruction/Multiple Data)的范疇。
下面說(shuō)說(shuō)這幾種集群的應(yīng)用場(chǎng)景:
高可用集群這里不多作說(shuō)明。
想Dubbo是比較偏向于負(fù)載均衡集群,用過(guò)的猿友應(yīng)該知道(不知道的可以自行了解一下),Dubbo同一個(gè)服務(wù)是可以有多個(gè)提供者的,當(dāng)一個(gè)消費(fèi)者過(guò)來(lái),它要消費(fèi)那個(gè)提供者,這里是有負(fù)載均衡機(jī)制在里面的。
搜索引擎比較偏向于科學(xué)計(jì)算集群的分布計(jì)算。
而到這里,可能不少猿友都知道,集群的一些術(shù)語(yǔ):集群容錯(cuò)、負(fù)載均衡。
我們以Dubbo為例:
集群容錯(cuò)(bbo.io/UserGuide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99)
Dubbo提供了這些容錯(cuò)策略:
集群容錯(cuò)模式:
可以自行擴(kuò)展集群容錯(cuò)策略,參見(jiàn):集群擴(kuò)展
Failover Cluster
失敗自動(dòng)切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。(缺省)
通常用于讀操作,但重試會(huì)帶來(lái)更長(zhǎng)延遲。
可通過(guò)retries=”2″來(lái)設(shè)置重試次數(shù)(不含之一次)。
Failfast Cluster
快速失敗,只發(fā)起一次調(diào)用,失敗立即報(bào)錯(cuò)。
通常用于非冪等性的寫操作,比如新增記錄。
Failsafe Cluster
失敗安全,出現(xiàn)異常時(shí),直接忽略。
通常用于寫入審計(jì)日志等操作。
Failback Cluster
失敗自動(dòng)恢復(fù),后臺(tái)記錄失敗請(qǐng)求,定時(shí)重發(fā)。
通常用于消息通知操作。
Forking Cluster
并行調(diào)用多個(gè)服務(wù)器,只要一個(gè)成功即返回。
通常用于實(shí)時(shí)性要求較高的讀操作,但需要浪費(fèi)更多服務(wù)資源。
可通過(guò)forks=”2″來(lái)設(shè)置更大并行數(shù)。
Broadcast Cluster
廣播調(diào)用所有提供者,逐個(gè)調(diào)用,任意一臺(tái)報(bào)錯(cuò)則報(bào)錯(cuò)。(2.1.0開(kāi)始支持)
通常用于通知所有提供者更新緩存或日志等本地資源信息。
負(fù)載均衡(bbo.io/UserGuide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)
Dubbo提供了這些負(fù)載均衡策略:
Random LoadBalance
隨機(jī),按權(quán)重設(shè)置隨機(jī)概率。
在一個(gè)截面上碰撞的概率高,但調(diào)用量越大分布越均勻,而且按概率使用權(quán)重后也比較均勻,有利于動(dòng)態(tài)調(diào)整提供者權(quán)重。
RoundRobin LoadBalance
輪循,按公約后的權(quán)重設(shè)置輪循比率。
存在慢的提供者累積請(qǐng)求問(wèn)題,比如:第二臺(tái)機(jī)器很慢,但沒(méi)掛,當(dāng)請(qǐng)求調(diào)到第二臺(tái)時(shí)就卡在那,久而久之,所有請(qǐng)求都卡在調(diào)到第二臺(tái)上。
LeastActive LoadBalance
最少活躍調(diào)用數(shù),相同活躍數(shù)的隨機(jī),活躍數(shù)指調(diào)用前后計(jì)數(shù)差。
使慢的提供者收到更少請(qǐng)求,因?yàn)樵铰奶峁┱叩恼{(diào)用前后計(jì)數(shù)差會(huì)越大。
LoadBalance
一致性Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者。
當(dāng)某一臺(tái)提供者掛時(shí),原本發(fā)往該提供者的請(qǐng)求,基于虛擬節(jié)點(diǎn),平攤到其它提供者,不會(huì)引起劇烈變動(dòng)。
算法參見(jiàn):en..org/wiki/Consistent_hashing。
缺省只對(duì)之一個(gè)參數(shù)Hash,如果要修改,請(qǐng)配置
缺省用160份虛擬節(jié)點(diǎn),如果要修改,請(qǐng)配置
數(shù)據(jù)庫(kù)架構(gòu)選型與落地,看這篇就夠了
隨著時(shí)間和業(yè)務(wù)的發(fā)展,數(shù)據(jù)庫(kù)中的數(shù)據(jù)量增長(zhǎng)是不可控的,庫(kù)和表中的數(shù)據(jù)會(huì)越來(lái)越大,隨之帶來(lái)的是更高的
磁盤
、
IO
、
系統(tǒng)開(kāi)銷
,甚至
性能
上的瓶頸,而單臺(tái)服務(wù)器的
資源終究是有限
的。
因此在面對(duì)業(yè)務(wù)擴(kuò)張過(guò)程中,應(yīng)用程序?qū)?shù)據(jù)庫(kù)系統(tǒng)的
健壯性
,
安全性
,
擴(kuò)展性
提出了更高的要求。
以下,我從數(shù)據(jù)庫(kù)架構(gòu)、選型與落地來(lái)讓大家入門。
數(shù)據(jù)庫(kù)會(huì)面臨什么樣的挑戰(zhàn)呢?
業(yè)務(wù)剛開(kāi)始我們只用單機(jī)數(shù)據(jù)庫(kù)就夠了,但隨著業(yè)務(wù)增長(zhǎng),數(shù)據(jù)規(guī)模和用戶規(guī)模上升,這個(gè)時(shí)候數(shù)據(jù)庫(kù)會(huì)面臨IO瓶頸、存儲(chǔ)瓶頸、可用性、安全性問(wèn)題。
為了解決上述的各種問(wèn)題,數(shù)據(jù)庫(kù)衍生了出不同的架構(gòu)來(lái)解決不同的場(chǎng)景需求。
將數(shù)據(jù)庫(kù)的寫操作和讀操作分離,主庫(kù)接收寫請(qǐng)求,使用多個(gè)從庫(kù)副本負(fù)責(zé)讀請(qǐng)求,從庫(kù)和主庫(kù)同步更新數(shù)據(jù)保持?jǐn)?shù)據(jù)一致性,從庫(kù)可以水平擴(kuò)展,用于面對(duì)讀請(qǐng)求的增加。
這個(gè)模式也就是常說(shuō)的讀寫分離,針對(duì)的是小規(guī)模數(shù)據(jù),而且存在大量讀操作的場(chǎng)景。
因?yàn)橹鲝牡臄?shù)據(jù)是相同的,一旦主庫(kù)宕機(jī)的時(shí)候,從庫(kù)可以
切換為主庫(kù)提供寫入
,所以這個(gè)架構(gòu)也可以提高數(shù)據(jù)庫(kù)系統(tǒng)的
安全性
和
可用性
;
優(yōu)點(diǎn):
缺點(diǎn):
在數(shù)據(jù)庫(kù)遇到
IO瓶頸
過(guò)程中,如果IO集中在某一塊的業(yè)務(wù)中,這個(gè)時(shí)候可以考慮的就是垂直分庫(kù),將熱點(diǎn)業(yè)務(wù)拆分出去,避免由
熱點(diǎn)業(yè)務(wù)
的
密集IO請(qǐng)求
影響了其他正常業(yè)務(wù),所以垂直分庫(kù)也叫
業(yè)務(wù)分庫(kù)
。
優(yōu)點(diǎn):
缺點(diǎn):
在數(shù)據(jù)庫(kù)遇到存儲(chǔ)瓶頸的時(shí)候,由于數(shù)據(jù)量過(guò)大造成索引性能下降。
這個(gè)時(shí)候可以考慮將數(shù)據(jù)做水平拆分,針對(duì)數(shù)據(jù)量巨大的單張表,按照某種規(guī)則,切分到多張表里面去。
但是這些表還是在同一個(gè)庫(kù)中,所以庫(kù)級(jí)別的數(shù)據(jù)庫(kù)操作還是有IO瓶頸(單個(gè)服務(wù)器的IO有上限)。
所以水平分表主要還是針對(duì)
數(shù)據(jù)量較大
,整體業(yè)務(wù)
請(qǐng)求量較低
的場(chǎng)景。
優(yōu)點(diǎn):
缺點(diǎn):
四、分庫(kù)分表
在數(shù)據(jù)庫(kù)遇到存儲(chǔ)瓶頸和IO瓶頸的時(shí)候,數(shù)據(jù)量過(guò)大造成索引性能下降,加上同一時(shí)間需要處理大規(guī)模的業(yè)務(wù)請(qǐng)求,這個(gè)時(shí)候單庫(kù)的IO上限會(huì)限制處理效率。
所以需要將單張表的數(shù)據(jù)切分到多個(gè)服務(wù)器上去,每個(gè)服務(wù)器具有相應(yīng)的庫(kù)與表,只是表中數(shù)據(jù)不同。
分庫(kù)分表能夠有效地緩解單機(jī)和單庫(kù)的
性能瓶頸和壓力
,突破IO、連接數(shù)、硬件資源等的瓶頸。
優(yōu)點(diǎn):
缺點(diǎn):
注:分庫(kù)還是分表核心關(guān)鍵是有沒(méi)有IO瓶頸
。
分片方式都有什么呢?
RANGE(范圍分片)
將業(yè)務(wù)表中的某個(gè)
關(guān)鍵字段排序
后,按照順序從0到10000一個(gè)表,10001到20230一個(gè)表。最常見(jiàn)的就是
按照時(shí)間切分
(月表、年表)。
比如將6個(gè)月前,甚至一年前的數(shù)據(jù)切出去放到另外的一張表,因?yàn)殡S著時(shí)間流逝,這些表的數(shù)據(jù)被查詢的概率變小,銀行的交易記錄多數(shù)是采用這種方式。
優(yōu)點(diǎn):
缺點(diǎn):
HASH(哈希分片)
將訂單作為主表,然后將其相關(guān)的業(yè)務(wù)表作為附表,取用戶id然后
hash取模
,分配到不同的數(shù)據(jù)表或者數(shù)據(jù)庫(kù)上。
優(yōu)點(diǎn):
缺點(diǎn):
講到這里,我們已經(jīng)知道數(shù)據(jù)庫(kù)有哪些架構(gòu),解決的是哪些問(wèn)題,因此,
我們?cè)谌粘TO(shè)計(jì)中需要根據(jù)數(shù)據(jù)的特點(diǎn),數(shù)據(jù)的傾向性,數(shù)據(jù)的安全性等來(lái)選擇不同的架構(gòu)
。
那么,我們應(yīng)該如何選擇數(shù)據(jù)庫(kù)架構(gòu)呢?
雖然把上面的架構(gòu)全部組合在一起可以形成一個(gè)強(qiáng)大的高可用,高負(fù)載的數(shù)據(jù)庫(kù)系統(tǒng),但是架構(gòu)選擇合適才是最重要的。
混合架構(gòu)雖然能夠解決所有的場(chǎng)景的問(wèn)題,但是也會(huì)面臨更多的挑戰(zhàn),你以為的完美架構(gòu),背后其實(shí)有著更多的坑。
1、對(duì)事務(wù)支持
分庫(kù)分表后(無(wú)論是垂直還是水平拆分),就成了分布式事務(wù)了,如果依賴數(shù)據(jù)庫(kù)本身的分布式事務(wù)管理功能去執(zhí)行事務(wù),將付出高昂的性能代價(jià)(XA事務(wù));如果由應(yīng)用程序去協(xié)助控制,形成程序邏輯上的事務(wù),又會(huì)造成編程方面的負(fù)擔(dān)(TCC、SAGA)。
2、多庫(kù)結(jié)果并
(group by,order by)
由于數(shù)據(jù)分布于不同的數(shù)據(jù)庫(kù)中,無(wú)法直接對(duì)其做分頁(yè)、分組、排序等操作,一般應(yīng)對(duì)這種多庫(kù)結(jié)果并的查詢業(yè)務(wù)都需要采用數(shù)據(jù)清洗、同步等其他手段處理(TIDB、KUDU等)。
3、數(shù)據(jù)延遲
主從架構(gòu)下的多副本機(jī)制和水平分庫(kù)后的聚合庫(kù)都會(huì)存在主數(shù)據(jù)和副本數(shù)據(jù)之間的延遲問(wèn)題。
4、跨庫(kù)join
分庫(kù)分表后表之間的關(guān)聯(lián)操作將受到限制,我們無(wú)法join位于不同分庫(kù)的表(垂直),也無(wú)法join分表粒度不同的表(水平), 結(jié)果原本一次查詢就能夠完成的業(yè)務(wù),可能需要多次查詢才能完成。
5、分片擴(kuò)容
水平分片之后,一旦需要做擴(kuò)容時(shí)。需要將對(duì)應(yīng)的數(shù)據(jù)做一次遷移,成本代價(jià)都極高的。
6、ID生成
分庫(kù)分表后由于數(shù)據(jù)庫(kù)獨(dú)立,原有的基于數(shù)據(jù)庫(kù)自增ID將無(wú)法再使用,這個(gè)時(shí)候需要采用其他外部的ID生成方案。
一、應(yīng)用層依賴類(JDBC)
這類分庫(kù)分表中間件的特點(diǎn)就是和應(yīng)用強(qiáng)耦合,需要應(yīng)用顯示依賴相應(yīng)的jar包(以Java為例),比如知名的TDDL、當(dāng)當(dāng)開(kāi)源的
sharding-jdbc
、蘑菇街的TSharding等。
此類中間件的基本思路就是重新實(shí)現(xiàn)JDBC的API,通過(guò)重新實(shí)現(xiàn)
DataSource
、
PrepareStatement
等操作數(shù)據(jù)庫(kù)的接口,讓應(yīng)用層在
基本
不改變業(yè)務(wù)代碼的情況下透明地實(shí)現(xiàn)分庫(kù)分表的能力。
中間件給上層應(yīng)用提供熟悉的JDBC API,內(nèi)部通過(guò)
sql解析
、
sql重寫
、
sql路由
等一系列的準(zhǔn)備工作獲取真正可執(zhí)行的sql,然后底層再按照傳統(tǒng)的方法(比如數(shù)據(jù)庫(kù)連接池)獲取物理連接來(lái)執(zhí)行sql,最后把數(shù)據(jù)
結(jié)果合并
處理成ResultSet返回給應(yīng)用層。
優(yōu)點(diǎn)
缺點(diǎn)
二、中間層代理類(Proxy)
這類分庫(kù)分表中間件的核心原理是在應(yīng)用和數(shù)據(jù)庫(kù)的連接之間搭起一個(gè)
代理層
,上層應(yīng)用以
標(biāo)準(zhǔn)的MySQL協(xié)議
來(lái)連接代理層,然后代理層負(fù)責(zé)
轉(zhuǎn)發(fā)請(qǐng)求
到底層的MySQL物理實(shí)例,這種方式對(duì)應(yīng)用只有一個(gè)要求,就是只要用MySQL協(xié)議來(lái)通信即可。
所以用MySQL Navicat這種純的客戶端都可以直接連接你的分布式數(shù)據(jù)庫(kù),自然也天然
支持所有的編程語(yǔ)言
。
在技術(shù)實(shí)現(xiàn)上除了和應(yīng)用層依賴類中間件基本相似外,代理類的分庫(kù)分表產(chǎn)品必須實(shí)現(xiàn)標(biāo)準(zhǔn)的MySQL協(xié)議,某種意義上講數(shù)據(jù)庫(kù)代理層轉(zhuǎn)發(fā)的就是MySQL協(xié)議請(qǐng)求,就像Nginx轉(zhuǎn)發(fā)的是Http協(xié)議請(qǐng)求。
比較有代表性的產(chǎn)品有開(kāi)創(chuàng)性質(zhì)的Amoeba、阿里開(kāi)源的Cobar、社區(qū)發(fā)展比較好的
Mycat
(基于Cobar開(kāi)發(fā))等。
優(yōu)點(diǎn)
缺點(diǎn)
JDBC方案
:無(wú)中心化架構(gòu),兼容市面上大多數(shù)關(guān)系型數(shù)據(jù)庫(kù),適用于開(kāi)發(fā)高性能的輕量級(jí) OLTP 應(yīng)用(面向前臺(tái))。
Proxy方案
:提供靜態(tài)入口以及異構(gòu)語(yǔ)言的支持,適用于 OLAP 應(yīng)用(面向后臺(tái))以及對(duì)分片數(shù)據(jù)庫(kù)進(jìn)行管理和運(yùn)維的場(chǎng)景。
混合方案
:在大型復(fù)雜系統(tǒng)中存在面向C端用戶的前臺(tái)應(yīng)用,也有面向企業(yè)分析的后臺(tái)應(yīng)用,這個(gè)時(shí)候就可以采用混合模式。
JDBC 采用無(wú)中心化架構(gòu),適用于 Java 開(kāi)發(fā)的高性能的輕量級(jí) OLTP 應(yīng)用;Proxy 提供靜態(tài)入口以及異構(gòu)語(yǔ)言的支持,適用于 OLAP 應(yīng)用以及對(duì)分片數(shù)據(jù)庫(kù)進(jìn)行管理和運(yùn)維的場(chǎng)景。
ShardingSphere是一套開(kāi)源的分布式數(shù)據(jù)庫(kù)中間件解決方案組成的生態(tài)圈,它由
Sharding-JDBC
、
Sharding-Proxy
和
Sharding-Sidecar
(計(jì)劃中)這3款相互獨(dú)立的產(chǎn)品組成,他們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和數(shù)據(jù)庫(kù)治理功能,可適用于如Java同構(gòu)、異構(gòu)語(yǔ)言、容器、云原生等各種多樣化的應(yīng)用場(chǎng)景。
ShardingSphere提供的核心功能:
Sharding-Proxy
定位為透明化的
數(shù)據(jù)庫(kù)代理端
,提供封裝了
數(shù)據(jù)庫(kù)二進(jìn)制協(xié)議的服務(wù)端版本
,用于完成對(duì)
異構(gòu)語(yǔ)言的支持
。
目前已提供MySQL版本,它可以使用
任何兼容MySQL協(xié)議的訪問(wèn)客戶端
(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數(shù)據(jù),對(duì)DBA更加友好。
向
應(yīng)用程序完全透明
,可直接當(dāng)做MySQL使用。
適用于任何兼容MySQL協(xié)議的客戶端。
Sharding-JDBC
定位為
輕量級(jí)Java框架
,在Java的JDBC層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫(kù),以jar包形式提供服務(wù),無(wú)需額外部署和依賴,可理解為
增強(qiáng)版的JDBC驅(qū)動(dòng),完全兼容JDBC和各種ORM框架
。
以電商SaaS系統(tǒng)為例,前臺(tái)應(yīng)用采用Sharding-JDBC,根據(jù)業(yè)務(wù)場(chǎng)景的差異主要分為三種方案。
分庫(kù)(用戶)
問(wèn)題解析:頭部企業(yè)日活高并發(fā)高,單獨(dú)分庫(kù)避免干擾其他企業(yè)用戶,用戶數(shù)據(jù)的增長(zhǎng)緩慢可以不分表。
拆分維度:企業(yè)ID分庫(kù)
拆分策略:頭部企業(yè)單獨(dú)庫(kù)、非頭部企業(yè)一個(gè)庫(kù)
分庫(kù)分表(訂單)
問(wèn)題解析:訂單數(shù)據(jù)增長(zhǎng)速度較快,在分庫(kù)之余需要分表。
拆分維度:企業(yè)ID分庫(kù)、用戶ID分表
拆分策略:頭部企業(yè)單獨(dú)庫(kù)、非頭部企業(yè)一個(gè)庫(kù),分庫(kù)之后用戶ID取模拆分表
單庫(kù)分表(附件)
問(wèn)題解析:附件數(shù)據(jù)特點(diǎn)是并發(fā)量不大,只需要解決數(shù)據(jù)增長(zhǎng)問(wèn)題,所以單庫(kù)IO足以支撐的情況下分表即可。
拆分維度:用戶ID分表
拆分策略:用戶ID取模分表
問(wèn)題一:分布式事務(wù)
分布式事務(wù)過(guò)于復(fù)雜也是分布式系統(tǒng)最難處理的問(wèn)題,由于篇幅有限,后續(xù)會(huì)開(kāi)篇專講這一塊內(nèi)容。
問(wèn)題二:分布式ID
問(wèn)題三:跨片查詢
舉個(gè)例子,以用戶id分片之后,需要根據(jù)企業(yè)id查詢企業(yè)所有用戶信息。
sharding針對(duì)跨片查詢也是能夠支持的,本質(zhì)上sharding的跨片查詢是采用同時(shí)查詢多個(gè)分片的數(shù)據(jù),然后聚合結(jié)果返回,這個(gè)方式對(duì)資源耗費(fèi)比較大,特別是對(duì)數(shù)據(jù)庫(kù)連接資源的消耗。
假設(shè)分4個(gè)數(shù)據(jù)庫(kù),8個(gè)表,則sharding會(huì)同時(shí)發(fā)出32個(gè)SQL去查詢。一下子消耗掉了32個(gè)連接;
特別是針對(duì)單庫(kù)分表的情況要注意,假設(shè)單庫(kù)分64個(gè)表,則要消耗64個(gè)連接。如果我們部署了2個(gè)節(jié)點(diǎn),這個(gè)時(shí)候兩個(gè)節(jié)點(diǎn)同時(shí)查詢的話,就會(huì)遇到數(shù)據(jù)庫(kù)連接數(shù)上限問(wèn)題(mysql默認(rèn)100連接數(shù))
問(wèn)題四:分片擴(kuò)容
隨著數(shù)據(jù)增長(zhǎng),每個(gè)片區(qū)的數(shù)據(jù)也會(huì)達(dá)到瓶頸,這個(gè)時(shí)候需要將原有的分片數(shù)量進(jìn)行增加。由于增加了片區(qū),原先的hash規(guī)則也跟著變化,造成了需要將舊數(shù)據(jù)做遷移。
假設(shè)原先1個(gè)億的數(shù)據(jù),hash分64個(gè)表,現(xiàn)在增長(zhǎng)到50億的數(shù)據(jù),需要擴(kuò)容到128個(gè)表,一旦擴(kuò)容就需要將這50億的數(shù)據(jù)做一次遷移,遷移成本是無(wú)法想象的。
問(wèn)題五:一致性哈希
首先,求出每個(gè)
服務(wù)器的hash值
,將其配置到一個(gè)
0~2^n 的圓環(huán)上
(n通常取32)
其次,用同樣的方法求出待
存儲(chǔ)對(duì)象的主鍵 hash值
,也將其配置到這個(gè)圓環(huán)上。
然后,從數(shù)據(jù)映射到的位置開(kāi)始順時(shí)針查找,將數(shù)據(jù)分布到找到的之一個(gè)服務(wù)器節(jié)點(diǎn)上。
一致性hash的優(yōu)點(diǎn)在于加入和刪除節(jié)點(diǎn)時(shí)只會(huì)影響到在哈希環(huán)中相鄰的節(jié)點(diǎn),而對(duì)其他節(jié)點(diǎn)沒(méi)有影響。
所以使用一致性哈希在集群擴(kuò)容過(guò)程中可以減少數(shù)據(jù)的遷移。
好了,這次分享到這里,我們?nèi)粘5膶?shí)踐可能只會(huì)用到其中一種方案,但它不是數(shù)據(jù)庫(kù)架構(gòu)的全貌,打開(kāi)技術(shù)視野,才能更好地把存儲(chǔ)工具利用起來(lái)。
老規(guī)矩,一鍵三連,日入兩千,點(diǎn)贊在看,年薪百萬(wàn)!
本文作者:Jensen
7年Java老兵,小米主題設(shè)計(jì)師,手機(jī)輸入法設(shè)計(jì)師,ProcessOn特邀講師。
曾涉獵航空、電信、IoT、垂直電商產(chǎn)品研發(fā),現(xiàn)就職于某知名電商企業(yè)。
技術(shù)公眾號(hào)
【架構(gòu)師修行錄】
號(hào)主,專注于分享日常架構(gòu)、技術(shù)、職場(chǎng)干貨,Java Goals:架構(gòu)師。
交個(gè)朋友,一起成長(zhǎng)!
如何描述數(shù)據(jù)庫(kù)的架構(gòu)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于如何描述數(shù)據(jù)庫(kù)的架構(gòu),數(shù)據(jù)庫(kù)架構(gòu):詳解設(shè)計(jì)組成及其功能。,數(shù)據(jù)庫(kù)系統(tǒng)中的幾種架構(gòu)及處理方式,數(shù)據(jù)庫(kù)架構(gòu)選型與落地,看這篇就夠了的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過(guò)多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開(kāi)發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)頁(yè)題目:數(shù)據(jù)庫(kù)架構(gòu):詳解設(shè)計(jì)組成及其功能。(如何描述數(shù)據(jù)庫(kù)的架構(gòu))
本文鏈接:http://www.5511xx.com/article/dpsshsc.html


咨詢
建站咨詢
