python的业务场景_python| Binlog务应用场景
binlog是mysql的一種二進(jìn)制日志文件,用來(lái)記錄數(shù)據(jù)的變化。mysql使用binlog進(jìn)行主從復(fù)制,如圖:
客戶端向master的mysql sever寫入數(shù)據(jù)
當(dāng)數(shù)據(jù)發(fā)生變化時(shí),master將變更的數(shù)據(jù)記錄寫入到二進(jìn)制文件中,即binlog。
slave訂閱了master的binlog,所以會(huì)通過(guò)一個(gè)I/O THREAD與master的DUMP THREAD進(jìn)行通信,同步binlog
I/O THREAD讀取到binlog后會(huì)吸入到relay log中,準(zhǔn)備重放。
slave會(huì)通過(guò)SQL THREAD讀取relay log,重放數(shù)據(jù)的改動(dòng)并執(zhí)行相應(yīng)的改動(dòng)。
這里有幾點(diǎn)需要注意:
主從復(fù)制不是強(qiáng)一致性,只能保證最終一致
master配合binlog復(fù)制會(huì)影響性能,所以盡量不要在master上掛太多的slave,如果對(duì)時(shí)間要求不高,可以在slave上掛slave
2.binlog的業(yè)務(wù)應(yīng)用
上面介紹了mysql中應(yīng)用binlog的場(chǎng)景,而我們的業(yè)務(wù)可以偽裝成master的slave節(jié)點(diǎn),感知數(shù)據(jù)的變化,這就給了我們很多的業(yè)務(wù)運(yùn)用空間。
2.1 數(shù)據(jù)異構(gòu)
經(jīng)常有這樣一個(gè)場(chǎng)景:
原來(lái)業(yè)務(wù)是一個(gè)很單一的系統(tǒng),所以表也在一起。隨著業(yè)務(wù)的發(fā)展,系統(tǒng)開(kāi)始拆分,總有一些表是各個(gè)業(yè)務(wù)都關(guān)注的表,但是對(duì)相關(guān)的字段的運(yùn)用場(chǎng)景不同,所以這樣一份元數(shù)據(jù)怎樣更好的為各個(gè)系統(tǒng)服務(wù)就成了問(wèn)題。當(dāng)然,多寫或者讀寫分離可以從物理節(jié)點(diǎn)上減少對(duì)數(shù)據(jù)服務(wù)器的壓力,但是對(duì)業(yè)務(wù)并沒(méi)有做到足夠的支持,因?yàn)檫@些表都是一樣的。因此我們可以通過(guò)binlog進(jìn)行數(shù)據(jù)異構(gòu)。
如圖所示,訂單系統(tǒng)生成訂單后,通過(guò)binlog可以解析生成用戶維度的訂單信息供用戶中心查詢、商戶維度訂單表供運(yùn)營(yíng)管理,以及搜索系統(tǒng)的搜索數(shù)據(jù),提供全文搜索功能。
這樣,我們就通過(guò)原始的訂單數(shù)據(jù)異構(gòu)到三個(gè)系統(tǒng)中,提供了豐富的數(shù)據(jù)訪問(wèn)功能。不僅從節(jié)點(diǎn)上降低了數(shù)據(jù)服務(wù)器的壓力,數(shù)據(jù)表現(xiàn)形式也更貼近自己的服務(wù),減少不必要的字段冗余。
2.2 緩存數(shù)據(jù)的補(bǔ)充
對(duì)于高并發(fā)的系統(tǒng),數(shù)據(jù)庫(kù)往往是系統(tǒng)性能的瓶頸,畢竟IO響應(yīng)速度是遠(yuǎn)遠(yuǎn)小于電子的運(yùn)算速度的。因此,很多查詢類服務(wù)都會(huì)在CPU與數(shù)據(jù)庫(kù)之間加上一層緩存。即現(xiàn)從緩存獲取,命中后直接返回,否則從DB中獲取并存入緩存后返回。而如果原始數(shù)據(jù)變化了但緩存尚未超時(shí),則緩存中的數(shù)據(jù)就是過(guò)時(shí)的數(shù)據(jù)了。當(dāng)數(shù)據(jù)有變更的時(shí)候主動(dòng)修改緩存數(shù)據(jù)。
當(dāng)客戶端更改了數(shù)據(jù)之后,中間件系統(tǒng)通過(guò)binlog獲得數(shù)據(jù)變更,并同步到緩存中。這樣就保證了緩存中數(shù)據(jù)有效性,減少了對(duì)數(shù)據(jù)庫(kù)的調(diào)用,從而提高整體性能。
2.3 基于數(shù)據(jù)的任務(wù)分發(fā)
有這樣一個(gè)場(chǎng)景:
很多系統(tǒng)依賴同一塊重要數(shù)據(jù),當(dāng)這些數(shù)據(jù)發(fā)生變化的時(shí)候,需要調(diào)用其他相關(guān)系統(tǒng)的通知接口同步數(shù)據(jù)變化,或者mq消息告知變化并等待其主動(dòng)同步。這兩種情況都對(duì)原始系統(tǒng)造成了侵入,原始系統(tǒng)改一塊數(shù)據(jù),并不想做這么多其他的事情。所以這時(shí)候可以通過(guò)binlog進(jìn)行任務(wù)分發(fā)。
當(dāng)原始業(yè)務(wù)系統(tǒng)修改數(shù)據(jù)后,不需要進(jìn)行其他的業(yè)務(wù)關(guān)聯(lián)。由調(diào)度系統(tǒng)讀取binlog進(jìn)行相應(yīng)的任務(wù)分發(fā)、消息發(fā)送以及同步其他業(yè)務(wù)狀態(tài)。這樣可以將其他業(yè)務(wù)與原始業(yè)務(wù)系統(tǒng)解耦,并從數(shù)據(jù)的角度將所有管理功能放在了同一個(gè)調(diào)度系統(tǒng)中,責(zé)任清晰。
3.總結(jié)
binlog是mysql提供的數(shù)據(jù)同步機(jī)制,很好的解決了主從分離、讀寫庫(kù)分離等業(yè)務(wù)。而我們可以構(gòu)建一個(gè)中間件系統(tǒng),“偽造”成master的一個(gè)slave。當(dāng)讀取了binlog中的數(shù)據(jù)變化后,根據(jù)相應(yīng)的業(yè)務(wù)場(chǎng)景做各種業(yè)務(wù)處理。而目前我接觸到的最常見(jiàn)的就是第一個(gè)場(chǎng)景——數(shù)據(jù)異構(gòu),可以異構(gòu)到其他表中,也可以異構(gòu)到其他數(shù)據(jù)引擎中,比如Elastic Search。
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python的业务场景_python| Binlog务应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 矫怎么读(矫在文言文中的意思)
- 下一篇: 网易传媒:亚运传播彰显内容影响力 AI加