0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MYSQL中讀寫分離有什么作用及基本架構(gòu)說明

Wildesbeast ? 來源:今日頭條 ? 作者:會(huì)點(diǎn)代碼的大叔 ? 2020-02-05 14:40 ? 次閱讀

現(xiàn)在絕大部分軟件項(xiàng)目,都會(huì)使用到關(guān)系型數(shù)據(jù)庫,比如MySQL、Oracle、DB2等等,目前這些數(shù)據(jù)庫的單機(jī)性能已經(jīng)是不斷優(yōu)化和提高了,但是隨著數(shù)據(jù)增長的速度和并發(fā)訪問量的增加,在某些公司、某些場景下,單機(jī)數(shù)據(jù)庫已經(jīng)很難滿足業(yè)務(wù)的需要了,所以必須考慮數(shù)據(jù)庫集群的方式來提高系統(tǒng)的可用性;最常見的兩種方法:

分庫分表:把數(shù)據(jù)分散到不同的數(shù)據(jù)庫上,每臺(tái)數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù)是不相同的(這里先不考慮每個(gè)庫做備份或讀寫分離);分庫分表既可以分散數(shù)據(jù)庫訪問的壓力,也可以分散數(shù)據(jù)存儲(chǔ)的壓力;但是使用分庫分表方案的時(shí)候,會(huì)帶來擴(kuò)容、事務(wù)、關(guān)聯(lián)查詢等問題和難點(diǎn),具體這里就不展開講了。

讀寫分離:將數(shù)據(jù)庫讀操作和寫操作分散到不同的節(jié)點(diǎn)上,通常是一臺(tái)數(shù)據(jù)庫做寫操作,1到N臺(tái)做讀操作;讀寫分離的架構(gòu),每一臺(tái)數(shù)據(jù)中的數(shù)據(jù)是相同的(這里先忽略延遲的問題),所以只分散了數(shù)據(jù)庫訪問的壓力,并沒有分散數(shù)據(jù)存儲(chǔ)的壓力;我們這里主要講一講讀寫分離。

讀寫分離基本架構(gòu)

MySQL讀寫分離的基本架構(gòu),可以參考下圖:

如上圖,讀寫分離實(shí)現(xiàn)的基本步驟是:

數(shù)據(jù)庫服務(wù)器搭建多臺(tái),一主N從(N大于等于1);

主數(shù)據(jù)庫只負(fù)責(zé)寫操作,從數(shù)據(jù)庫只負(fù)責(zé)讀操作;

主數(shù)據(jù)庫復(fù)制數(shù)據(jù)到從數(shù)據(jù)庫上;

客戶端寫操作路由到主數(shù)據(jù)庫上,讀操作路由到從數(shù)據(jù)庫上。

讀寫分離還有另外一種架構(gòu),就是在MySQL數(shù)據(jù)庫和客戶端之間,增加一層中間代理層,客戶端只連接代理, 由代理根據(jù)請(qǐng)求類型,把請(qǐng)求分發(fā)到不同的數(shù)據(jù)庫上:

第一種架構(gòu),整體架構(gòu)比較簡單直接,性能會(huì)稍微高一些,但是如果才用直連的方式,客戶端可能會(huì)稍微麻煩一些(通常需要引入一些組件,負(fù)責(zé)管理數(shù)據(jù)庫);

第二種架構(gòu),對(duì)客戶端比較友好,因?yàn)榭蛻舳酥恍枰痛斫换ィ⒉挥藐P(guān)注數(shù)據(jù)庫的具體信息;但是因?yàn)槎嗔艘粚哟恚喽嗌偕贂?huì)對(duì)性能有一定的影響。

讀寫分離帶來的好處

讀寫分離結(jié)構(gòu)中,會(huì)有兩臺(tái)甚至更多臺(tái)數(shù)據(jù)庫,這種冗余的設(shè)計(jì),可以提高數(shù)據(jù)的安全性和系統(tǒng)的可用性;就算是在分庫分表的架構(gòu)中,每一臺(tái)子庫,也可以一主多備的部署方式;

讀寫分離更多的時(shí)候使用在讀操作遠(yuǎn)遠(yuǎn)大于寫操作的場景下,這樣可以保證寫操作的數(shù)據(jù)庫承受更小的壓力,也可以緩解X鎖和S鎖爭用;

服務(wù)器數(shù)量的增加,意味著可以有效地利用多臺(tái)服務(wù)器的資源;讀操作被分?jǐn)?,提高了系統(tǒng)的性能;

如果寫操作比讀操作多,或者相近,可以采用雙主相互復(fù)制的架構(gòu)。

讀寫分離會(huì)帶來的問題

