如何給老婆解釋什么是 Master-Slave

一天,陽(yáng)光明媚,天朗氣清,正是春游的好日子。

我在家中躺著看權(quán)游,老婆在一旁,翻閱著書(shū)架上的書(shū)。

和往常一樣,她在看到一本技術(shù)書(shū)時(shí),閱讀速度驟降下來(lái),我知道她又要對(duì)我進(jìn)行靈魂拷問(wèn)了。

小命不保

“嘿,發(fā)現(xiàn)了一個(gè)現(xiàn)象?!?,老婆說(shuō),手中拿著的書(shū),是《高性能Mysql》。

“嗯哼?!?,我故作鎮(zhèn)定。

“你們每本技術(shù)書(shū),講到最后,都要講一個(gè)叫 Master-Slave 的東西?!?/p>

“你是說(shuō)主從?”

“主從是個(gè)啥子?”

“主從,emmm,就是... 呃,怎么跟你說(shuō)呢,這是很簡(jiǎn)單的概念嘛 ... ”

"什么,很簡(jiǎn)單的概念,你意思是說(shuō),這么簡(jiǎn)單的東西我都不懂咯?"

“呃... ”,我感覺(jué)我要跪,仿佛掛在懸崖邊上,靠臂力支撐著 ......

自我救贖

我不想今晚跪搓衣板、洗碗、洗衣服,我的權(quán)游還沒(méi)看完。

“是這樣的,很多東西嘛,一般人都不懂,但只要懂了,就會(huì)覺(jué)得很簡(jiǎn)單,比如說(shuō)去日本旅游,怎么辦簽證、怎么坐電車、怎么和日本人溝通,沒(méi)了解之前,都覺(jué)得很難,但一旦做成了,就很簡(jiǎn)單?!?,我在懸崖邊緣掙扎。

“嗯哼,是這個(gè)道理~”

貌似已經(jīng)靠著臂力和背闊肌,把自己拉上去了,暫時(shí)安全了。

“還記得咱們上次坐高鐵去長(zhǎng)沙,在深圳北那排隊(duì)取票嗎?”

“記得呀~ ”

“嗯,咱們?nèi)ト∑?,售票處那里,有很多個(gè)窗口吧,而且有的窗口上寫著,只限取票,不能買票?!?/p>

“嗯嗯,是有這樣的。”

“好,現(xiàn)在我們把這個(gè)高鐵站售票窗口的模型簡(jiǎn)化一下,我們假設(shè),一開(kāi)始,只有一個(gè)窗口,既負(fù)責(zé)售票,又負(fù)責(zé)取票,你覺(jué)得會(huì)有什么問(wèn)題?”

“那會(huì)很煩吧,像咱們這種在網(wǎng)上買票,到了那再取票的,估計(jì)得取好久。只有一個(gè)窗口,全部人都擠在一塊了。”

“沒(méi)錯(cuò),這是只有一個(gè)窗口帶來(lái)的第一個(gè)問(wèn)題:擁擠?!?/p>

“還有別的問(wèn)題?”

“是的,你想想看,假設(shè)負(fù)責(zé)這個(gè)窗口的員工尿急,想去上廁所,或者這個(gè)窗口的電腦壞掉了,用不了,怎么辦?”

“噢,那這時(shí)候就一張票也賣不了,一張票也取不了?!?/p>

“嗯嗯,這個(gè)叫SPOF,Single Point of Failure,意識(shí)是系統(tǒng)里一個(gè)節(jié)點(diǎn)的故障,導(dǎo)致整個(gè)系統(tǒng)都不可用?!?/p>

“Soga,長(zhǎng)見(jiàn)識(shí)了?!?/p>

“嗯哼,那么,這時(shí)候,假設(shè)你是高鐵站的站長(zhǎng),你會(huì)怎么做?”

“呃,我得請(qǐng)更多的員工,開(kāi)多幾個(gè)窗口。”

“沒(méi)錯(cuò),我們?cè)偌佣鄮讉€(gè)窗口,現(xiàn)在就不怕有哪個(gè)窗口,因?yàn)閱T工尿急或者電腦壞掉而不能提供服務(wù)了,如果無(wú)法服務(wù),讓排隊(duì)的乘客去其他窗口就好了。”

“666,那這樣就既解決了SPOF,又解決了擁擠問(wèn)題啦~ ”

