成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文淺談“讀寫(xiě)分離”技術(shù)

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
讀寫(xiě)分離,從字面理解就是將對(duì)數(shù)據(jù)庫(kù)的讀操作與寫(xiě)操作分離的一種優(yōu)化手段。其最早起源于互聯(lián)網(wǎng)快速發(fā)展時(shí)期,面對(duì)海量用戶(hù)訪(fǎng)問(wèn)問(wèn)題,通過(guò)這一技術(shù)來(lái)解決數(shù)據(jù)庫(kù)性能瓶頸問(wèn)題。目前已經(jīng)成為非常常見(jiàn)的一種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)優(yōu)化技術(shù)。

讀寫(xiě)分離,作為一種常用的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)優(yōu)化手段,得到廣泛的應(yīng)用。本文嘗試從讀寫(xiě)分離的技術(shù)實(shí)現(xiàn)、適用場(chǎng)景及典型產(chǎn)品等角度,闡述這一技術(shù)的整體現(xiàn)狀。

1. 讀寫(xiě)分離:概述

1).何為讀寫(xiě)分離

讀寫(xiě)分離,從字面理解就是將對(duì)數(shù)據(jù)庫(kù)的讀操作與寫(xiě)操作分離的一種優(yōu)化手段。其最早起源于互聯(lián)網(wǎng)快速發(fā)展時(shí)期,面對(duì)海量用戶(hù)訪(fǎng)問(wèn)問(wèn)題,通過(guò)這一技術(shù)來(lái)解決數(shù)據(jù)庫(kù)性能瓶頸問(wèn)題。目前已經(jīng)成為非常常見(jiàn)的一種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)優(yōu)化技術(shù)。

2).讀寫(xiě)分離好處

提高訪(fǎng)問(wèn)性能通過(guò)引入讀寫(xiě)分離技術(shù),將之前集中于單點(diǎn)的訪(fǎng)問(wèn)壓力,分散到更多節(jié)點(diǎn)。即可利用更多的資源,支撐業(yè)務(wù)系統(tǒng),可有效提升整體訪(fǎng)問(wèn)性能。

提高穩(wěn)定性通過(guò)將讀取與寫(xiě)入操作的分離,可有效規(guī)避由于異常操作所帶來(lái)的風(fēng)險(xiǎn)。常見(jiàn)如一個(gè)大查詢(xún)語(yǔ)句,因訪(fǎng)問(wèn)數(shù)據(jù)規(guī)模巨大占用大量CPU資源。通過(guò)承載端分離,可避免影響更為重要的寫(xiě)入操作。

提高資源利用率為了更好地保護(hù)數(shù)據(jù),數(shù)據(jù)庫(kù)系統(tǒng)通常采用多副本技術(shù)冗余保護(hù)數(shù)據(jù),但其備用副本如無(wú)法提供業(yè)務(wù)訪(fǎng)問(wèn),將是一種資源浪費(fèi),而讀寫(xiě)分離可有效利用只讀副本,提升整體資源利用率。

提高可用性通過(guò)引入更多節(jié)點(diǎn)來(lái)承載讀寫(xiě)操作,結(jié)合負(fù)載均衡與高可用探查技術(shù),可避免單點(diǎn)故障引發(fā)可用性問(wèn)題。

提高訪(fǎng)問(wèn)效率通過(guò)利用不同節(jié)點(diǎn)分別承載讀取與寫(xiě)入,還可緩解因?yàn)殒i帶來(lái)的爭(zhēng)用問(wèn)題,提高單節(jié)點(diǎn)的訪(fǎng)問(wèn)效率。

更大優(yōu)化空間針對(duì)讀取操作的特殊性,可通過(guò)分離后的獨(dú)立資源采取特有的優(yōu)化技術(shù),進(jìn)一步提升訪(fǎng)問(wèn)效率。

2. 讀寫(xiě)分離:技術(shù)實(shí)現(xiàn)

1).用方案

圖片

