資源描述:
《探討面向可擴(kuò)展系統(tǒng)關(guān)系型數(shù)據(jù)庫架構(gòu).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、探討面向可擴(kuò)展系統(tǒng)的關(guān)系型數(shù)據(jù)庫架構(gòu)幾年各種新技術(shù)層出不窮,從Hadoop.Spark.Nosql到人工智能、區(qū)塊鏈等等,各自都火了一段時(shí)間,而關(guān)系型數(shù)據(jù)庫則相對比較平靜,但我一直覺得關(guān)系型數(shù)據(jù)庫依然是很多系統(tǒng)架構(gòu)設(shè)計(jì)中非常重要甚至不可獲取的組成部分,而且經(jīng)過了這么多年的發(fā)展,關(guān)系型數(shù)據(jù)庫技術(shù)已經(jīng)可以做到非常的穩(wěn)定、可氧一門技術(shù)的發(fā)展一般都會(huì)經(jīng)歷萌芽、發(fā)展、應(yīng)用到淘汰的過程,這個(gè)過程中技術(shù)的應(yīng)用范圍或者叫普及程度會(huì)逐步提升。在互聯(lián)網(wǎng)時(shí)代,_門技術(shù)可以很快火起來,但是真正落地到系統(tǒng)架構(gòu)中是需要逐步發(fā)展的。我覺得數(shù)據(jù)庫已經(jīng)是發(fā)展到了大規(guī)模應(yīng)用的階段,而且還有
2、著旺盛的生命力,用〃大成若缺,其用不弊〃來形容,再合適不過。本文重點(diǎn)關(guān)注的是關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)如何才能滿足可擴(kuò)展架構(gòu)的要求,總結(jié)了一些個(gè)人認(rèn)為比較有用的架構(gòu)方案,供大家參考。隔離關(guān)系型數(shù)據(jù)庫非常容易上手,尤其在系統(tǒng)發(fā)展的初期,一般一個(gè)數(shù)據(jù)庫、幾張關(guān)系表可以支撐很長的時(shí)間,但是隨著業(yè)務(wù)的不斷發(fā)展,關(guān)系越來越復(fù)雜,數(shù)據(jù)量越來越大,就需要在合適的時(shí)候進(jìn)行隔離。隔離的方案有許多種,這里簡單介紹幾種常見的:?讀操作和寫操作的隔離(AKF擴(kuò)展立方體中的X軸擴(kuò)展):讀寫分離1=1可以非常有效的提升系統(tǒng)查詢的并發(fā)量,尤其是多副本的情況下,當(dāng)然這種方式犧牲的是一定程度的一
3、致性;?事務(wù)型數(shù)據(jù)庫與分析型數(shù)據(jù)庫隔離:很多系統(tǒng)中數(shù)據(jù)庫使用的初期只有事務(wù)性需求,但是隨著業(yè)務(wù)發(fā)展越來越大,數(shù)據(jù)越來越多,分析型需求不可避免的會(huì)出現(xiàn),須知這兩種需求無論是在數(shù)據(jù)庫選型還是表結(jié)構(gòu)的設(shè)計(jì)都是存在一定沖突的,所以最好進(jìn)行拆分,通過etl等方式將數(shù)據(jù)從事物型數(shù)據(jù)庫同步到分析型數(shù)據(jù)庫中;?熱數(shù)據(jù)與冷數(shù)據(jù)的隔離:?比較典型的例子是按照時(shí)間對數(shù)據(jù)進(jìn)行隔離(分區(qū)、分片等),最近發(fā)生的數(shù)據(jù)一般是最常用的,而幾年之前的數(shù)據(jù)使用的概率一般很低,這種數(shù)據(jù)的隔離有利于提升系統(tǒng)各方面的性能。當(dāng)然按照時(shí)間進(jìn)行隔離只是一個(gè)例子,根據(jù)業(yè)務(wù)的不同可以按照不同的方式對熱點(diǎn)數(shù)據(jù)
4、進(jìn)行隔離;?按照功能或者業(yè)務(wù)類型進(jìn)行隔離(AKF擴(kuò)展立方體中Y軸擴(kuò)展):比如,建立專門的訂單數(shù)據(jù)庫、商品數(shù)據(jù)庫、用戶數(shù)據(jù)庫等;?按照客戶進(jìn)行隔離(AKF擴(kuò)展立方體中Z軸擴(kuò)展):這是云服務(wù)商經(jīng)常采用的方案,將重要付費(fèi)客戶數(shù)據(jù)單獨(dú)存儲(chǔ),其他客戶數(shù)據(jù)一起存儲(chǔ),這樣也可以避免大客戶的查詢等影響了其他客戶;?不同應(yīng)用的隔離:在分布式數(shù)據(jù)庫中,不同產(chǎn)品或者應(yīng)用如果使用同一個(gè)數(shù)據(jù)庫實(shí)例,相互之間可能會(huì)相互干擾,而且往往很難協(xié)調(diào)不同應(yīng)用的優(yōu)先級(jí)等,沒有一個(gè)資深的DBA也很難管理這種相關(guān)干擾,這個(gè)時(shí)候可以考慮按照應(yīng)用部署多個(gè)數(shù)據(jù)庫實(shí)例;?業(yè)務(wù)處理邏輯與數(shù)據(jù)庫的分離:這里指
5、的是濫用存儲(chǔ)過程等場景,存儲(chǔ)過程有其好處,但也因?yàn)槿缯{(diào)試?yán)щy、可讀性差、業(yè)務(wù)耦合等不足為系統(tǒng)的可擴(kuò)展性帶來影響,而且存儲(chǔ)過程相關(guān)代碼的維護(hù)和可測試性也往往存在一定不足,本著單一職責(zé)原則,建議還是將業(yè)務(wù)處理邏輯與數(shù)據(jù)庫進(jìn)行分離;性能監(jiān)控?cái)?shù)據(jù)庫一般都是系統(tǒng)中的核心組件,其監(jiān)控肯定是必不可少的,除了常規(guī)的運(yùn)維監(jiān)控項(xiàng)之外,在系統(tǒng)擴(kuò)展時(shí)還需要持續(xù)關(guān)注數(shù)據(jù)庫的性能參數(shù),常見的性能監(jiān)控項(xiàng)如下:?性能基線:為系統(tǒng)不同應(yīng)用場景建立查詢性能基線,并持續(xù)跟進(jìn),防止在系統(tǒng)擴(kuò)展過程中逐漸變慢等問題,這種溫水煮青蛙式的變壞,往往會(huì)在積累到_定時(shí)間后爆發(fā);事務(wù)拆分關(guān)系型數(shù)據(jù)庫的一大特
6、點(diǎn)是事務(wù)一致性,但是在分布式數(shù)據(jù)庫應(yīng)用等一些復(fù)雜場景下使用事務(wù)尤其是分階段提交的事務(wù)需要在系統(tǒng)吞吐量上做非常大的犧牲。弓I用《架構(gòu)真經(jīng)》中提供的一個(gè)例子,系統(tǒng)中2%的業(yè)務(wù)使用2階段提交后,系統(tǒng)整體能處理的事務(wù)量下降了75%以上!現(xiàn)在通過消息中心的發(fā)布訂閱等方式都可以有效的達(dá)到最終一致性,有時(shí)候犧牲一定的實(shí)效性換來的可能是系統(tǒng)整體擴(kuò)展性上質(zhì)的飛躍。緩存數(shù)據(jù)庫本身有非常有效的緩存機(jī)制,但其本身的緩存方式也存在著一定的局限性,例如,需要經(jīng)過復(fù)雜計(jì)算才能得出的數(shù)據(jù),數(shù)據(jù)庫本身的緩存一般是不能對其進(jìn)行緩存的,這時(shí)候需要應(yīng)用自身進(jìn)行緩存或者在系統(tǒng)架構(gòu)中為數(shù)據(jù)庫增加專
7、門的緩存層。采用向外擴(kuò)展,避免一直向上擴(kuò)展向上擴(kuò)展指的是通過購買性能更強(qiáng)的硬件來實(shí)現(xiàn)對系統(tǒng)擴(kuò)展的支持,向外擴(kuò)展指的是通過復(fù)制、拆分等方式分散系統(tǒng)的負(fù)載。在系統(tǒng)發(fā)展的初期通過向上擴(kuò)展可以快速解決性能瓶頸,而且不需要非常強(qiáng)的技術(shù)實(shí)力支撐,但這種方式不適合一直應(yīng)用(當(dāng)然,如果系統(tǒng)發(fā)展速度比硬件更新速度還慢是沒問題的),一方面高性能硬件的性價(jià)比會(huì)下降,另一方面公司業(yè)務(wù)的發(fā)展速度往往很快會(huì)達(dá)到單機(jī)的性能瓶頸,所以向外擴(kuò)展是不可避免的。慎重評(píng)估開源數(shù)據(jù)庫與商業(yè)數(shù)據(jù)庫軟件開源數(shù)據(jù)庫與商業(yè)數(shù)據(jù)庫各有優(yōu)勢,相信大家都是了解的,這里我想要說明的一點(diǎn)是,商業(yè)數(shù)據(jù)庫付出的授權(quán)費(fèi)
8、用是看得見的,而開源數(shù)據(jù)庫的學(xué)習(xí)成本,以及在運(yùn)維等方面的投入成本,還有業(yè)務(wù)適配的