“哈,你都會(huì)用軟件術(shù)語(yǔ)來(lái)描述生活問(wèn)題了。SPOF是肯定解決了,但是擁擠嘛,還可以再繼續(xù)優(yōu)化的~”

“咋優(yōu)化?”

“你看,現(xiàn)在各個(gè)窗口,都是既可以買票,又可以取票的,但是常識(shí)告訴我們,人均買票花費(fèi)的時(shí)間,要遠(yuǎn)大于人均取票的時(shí)間。

“啊,對(duì),要是這條隊(duì),前面一百個(gè)人都是買票的,但是我一個(gè)取票的過(guò)來(lái)了,排到隊(duì)尾,那就得奔潰... ”

"是的,所以我們可以優(yōu)化下,讓其中兩個(gè)窗口,既可以買票又可以取票,或者干脆就只讓它們可以買票,這些,我們叫做Master,然后再按需要加多幾個(gè)窗口,這幾個(gè)窗口,只能取票。因?yàn)樗麄兪菫榱私o Master 們減輕負(fù)擔(dān),所以我們叫它們 Slave,這個(gè)用軟件的術(shù)語(yǔ)來(lái)描述,就是讀寫分離"

“Wow!原來(lái) Master-Slave 是這樣個(gè)意思~ ”

其實(shí),很多軟件設(shè)計(jì)的想法,都可以在生活中找到影子,軟件設(shè)計(jì)也是一門“仿生學(xué)”。比如剛開(kāi)業(yè)的小店,可能員工都不多,但是一旦生意上去了,就會(huì)招更多的小弟過(guò)來(lái),因?yàn)橐坏╊櫩拖朦c(diǎn)菜或者買單時(shí),找不到服務(wù)員,是很影響心情和體驗(yàn)的。軟件也是這樣,只放一臺(tái)機(jī)器在那,一旦這臺(tái)機(jī)器忙不過(guò)來(lái),就會(huì)表現(xiàn)為網(wǎng)頁(yè)發(fā)來(lái)的請(qǐng)求,響應(yīng)很慢,同樣影響訪客的體驗(yàn)和心情,訪客點(diǎn)個(gè)按鈕,半天沒(méi)響應(yīng),那他們可能就把這個(gè)網(wǎng)站拉黑了。”

“Wow,可以可以,很6嘛~ ”

我仿佛已經(jīng)從懸崖邊上撐了起來(lái),迎著早晨的陽(yáng)光,大步往回走 ......

非程序員請(qǐng)就此止步,程序員請(qǐng)繼續(xù)往前走……

對(duì)程序員的話

這篇文章用了售票窗口來(lái)類比機(jī)器,解釋什么是 Master-Slave,什么是SPOF,什么是讀寫分離。

要說(shuō)這兩者最大的不同,那就是售票窗口并不是數(shù)據(jù)源。

即我們查詢數(shù)據(jù)時(shí),不會(huì)直接從售票窗口查詢,而是售票窗口里的服務(wù)員,用電腦再去查數(shù)據(jù)。

而機(jī)器呢,很多機(jī)器本身就是數(shù)據(jù)源,比如Mysql,請(qǐng)求過(guò)來(lái)后,它們直接從自己身上拉數(shù)據(jù),返回出去。這樣就要求不同機(jī)器上的數(shù)據(jù),必須要一致,不能客戶從機(jī)器A查詢,得到結(jié)果是“aa”,從機(jī)器B查詢,得到結(jié)果卻是“bb”,所以就需要當(dāng)數(shù)據(jù)寫入 Master 時(shí),把數(shù)據(jù)同步給 Slave,這就是「主從復(fù)制」。

「主從復(fù)制」期間,Slave的數(shù)據(jù)會(huì)和Master不一致,這是「主從延遲」。

由于「主從延遲」的存在,當(dāng)Master宕機(jī)時(shí),你要優(yōu)先保證「數(shù)據(jù)強(qiáng)一致性」還是「服務(wù)可用性」,這就是「主從切換」時(shí)要考慮的問(wèn)題了。

如果你看了這篇文章,還想深入了解 「主從復(fù)制」、「主從延遲」和「主從切換」是怎么回事 ,可以看我之前寫的:Mysql Replication 簡(jiǎn)明教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容