目前業(yè)界流行的讀寫(xiě)分離方案,通常都是基于上述主從模式的數(shù)據(jù)庫(kù)架構(gòu),通過(guò)引入數(shù)據(jù)訪(fǎng)問(wèn)代理層,來(lái)實(shí)現(xiàn)訪(fǎng)問(wèn)動(dòng)作的讀寫(xiě)分離。引入數(shù)據(jù)訪(fǎng)問(wèn)代理的好處是源程序不需要做任何改動(dòng)就可以實(shí)現(xiàn)讀寫(xiě)分離,壞處是由于多了一層中間件做中轉(zhuǎn)代理,性能上會(huì)有所下降,數(shù)據(jù)訪(fǎng)問(wèn)代理也容易成為性能瓶頸,并且還存在一定維護(hù)成本。還有另一種方式,是將數(shù)據(jù)訪(fǎng)問(wèn)代理層前置到應(yīng)用側(cè),通過(guò)SDK方式與應(yīng)用集成在一起,可避免獨(dú)立一層所帶來(lái)的性能損耗和維護(hù)成本高的問(wèn)題。但這種方式對(duì)開(kāi)發(fā)語(yǔ)言有一定要求,存在適用性問(wèn)題。

圖片

2).技術(shù)要點(diǎn)

讀寫(xiě)分離功能的好與不好,主要是在易用性和靈活度問(wèn)題。前者是關(guān)心如何讓業(yè)務(wù)開(kāi)發(fā)像操作單個(gè)主庫(kù)一樣,無(wú)需過(guò)多關(guān)注主從讀寫(xiě)分離的細(xì)節(jié),只需要做好相應(yīng)讀寫(xiě)配置后,就無(wú)需考慮寫(xiě)主讀從的細(xì)節(jié)。后者是解決用戶(hù)多變的業(yè)務(wù)場(chǎng)景和拓?fù)渥兓⒖蓪?shí)現(xiàn)自動(dòng)適應(yīng)。這其中是需要解決一系列技術(shù)問(wèn)題,如下面這些常見(jiàn)的問(wèn)題。

? 判斷讀寫(xiě)操作

如何判斷讀寫(xiě)操作,是讀寫(xiě)分離面臨的首要問(wèn)題。判斷方式可大致分為自動(dòng)和手動(dòng)兩種,前者是通過(guò)顯式的方式由用戶(hù)來(lái)指定;后者則是自動(dòng)進(jìn)行判斷,用戶(hù)無(wú)需關(guān)心。這兩種判斷方式往往是互補(bǔ)的,可配合來(lái)使用。下面是常見(jiàn)判斷邏輯及處理:

  • 基于不同端口連接

該實(shí)現(xiàn)方式就讀寫(xiě)分離功能而言不是太好,因?yàn)榇朔绞脚c應(yīng)用自己實(shí)現(xiàn)沒(méi)有明顯差別,只是將直接連接不同數(shù)據(jù)庫(kù)的邏輯變成了連接中間件服務(wù)器的不同端口,并沒(méi)有對(duì)應(yīng)用系統(tǒng)開(kāi)發(fā)帶來(lái)實(shí)質(zhì)性的簡(jiǎn)化工作。

  • 基于SQL匹配

采用正則表達(dá)式匹配是比較容易實(shí)現(xiàn)的方案,可以無(wú)需應(yīng)用的修改,只需要在中間件添加正則匹配的規(guī)則,即可將讀、寫(xiě)分發(fā)的邏輯在中間件完成。讀寫(xiě)分離的效果,取決于中間件的正則匹配規(guī)則的編寫(xiě)質(zhì)量。

  • 基于Hint

應(yīng)用系統(tǒng)發(fā)送SQL時(shí),可以添加Hint,顯示的告訴中間件想要將該SQL發(fā)送到何處。中間件解析特定規(guī)則的Hint,即可實(shí)現(xiàn)對(duì)帶有不同Hint的語(yǔ)句分發(fā)到不同的數(shù)據(jù)庫(kù)節(jié)點(diǎn)。

  • 基于語(yǔ)法解析

當(dāng)中間件獲取到應(yīng)用發(fā)送的SQL字符串時(shí),對(duì)其進(jìn)行完整的語(yǔ)法解析,可以最大程度的獲取SQL字符串中的信息,例如類(lèi)型、操作對(duì)象等。基于語(yǔ)法的判斷,就能夠自動(dòng)針對(duì)不同語(yǔ)句類(lèi)型進(jìn)行讀寫(xiě)分發(fā),可以最大限度的減少應(yīng)用的適配工作。

圖片