之前的文章,我也反復(fù)強(qiáng)調(diào)過,任何的架構(gòu)、軟件、框架、組件...在解決一部分問題的時(shí)候,一定會(huì)帶來其他的問題;讀寫分離最大的一個(gè)問題就是,數(shù)據(jù)從主復(fù)制到從的過程中,可能會(huì)存在延遲的,如果客戶端在執(zhí)行完一個(gè)讀操作后,立刻從存庫中查詢的話,可能會(huì)讀取到舊數(shù)據(jù)的情況(我們不斷優(yōu)化,也只能縮短這個(gè)時(shí)間,并不能完全消除掉這個(gè)時(shí)間)。

那么針對(duì)這個(gè)問題,有哪些處理方法呢?

根據(jù)具體場景進(jìn)行評(píng)估,是否可以接收這個(gè)延遲(這好像是一句廢話,但是大多數(shù)業(yè)務(wù)場景,是可以接收這點(diǎn)兒延遲的);

對(duì)于實(shí)時(shí)性要求很高的場景(查詢的數(shù)據(jù)必須是最新的結(jié)果),將這些請(qǐng)求強(qiáng)制路由到主庫上;

執(zhí)行完寫操作之后,在讀操作發(fā)生之前,讓中間的時(shí)間變長(也就是從業(yè)務(wù)操作角度來做一些控制,不一定操作完了立刻查詢);