使用語(yǔ)法解析是相對(duì)來(lái)說(shuō)較為友好的方式,無(wú)需開(kāi)發(fā)人員感知即可實(shí)現(xiàn)讀寫(xiě)操作分離。但這其中存在難點(diǎn),就是如何準(zhǔn)確判斷出只讀操作存在一定困難,例如使用函數(shù)、存儲(chǔ)過(guò)程、觸發(fā)器或諸如“SELECT ... FOR UPDATE”類(lèi)的操作。此時(shí),是需要引入輔助機(jī)制進(jìn)行判斷,可采取配置名單方式來(lái)輔助分析;或者通過(guò)Hint、API的方式強(qiáng)制指定走寫(xiě)庫(kù)或讀庫(kù)。除此之外,還有些命令也需要規(guī)范是否可在備庫(kù)執(zhí)行,如COPY、SHOW、SET、BEGIN...END等。

? 如何處理事務(wù)

事務(wù)類(lèi)操作,往往意味著數(shù)據(jù)變化,在讀寫(xiě)分離中如何處理呢?通常有兩種思路,一種是簡(jiǎn)單粗暴方式,將所有事務(wù)及關(guān)聯(lián)操作全部發(fā)送到主機(jī);一種是更為精確的處理,即分析事務(wù)內(nèi)的語(yǔ)句序列,將事務(wù)中先寫(xiě)后讀的對(duì)象進(jìn)行關(guān)聯(lián),一起發(fā)送到主機(jī),確保數(shù)據(jù)正確,而把和寫(xiě)操作無(wú)關(guān)的讀操作,進(jìn)行拆分,發(fā)送到備機(jī)執(zhí)行。后一種處理方式能最大限度的利用讀寫(xiě)分離,當(dāng)然需要解決對(duì)象前后關(guān)系這一問(wèn)題。

? 解決主備延遲

基于副本方式的延遲是常見(jiàn)的,也是讀寫(xiě)分離在設(shè)計(jì)之初就需考慮的問(wèn)題。其通常的處理思路可以有多種:

  • 強(qiáng)制讀寫(xiě)走主庫(kù)

這類(lèi)解決方案最簡(jiǎn)單粗暴,也是實(shí)際工作中最常用的方案。通過(guò)對(duì)主備節(jié)點(diǎn)延遲情況的判斷,來(lái)決定如何是走主庫(kù)還是備庫(kù)。通常可將延遲判斷封裝在中間層,前端應(yīng)用可不感知,只需配置延遲閾值即可,當(dāng)超過(guò)這一閾值就自動(dòng)走主庫(kù)。如下次訪(fǎng)問(wèn)時(shí)延遲低于閾值,可重新走備庫(kù)。當(dāng)然,這一方式無(wú)疑會(huì)加大對(duì)主庫(kù)的壓力。

  • 輪轉(zhuǎn)和重試備庫(kù)

當(dāng)在備庫(kù)讀取不到最新數(shù)據(jù)時(shí),另一種思路多讀取幾次或者嘗試讀取其他備庫(kù)。這里面的核心是對(duì)讀取最新數(shù)據(jù)的判斷,通常需要在應(yīng)用開(kāi)發(fā)時(shí)有所考慮才可。同時(shí)還需要制定退化方案,在何種情況下退化到讀取主庫(kù)。

  • 結(jié)合緩存解決

如延遲是常態(tài),很難短期內(nèi)解決,通過(guò)引入緩存可達(dá)到立竿見(jiàn)影的效果。其原理是在數(shù)據(jù)寫(xiě)入主庫(kù)時(shí),同步或異步寫(xiě)入緩存,應(yīng)用讀取時(shí)優(yōu)先讀取緩存,失效時(shí)才讀取數(shù)據(jù)庫(kù)。這種方案因引入緩存組件稍顯復(fù)雜,需解決緩存與數(shù)據(jù)庫(kù)同步更新及失效問(wèn)題;同時(shí)對(duì)應(yīng)用側(cè)有一定影響,需感知到緩存。比較好的處理方式是都封裝在中間層,通過(guò)它來(lái)統(tǒng)一處理訪(fǎng)問(wèn)邏輯。

數(shù)據(jù)庫(kù)優(yōu)化

最后一種就是盡量避免出現(xiàn)延遲,常見(jiàn)對(duì)數(shù)據(jù)庫(kù)有些可優(yōu)化的措施。例如盡量減少在主節(jié)點(diǎn)上執(zhí)行大事務(wù)操作、減少主庫(kù)索引進(jìn)而減小寫(xiě)入開(kāi)銷(xiāo)、主備庫(kù)采用不同存儲(chǔ)引擎提升效率等等。當(dāng)然這些方案只能起到一定作用,無(wú)法完全避免延遲問(wèn)題。

? 靈活負(fù)載策略

針對(duì)多個(gè)讀庫(kù),讀寫(xiě)分離組件還需提供靈活的負(fù)載均衡策略,常見(jiàn)的如隨機(jī)、輪詢(xún)、權(quán)重等等。這其中有幾個(gè)特殊情況需要考慮:

  • QoS

不同讀庫(kù)的服務(wù)能力有所差異下,其能提供的服務(wù)保障不同,需在讀寫(xiě)分離中提供例如權(quán)重的配置,進(jìn)行干預(yù)。當(dāng)然,更好的方式是提供服務(wù)質(zhì)量評(píng)估機(jī)制,可根據(jù)各讀庫(kù)的服務(wù)能力進(jìn)行分配。

  • 位置感知

針對(duì)多AZ、多Region的情況,不同讀庫(kù)承載的角色不同,有的只作為備選主庫(kù)不承擔(dān)讀、有的作為遠(yuǎn)程災(zāi)備等,因此在讀寫(xiě)分離中希望能感知到這些信息,有所區(qū)別對(duì)待。往往可通過(guò)設(shè)置標(biāo)簽的方式解決,根據(jù)不同標(biāo)簽設(shè)置不同策略。

? 解決讀一致性

在讀寫(xiě)分離中,當(dāng)存在多個(gè)讀庫(kù)下,會(huì)因?yàn)檠舆t不同,出現(xiàn)讀取不一致的情況。即路由到不同的讀庫(kù),讀取的數(shù)據(jù)鮮活度不同。這對(duì)于前端應(yīng)用會(huì)造成一定困擾,解決的方法可采用會(huì)話(huà)粘性的策略,針對(duì)同一會(huì)話(huà)路由到同一讀庫(kù),避免出現(xiàn)讀不一致。

? 拓?fù)浣Y(jié)構(gòu)感知

如果讀寫(xiě)分離訪(fǎng)問(wèn)的數(shù)據(jù)集群拓?fù)浒l(fā)生變化,例如主備發(fā)生切換,寫(xiě)操作要到新的主庫(kù);亦或是增加了備庫(kù)數(shù)量,流量可以打到新備庫(kù)等,這些都是需要讀寫(xiě)分離組件感知到底層數(shù)據(jù)庫(kù)拓?fù)涞淖兓_@里的難點(diǎn)在于幾個(gè)方面:

  • 準(zhǔn)確感知變化

當(dāng)出現(xiàn)網(wǎng)絡(luò)等原因,底層發(fā)生變化,可能讀寫(xiě)分離組件沒(méi)有探查到;或者探查本身就出現(xiàn)問(wèn)題,沒(méi)有發(fā)生變化而誤認(rèn)為發(fā)生變化。此時(shí)就會(huì)出現(xiàn)兩張拓?fù)浣Y(jié)構(gòu),一個(gè)實(shí)際結(jié)構(gòu),一是讀寫(xiě)分離組件感知到的結(jié)構(gòu)。這一問(wèn)題,一方面可通過(guò)引入共識(shí)機(jī)制,增加多方判斷解決;一方面也可通過(guò)與高可用組件互動(dòng)減少誤判。

  • 感知時(shí)效問(wèn)題

當(dāng)發(fā)生拓?fù)渥兓螅瑥陌l(fā)生變化到被讀寫(xiě)分離組件感知是需要時(shí)間的,過(guò)短會(huì)導(dǎo)致數(shù)據(jù)庫(kù)探查壓力大;過(guò)長(zhǎng)會(huì)影響整體恢復(fù)時(shí)間,這其中需要有個(gè)取舍。建議將這一能力開(kāi)放給用戶(hù),由用戶(hù)根據(jù)自身業(yè)務(wù)進(jìn)行決策。同時(shí)也可與高可用組件互動(dòng),將拓?fù)渥兓畔⒈M快推送到讀寫(xiě)分離組件,變被動(dòng)探查為主動(dòng)感知,提高時(shí)效性。

  • 人為干預(yù)能力

除因故障等原因發(fā)生的拓?fù)渥兓猓袝r(shí)還需人工干預(yù)讀寫(xiě)分離。如發(fā)生機(jī)器維護(hù)、數(shù)據(jù)庫(kù)升級(jí)等情況下,可提前通過(guò)人工手段,從拓?fù)浣Y(jié)構(gòu)中摘除相關(guān)節(jié)點(diǎn),做到更加平順。

? 個(gè)性化訴求