判斷主備無延遲,可以通過判斷seconds_behind_master參數(shù)、對(duì)比GTID、對(duì)比位點(diǎn)等方式,判斷從數(shù)據(jù)庫是否和主數(shù)據(jù)庫一致。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8873

    瀏覽量

    84972
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3739

    瀏覽量

    64181
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    794

    瀏覽量

    26359
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    配置MySQL主從復(fù)制和讀寫分離

    配置MySQL主從復(fù)制和讀寫分離
    的頭像 發(fā)表于 10-23 11:44 ?109次閱讀
    配置<b class='flag-5'>MySQL</b>主從復(fù)制和<b class='flag-5'>讀寫</b><b class='flag-5'>分離</b>

    嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用 閱讀體驗(yàn) +分離內(nèi)核的嵌入式Hyperviso

    讀后感:分離內(nèi)核與SKH架構(gòu)的深刻洞察 在閱讀了關(guān)于分離內(nèi)核和SKH(分離內(nèi)核Hypervisor)的詳細(xì)闡述后,我深感這一技術(shù)在現(xiàn)代計(jì)算機(jī)系統(tǒng),尤其是嵌入式系統(tǒng)和安全關(guān)鍵系統(tǒng)
    的頭像 發(fā)表于 10-12 17:06 ?203次閱讀
    嵌入式Hypervisor:<b class='flag-5'>架構(gòu)</b>、原理與應(yīng)用 閱讀體驗(yàn) +<b class='flag-5'>分離</b>內(nèi)核的嵌入式Hyperviso

    SSD基本架構(gòu)

    接口,常用的SATA、SAS和PCIe。 SSD控制器:負(fù)責(zé)主機(jī)到后端介質(zhì)的讀寫訪問和協(xié)議轉(zhuǎn)換,表項(xiàng)管理、數(shù)據(jù)緩存及校驗(yàn)等,是SSD的核心部件。國科微星空企業(yè)級(jí)系列SSD采用自主研發(fā)的第四代12nm工藝NANDXtra控制器。 DRAM:FTL表項(xiàng)和數(shù)據(jù)的緩存,以提供數(shù)
    的頭像 發(fā)表于 08-14 09:05 ?221次閱讀

    讀寫分離怎么保證數(shù)據(jù)同步

    讀寫分離是一種常見的數(shù)據(jù)庫架構(gòu)設(shè)計(jì),用于提高數(shù)據(jù)庫的并發(fā)處理能力。在讀寫分離架構(gòu)
    的頭像 發(fā)表于 07-12 09:49 ?825次閱讀

    讀寫分離解決什么問題

    讀寫分離是一種數(shù)據(jù)庫架構(gòu)設(shè)計(jì)策略,主要解決數(shù)據(jù)庫在高并發(fā)場景下的讀寫性能瓶頸問題。在這種架構(gòu),
    的頭像 發(fā)表于 07-12 09:47 ?409次閱讀

    MySQL的整體邏輯架構(gòu)

    支持多種存儲(chǔ)引擎是眾所周知的MySQL特性,也是MySQL架構(gòu)的關(guān)鍵優(yōu)勢(shì)之一。如果能夠理解MySQL Server與存儲(chǔ)引擎之間是怎樣通過API交互的,將大大有利于理解
    的頭像 發(fā)表于 04-30 11:14 ?388次閱讀
    <b class='flag-5'>MySQL</b>的整體邏輯<b class='flag-5'>架構(gòu)</b>

    查詢SQL在mysql內(nèi)部是如何執(zhí)行?

    我們知道在mySQL客戶端,輸入一條查詢SQL,然后看到返回查詢的結(jié)果。這條查詢語句在 MySQL 內(nèi)部到底是如何執(zhí)行的呢?本文跟大家探討一下哈,我們先來看下MySQL本架構(gòu)~
    的頭像 發(fā)表于 01-22 14:53 ?495次閱讀
    查詢SQL在<b class='flag-5'>mysql</b>內(nèi)部是如何執(zhí)行?

    智能座艙的基本架構(gòu)哪些

    智能座艙是指通過集成信息技術(shù),將智能化設(shè)備和系統(tǒng)應(yīng)用于飛機(jī)座艙的一種新的航空技術(shù)發(fā)展趨勢(shì)。其目的是提升航空安全、提高飛行效率、增強(qiáng)乘客體驗(yàn)、降低維護(hù)成本等。智能座艙的基本架構(gòu)包括以下幾個(gè)方面: 機(jī)載
    的頭像 發(fā)表于 12-19 10:34 ?1690次閱讀

    oracle和mysql語法區(qū)別大嗎

    Oracle和MySQL是兩種不同的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。雖然它們都是遵循SQL標(biāo)準(zhǔn),但在語法和特性上仍存在一些區(qū)別。以下是對(duì)Oracle和MySQL語法區(qū)別的詳細(xì)說明: 數(shù)據(jù)類型
    的頭像 發(fā)表于 12-06 10:26 ?1023次閱讀

    mysqldecimal的用法

    MySQL的DECIMAL是用于存儲(chǔ)精確數(shù)值的數(shù)據(jù)類型。DECIMAL可以存儲(chǔ)固定精度和小數(shù)位數(shù)的值。在MySQL,DECIMAL數(shù)據(jù)類型
    的頭像 發(fā)表于 11-30 10:45 ?961次閱讀

    mysql的數(shù)據(jù)大于千萬怎么辦

    當(dāng)MySQL的數(shù)據(jù)量達(dá)到千萬級(jí)別時(shí),為了保證數(shù)據(jù)庫的性能和穩(wěn)定性,需要采取一系列優(yōu)化措施和架構(gòu)設(shè)計(jì)。在本文中,我將詳細(xì)介紹如何應(yīng)對(duì)大規(guī)模數(shù)據(jù)的挑戰(zhàn),包括硬件、數(shù)據(jù)庫設(shè)計(jì)、索引優(yōu)化、分區(qū)和分布式
    的頭像 發(fā)表于 11-23 14:41 ?1445次閱讀

    Python如何使用MySQL 8.2讀寫分離?

    如您所知,MySQL 8.2 發(fā)布了最令人期待的功能之一:讀寫分離。
    的頭像 發(fā)表于 11-22 09:39 ?471次閱讀
    Python如何使用<b class='flag-5'>MySQL</b> 8.2<b class='flag-5'>讀寫</b><b class='flag-5'>分離</b>?

    MySQL數(shù)據(jù)庫基礎(chǔ)知識(shí)

    的基礎(chǔ)知識(shí),包括其架構(gòu)、數(shù)據(jù)類型、表操作、查詢語句和數(shù)據(jù)導(dǎo)入導(dǎo)出等方面。 MySQL 數(shù)據(jù)庫架構(gòu) MySQL 數(shù)據(jù)庫由多個(gè)組件組成,包括服務(wù)器、存儲(chǔ)引擎和客戶端等。
    的頭像 發(fā)表于 11-21 11:09 ?904次閱讀

    介紹4種常用的MySQL同步ES方案

    在實(shí)際項(xiàng)目開發(fā),我們經(jīng)常將 MySQL 作為業(yè)務(wù)數(shù)據(jù)庫,ES 作為查詢數(shù)據(jù)庫,用來實(shí)現(xiàn)讀寫分離,緩解 MySQL 數(shù)據(jù)庫的查詢壓力,應(yīng)對(duì)海
    的頭像 發(fā)表于 11-20 10:45 ?628次閱讀
    介紹4種常用的<b class='flag-5'>MySQL</b>同步ES方案

    MySQL增刪改查的例子

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它具有強(qiáng)大的數(shù)據(jù)處理和數(shù)據(jù)存儲(chǔ)能力。在MySQL,我們可以使用各種命令來進(jìn)行數(shù)據(jù)的增加、刪除、修改和查詢操作。下面將詳細(xì)介紹MySQL
    的頭像 發(fā)表于 11-16 15:39 ?660次閱讀