除了上述要點(diǎn)外,還有些用戶(hù)個(gè)性化的需求。如某個(gè)數(shù)據(jù)庫(kù)用戶(hù)的訪(fǎng)問(wèn)只走主庫(kù),某類(lèi)應(yīng)用的訪(fǎng)問(wèn)只走主庫(kù)等,這類(lèi)需求比較分散,比較好的處理方式是提供一定的腳本擴(kuò)展能力,類(lèi)似lua擴(kuò)展Nginx的方式。

3. 讀寫(xiě)分離:最佳實(shí)踐

1).數(shù)據(jù)庫(kù)優(yōu)化手段對(duì)比

讀寫(xiě)分離技術(shù),是一種有效的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)優(yōu)化手段,但不是唯一。隨著業(yè)務(wù)增長(zhǎng),達(dá)到一定規(guī)模后,提升數(shù)據(jù)庫(kù)承載能力可以有多種方式,從大的分類(lèi)來(lái)看可分為業(yè)務(wù)層優(yōu)化、架構(gòu)層優(yōu)化、訪(fǎng)問(wèn)層優(yōu)化與數(shù)據(jù)庫(kù)優(yōu)化幾個(gè)方面。

業(yè)務(wù)層-垂直拆分最為徹底的優(yōu)化手段,在業(yè)務(wù)層就做了拆分,投入較高,但取得效果往往也比較可觀(guān)。

架構(gòu)層-緩存/搜索通過(guò)引入緩存、搜索等技術(shù),減輕對(duì)數(shù)據(jù)庫(kù)壓力,讓數(shù)據(jù)庫(kù)專(zhuān)注于有價(jià)值操作。這種方式需要一定改造工作量,取得收益取決于業(yè)務(wù)對(duì)數(shù)據(jù)的要求而定。

訪(fǎng)問(wèn)層-讀寫(xiě)分離簡(jiǎn)單快速的優(yōu)化方式,可快速提升性能,針對(duì)部分場(chǎng)景效果明顯。

訪(fǎng)問(wèn)層-分庫(kù)分表分庫(kù)分表方式,原理上是采取“大化小”的策略,但對(duì)于SQL兼容性有較高要求,會(huì)存在一定業(yè)務(wù)改造工作量。預(yù)期收益效果看規(guī)模和業(yè)務(wù)對(duì)數(shù)據(jù)要求而定。

數(shù)據(jù)庫(kù)-垂直拆分對(duì)現(xiàn)有數(shù)據(jù)庫(kù)根據(jù)業(yè)務(wù)進(jìn)行拆分,難易程度及投入成本取決于之前架構(gòu)設(shè)計(jì),難點(diǎn)在于拆分后的數(shù)據(jù)交互。預(yù)期收益不很明確。

數(shù)據(jù)庫(kù)-垂直擴(kuò)展對(duì)數(shù)據(jù)庫(kù)升級(jí)是快速見(jiàn)效的措施,對(duì)應(yīng)用幾乎無(wú)影響,但需一定的成本投入及升級(jí)所需的中斷服務(wù)的時(shí)間。取得收益存在上限瓶頸,預(yù)期中等。

數(shù)據(jù)庫(kù)-水平擴(kuò)展對(duì)分庫(kù)分表類(lèi)似,但通常初始投入較大,對(duì)應(yīng)用存在一定侵入性。

圖片

從上述對(duì)比可見(jiàn),讀寫(xiě)分離,可以說(shuō)是對(duì)應(yīng)用侵入最小,也最容易實(shí)現(xiàn)的優(yōu)化手段。相對(duì)投入不到,就可取得一定效果。特別是對(duì)于大量讀請(qǐng)求和少量寫(xiě)請(qǐng)求的業(yè)務(wù)場(chǎng)景,會(huì)有不錯(cuò)的效果。

2).讀寫(xiě)分離適用場(chǎng)景

讀寫(xiě)分離是一種簡(jiǎn)單有效的優(yōu)化方式,但不是萬(wàn)能,其有著明顯的適用場(chǎng)景特征。

  • 讀多寫(xiě)少

當(dāng)單機(jī)數(shù)據(jù)庫(kù)不能支持業(yè)務(wù)的讀寫(xiě)規(guī)模,就可以考慮讀寫(xiě)分離。但需要考慮兩者的比例,如果寫(xiě)操作比例大于讀操作,那么大量寫(xiě)操作都在主庫(kù)進(jìn)行,讀寫(xiě)分離達(dá)不到預(yù)期降低主庫(kù)壓力的作用。一般來(lái)說(shuō),兩者讀寫(xiě)比越大,效果越好。當(dāng)然還需考慮寫(xiě)規(guī)模不能也不能高于單機(jī)數(shù)據(jù)庫(kù)支持規(guī)模。

  • 讀有限擴(kuò)展

針對(duì)承載讀的規(guī)模超大的情況,也需慎重。通過(guò)讀寫(xiě)分離是可以實(shí)現(xiàn)一定程度讀操作的橫向擴(kuò)展,但不是無(wú)限的,受限于數(shù)據(jù)庫(kù)復(fù)制的效率與成本,其存在擴(kuò)展上限。對(duì)于大規(guī)模的可綜合考慮緩存、數(shù)據(jù)拆分等多種手段。

  • 允許延遲

針對(duì)主備方式難免存在延遲,因此對(duì)于延遲很敏感的操作不適于此方案。

  • 非復(fù)雜查詢(xún)

采用讀寫(xiě)分離能在一定程度上解決查詢(xún)效率問(wèn)題,但針對(duì)復(fù)雜查詢(xún)?cè)噲D通過(guò)這一方式去解決不是一個(gè)好的思路。這類(lèi)訴求建議通過(guò)搜索引擎、OLAP等技術(shù)去解決。

4. 讀寫(xiě)分離:典型產(chǎn)品

業(yè)內(nèi)有很多讀寫(xiě)分離方案,一類(lèi)是采用中間件思路開(kāi)發(fā),以開(kāi)源產(chǎn)品為主;一類(lèi)是數(shù)據(jù)庫(kù)產(chǎn)品,內(nèi)置讀寫(xiě)分離功能。下面簡(jiǎn)單介紹下主要的產(chǎn)品:

1).MySQL-Proxy

MySQL-Proxy是MySQL官方提供的MySQL中間件服務(wù)。MySQL-Proxy實(shí)際上是在客戶(hù)端請(qǐng)求與MySQLServer之間建立了一個(gè)連接池。所有客戶(hù)端請(qǐng)求都是發(fā)向MySQL-Proxy,然后經(jīng)由MySQL-Proxy進(jìn)行相應(yīng)的分析,判斷出是讀操作還是寫(xiě)操作,分發(fā)至對(duì)應(yīng)的MySQLServer上。對(duì)于多節(jié)點(diǎn)Slave集群,也可以起做到負(fù)載均衡的效果。

圖片

# ./mysql-proxy --daemon --log-level=debug --user=mysql --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.1.5:3306" --proxy-read-only-backend-addresses="192.168.1.6:3306" --proxy-lua-script="/root/soft/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/root/soft/mysql-proxy/lib/mysql-proxy/lua/admin.lua"

其中proxy-backend-addresses是master服務(wù)器,proxy-read-only-backend-addresses是slave服務(wù)器。

2).Apache ShardingSphere

Apache ShardingSphere 是一款開(kāi)源的數(shù)據(jù)庫(kù)中間件產(chǎn)品,并在Apache基金會(huì)畢業(yè),可以說(shuō)是非常成熟的開(kāi)源項(xiàng)目。其產(chǎn)品內(nèi)置了豐富的功能,包括讀寫(xiě)分離能力,具體包括:

  • 支持動(dòng)態(tài)、靜態(tài)讀寫(xiě)分離能力,支持自動(dòng)拓?fù)涓兄c人工設(shè)定。
  • 支持多種數(shù)據(jù)庫(kù)(如MySQL、PG、openGauss等)及多種架構(gòu)(如MySQL 主從、MGR等)
  • 支持多端接入(Driver、Proxy),可滿(mǎn)足低時(shí)延場(chǎng)景
  • 支持語(yǔ)法解析自動(dòng)判斷或 Hint 方式手工指定
  • 支持包括熔斷等能力的人工干預(yù)手段,可適應(yīng)多種場(chǎng)景
  • 支持類(lèi)SQL的管理配置方式,支持熱加載配置

支持豐富的負(fù)載均衡算法,如下圖

圖片

3).MyCAT

MyCAT 是一款開(kāi)源的數(shù)據(jù)庫(kù)中間件產(chǎn)品。讀寫(xiě)分離功能通過(guò)配置文件完成,如下

圖片

balance,讀寫(xiě)分離策略

  • 0,不開(kāi)啟讀寫(xiě)分離機(jī)制,所有讀操作發(fā)到當(dāng)前可用writeHost上
  • 1,全部readHost與stand by writeHost參與select語(yǔ)句負(fù)載均衡
  • 2,所有讀操作都隨機(jī)在writeHost、readhost上分發(fā)
  • 3,所有讀請(qǐng)求隨機(jī)分發(fā)到readhost

writeType,寫(xiě)模式

  • 0,所有的操作發(fā)送到配置的第一個(gè)writehost
  • 1,隨機(jī)發(fā)送到配置的所有writehost
  • 2,不執(zhí)行寫(xiě)操作

switchType,切換模式

  • -1,表示不自動(dòng)切換
  • 1,默認(rèn)值,表示自動(dòng)切換
  • 2,基于MySQL主從同步的狀態(tài)決定是否切換
  • 3,基于MySQL galary cluster的切換機(jī)制
  • 4).阿里云-RDS數(shù)據(jù)庫(kù)代理(以RDS PG為例)

數(shù)據(jù)庫(kù)代理是阿里云數(shù)據(jù)庫(kù)RDS提供的一款安全、穩(wěn)定、高性能,對(duì)應(yīng)用完全透明的數(shù)據(jù)庫(kù)中間層服務(wù)。數(shù)據(jù)庫(kù)代理是位于數(shù)據(jù)庫(kù)服務(wù)端和應(yīng)用服務(wù)端之間的網(wǎng)絡(luò)代理服務(wù),代理服務(wù)端代替應(yīng)用服務(wù)端數(shù)據(jù)庫(kù)發(fā)送和接受所有數(shù)據(jù)庫(kù)請(qǐng)求,進(jìn)而可以在代理服務(wù)層上實(shí)現(xiàn)比如讀寫(xiě)分離、連接池、端對(duì)端加密、防閃斷等附加功能。通過(guò)數(shù)據(jù)庫(kù)代理用戶(hù)只需要通過(guò)一個(gè)鏈接地址即可實(shí)現(xiàn)讀寫(xiě)分離架構(gòu),讀寫(xiě)屬性和只讀屬性的多樣化選擇滿(mǎn)足了不同業(yè)務(wù)場(chǎng)景。

圖片

數(shù)據(jù)庫(kù)代理支持了PostgreSQL的協(xié)議,并且具備對(duì)用戶(hù)的請(qǐng)求連接認(rèn)證權(quán)限的能力。代理中的路由策略是核心:可以通過(guò)hint中指定固定的實(shí)例節(jié)點(diǎn)來(lái)轉(zhuǎn)發(fā)流量;也能夠?qū)⑹聞?wù)內(nèi)寫(xiě)操作之前的讀請(qǐng)求轉(zhuǎn)發(fā)到只讀實(shí)例,降低主實(shí)例負(fù)載;路由策略還可以根據(jù)用戶(hù)自定義的只讀模式或讀寫(xiě)模式對(duì)請(qǐng)求進(jìn)行不同的分發(fā)執(zhí)行。健康巡檢模塊周期性感知讀寫(xiě)分離架構(gòu)的拓?fù)渥兓闆r,在實(shí)例節(jié)點(diǎn)不健康或者超過(guò)延遲閾值,會(huì)自動(dòng)把讀請(qǐng)求路由到其他的只讀實(shí)例上。

圖片

5).OceanBase

OceanBase 數(shù)據(jù)庫(kù)天然支持讀寫(xiě)分離的功能,即通過(guò) OBProxy 代理服務(wù)和修改 OBServer 的配置即可實(shí)現(xiàn)業(yè)務(wù)的讀寫(xiě)分離策略。OceanBase 數(shù)據(jù)庫(kù)在讀取數(shù)據(jù)時(shí),提供了兩種一致性級(jí)別:強(qiáng)一致性和弱一致性。

強(qiáng)一致性是指請(qǐng)求路由給主副本讀取最新數(shù)據(jù);

弱一致性是指請(qǐng)求優(yōu)先路由給備副本,不要求讀取最新數(shù)據(jù)。

通過(guò)應(yīng)用側(cè)為執(zhí)行的 SQL 添加 SQL Hint 來(lái)顯性開(kāi)啟弱一致性讀就可以實(shí)現(xiàn)基于注釋的讀寫(xiě)分離功能,同時(shí)也衍生出如下三種常用的讀寫(xiě)分離策略:

圖片

圖片

6).KunlunBase

KunlunBase是一個(gè)開(kāi)源、高性能的分布式關(guān)系數(shù)據(jù)庫(kù),支持混合負(fù)載、PB級(jí)數(shù)據(jù)量管理并提供毫秒延遲的新一代數(shù)據(jù)庫(kù)解決方案。

圖片

KunlunBase 的讀寫(xiě)分離在計(jì)算層的遠(yuǎn)程查詢(xún)優(yōu)化器內(nèi)實(shí)現(xiàn)的,當(dāng)用戶(hù)的SQL同時(shí)滿(mǎn)足如下條件:

  • 當(dāng)前SQL類(lèi)型為select;
  • SQL中不包含用戶(hù)自定義函數(shù),除非當(dāng)前事務(wù)為只讀事務(wù);
  • 如果不在事務(wù)中(autocommit=on),則允許讀寫(xiě)分離;
  • 如果語(yǔ)句在顯式事務(wù)中,則要滿(mǎn)足:

      - 如果在只讀事務(wù)中,則允許讀寫(xiě)分離;

     - 如果在讀寫(xiě)事務(wù)中,則該事務(wù)未更新過(guò)數(shù)據(jù);

遠(yuǎn)程查詢(xún)優(yōu)化器就會(huì)將相應(yīng)的SQL 執(zhí)行計(jì)劃下發(fā)到從備機(jī)的節(jié)點(diǎn)上執(zhí)行。KunlunServer 會(huì)根據(jù)以下規(guī)則選擇發(fā)送select語(yǔ)句到目標(biāo)存儲(chǔ)集群的哪個(gè)備機(jī)節(jié)點(diǎn):

  • 根據(jù)節(jié)點(diǎn)權(quán)重值選擇 (ro_weight)
  • 根據(jù)網(wǎng)絡(luò)延遲(ping)
  • 根據(jù)主從副本的數(shù)據(jù)一致性延遲(latency)


責(zé)任編輯:武曉燕 來(lái)源: 韓鋒頻道
相關(guān)推薦

2019-09-30 09:19:54

Redis分離云數(shù)據(jù)庫(kù)

2020-02-28 19:06:21

緩存讀寫(xiě)Redis

2023-10-07 08:45:47

2021-07-23 11:35:49

架構(gòu)運(yùn)維技術(shù)

2022-07-06 10:23:13

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2023-11-20 14:58:30

人工智能AI Agents

2018-10-30 11:10:05

Flink數(shù)據(jù)集計(jì)算

2023-03-06 21:29:41

mmap技術(shù)操作系統(tǒng)

2022-09-27 13:34:49

splice零拷貝原理

2022-08-17 18:25:37

Java分布式搜索引擎

2020-07-27 09:50:52

云原生圖譜

2019-02-13 15:38:09

存儲(chǔ)虛擬化云計(jì)算

2025-04-10 00:12:00

2023-10-24 11:44:21

2021-06-21 14:30:43

UWB超寬帶手機(jī)

2021-06-25 10:05:58

SpringBootMySQL數(shù)據(jù)庫(kù)

2023-12-10 16:54:39

以太網(wǎng)交換技術(shù)

2022-08-03 08:01:16

CDN網(wǎng)站服務(wù)器

2025-05-09 09:00:00

模型融合人工智能神經(jīng)網(wǎng)絡(luò)

2025-05-20 13:52:12

GPU集群微軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美日韩综合 | 欧美精品久久 | 免费观看一级毛片 | 在线播放国产一区二区三区 | 欧美精品一区二区三区在线播放 | 精品伊人久久 | 日本一区二区三区免费观看 | 国产精品高潮呻吟久久 | 国产免费观看一级国产 | 在线午夜 | 国产免费一区二区 | avtt国产 | 一区二区三区欧美在线 | 国产精品欧美一区喷水 | 玖玖精品视频 | 国产精品18久久久久久久 | 99久久精品免费看国产高清 | 久久精品视频亚洲 | 午夜a√| 久久精品天堂 | 午夜影晥 | 精品欧美一区二区精品久久久 | 国产精品美女久久久av超清 | 激情a | 精品在线观看一区 | 中文在线а√在线8 | 欧美激情一区二区三级高清视频 | 日本一区二区三区在线观看 | 人妖一区| 久久99深爱久久99精品 | 精品久久久一区二区 | 中国大陆高清aⅴ毛片 | 狠狠干狠狠操 | 天天干干| 在线观看日本网站 | 亚洲成人一区二区三区 | 色www精品视频在线观看 | 黄色网址在线免费播放 | 亚洲一区二区三区四区av | www.久久久久久久久 | 成人精品一区二区户外勾搭野战 |