一天,陽光明媚碧浊,天朗氣清涂邀,正是春游的好日子。
我在家中躺著看權(quán)游箱锐,老婆在一旁必孤,翻閱著書架上的書。
和往常一樣瑞躺,她在看到一本技術(shù)書時敷搪,閱讀速度驟降下來,我知道她又要對我進(jìn)行靈魂拷問了幢哨。
小命不保
“嘿赡勘,發(fā)現(xiàn)了一個現(xiàn)象±塘”闸与,老婆說毙替,手中拿著的書,是《高性能Mysql》践樱。
“嗯哼厂画。”拷邢,我故作鎮(zhèn)定袱院。
“你們每本技術(shù)書,講到最后瞭稼,都要講一個叫 Master-Slave 的東西忽洛。”
“你是說主從环肘?”
“主從是個啥子欲虚?”
“主從,emmm悔雹,就是... 呃复哆,怎么跟你說呢,這是很簡單的概念嘛 ... ”
"什么腌零,很簡單的概念梯找,你意思是說,這么簡單的東西我都不懂咯莱没?"
“呃... ”,我感覺我要跪酷鸦,仿佛掛在懸崖邊上饰躲,靠臂力支撐著 ......
自我救贖
我不想今晚跪搓衣板、洗碗臼隔、洗衣服嘹裂,我的權(quán)游還沒看完汹来。
“是這樣的旭旭,很多東西嘛,一般人都不懂柑营,但只要懂了氨淌,就會覺得很簡單泊愧,比如說去日本旅游,怎么辦簽證盛正、怎么坐電車删咱、怎么和日本人溝通,沒了解之前豪筝,都覺得很難痰滋,但一旦做成了摘能,就很簡單∏媒郑”团搞,我在懸崖邊緣掙扎。
“嗯哼多艇,是這個道理~”
貌似已經(jīng)靠著臂力和背闊肌逻恐,把自己拉上去了,暫時安全了墩蔓。
“還記得咱們上次坐高鐵去長沙梢莽,在深圳北那排隊(duì)取票嗎?”
“記得呀~ ”
“嗯奸披,咱們?nèi)ト∑被杳燮碧幠抢铮泻芏鄠€窗口吧阵面,而且有的窗口上寫著轻局,只限取票,不能買票样刷÷仄耍”
“嗯嗯,是有這樣的置鼻≌蛞”
“好,現(xiàn)在我們把這個高鐵站售票窗口的模型簡化一下箕母,我們假設(shè)储藐,一開始,只有一個窗口嘶是,既負(fù)責(zé)售票钙勃,又負(fù)責(zé)取票,你覺得會有什么問題聂喇?”
“那會很煩吧辖源,像咱們這種在網(wǎng)上買票,到了那再取票的希太,估計(jì)得取好久克饶。只有一個窗口,全部人都擠在一塊了誊辉⊥罚”
“沒錯,這是只有一個窗口帶來的第一個問題:擁擠芥映≈拮穑”
“還有別的問題远豺?”
“是的,你想想看坞嘀,假設(shè)負(fù)責(zé)這個窗口的員工尿急躯护,想去上廁所,或者這個窗口的電腦壞掉了丽涩,用不了棺滞,怎么辦?”
“噢矢渊,那這時候就一張票也賣不了继准,一張票也取不了“校”
“嗯嗯移必,這個叫SPOF,Single Point of Failure毡鉴,意識是系統(tǒng)里一個節(jié)點(diǎn)的故障崔泵,導(dǎo)致整個系統(tǒng)都不可用≈硭玻”
“Soga憎瘸,長見識了〕率荩”
“嗯哼幌甘,那么,這時候痊项,假設(shè)你是高鐵站的站長锅风,你會怎么做?”
“呃线婚,我得請更多的員工遏弱,開多幾個窗口盆均∪祝”
“沒錯,我們再加多幾個窗口泪姨,現(xiàn)在就不怕有哪個窗口游沿,因?yàn)閱T工尿急或者電腦壞掉而不能提供服務(wù)了,如果無法服務(wù)肮砾,讓排隊(duì)的乘客去其他窗口就好了诀黍。”
“666仗处,那這樣就既解決了SPOF眯勾,又解決了擁擠問題啦~ ”
“哈枣宫,你都會用軟件術(shù)語來描述生活問題了。SPOF是肯定解決了吃环,但是擁擠嘛也颤,還可以再繼續(xù)優(yōu)化的~”
“咋優(yōu)化?”
“你看郁轻,現(xiàn)在各個窗口翅娶,都是既可以買票,又可以取票的好唯,但是常識告訴我們竭沫,人均買票花費(fèi)的時間,要遠(yuǎn)大于人均取票的時間骑篙。”
“啊蜕提,對,要是這條隊(duì)替蛉,前面一百個人都是買票的贯溅,但是我一個取票的過來了,排到隊(duì)尾躲查,那就得奔潰... ”
"是的它浅,所以我們可以優(yōu)化下,讓其中兩個窗口镣煮,既可以買票又可以取票姐霍,或者干脆就只讓它們可以買票,這些典唇,我們叫做Master镊折,然后再按需要加多幾個窗口,這幾個窗口介衔,只能取票恨胚。因?yàn)樗麄兪菫榱私o Master 們減輕負(fù)擔(dān),所以我們叫它們 Slave炎咖,這個用軟件的術(shù)語來描述赃泡,就是讀寫分離"
“Wow!原來 Master-Slave 是這樣個意思~ ”
“其實(shí)乘盼,很多軟件設(shè)計(jì)的想法升熊,都可以在生活中找到影子,軟件設(shè)計(jì)也是一門“仿生學(xué)”绸栅。比如剛開業(yè)的小店级野,可能員工都不多,但是一旦生意上去了粹胯,就會招更多的小弟過來蓖柔,因?yàn)橐坏╊櫩拖朦c(diǎn)菜或者買單時辰企,找不到服務(wù)員,是很影響心情和體驗(yàn)的况鸣。軟件也是這樣蟆豫,只放一臺機(jī)器在那,一旦這臺機(jī)器忙不過來懒闷,就會表現(xiàn)為網(wǎng)頁發(fā)來的請求十减,響應(yīng)很慢,同樣影響訪客的體驗(yàn)和心情愤估,訪客點(diǎn)個按鈕帮辟,半天沒響應(yīng),那他們可能就把這個網(wǎng)站拉黑了玩焰∮删裕”
“Wow,可以可以昔园,很6嘛~ ”
我仿佛已經(jīng)從懸崖邊上撐了起來蔓榄,迎著早晨的陽光,大步往回走 ......
非程序員請就此止步默刚,程序員請繼續(xù)往前走……
對程序員的話
這篇文章用了售票窗口來類比機(jī)器甥郑,解釋什么是 Master-Slave,什么是SPOF荤西,什么是讀寫分離澜搅。
要說這兩者最大的不同,那就是售票窗口并不是數(shù)據(jù)源邪锌。
即我們查詢數(shù)據(jù)時勉躺,不會直接從售票窗口查詢,而是售票窗口里的服務(wù)員觅丰,用電腦再去查數(shù)據(jù)饵溅。
而機(jī)器呢,很多機(jī)器本身就是數(shù)據(jù)源妇萄,比如Mysql蜕企,請求過來后,它們直接從自己身上拉數(shù)據(jù)嚣伐,返回出去糖赔。這樣就要求不同機(jī)器上的數(shù)據(jù)萍丐,必須要一致轩端,不能客戶從機(jī)器A查詢,得到結(jié)果是“aa”逝变,從機(jī)器B查詢基茵,得到結(jié)果卻是“bb”奋构,所以就需要當(dāng)數(shù)據(jù)寫入 Master 時,把數(shù)據(jù)同步給 Slave拱层,這就是「主從復(fù)制」弥臼。
「主從復(fù)制」期間,Slave的數(shù)據(jù)會和Master不一致根灯,這是「主從延遲」径缅。
由于「主從延遲」的存在,當(dāng)Master宕機(jī)時烙肺,你要優(yōu)先保證「數(shù)據(jù)強(qiáng)一致性」還是「服務(wù)可用性」纳猪,這就是「主從切換」時要考慮的問題了。
如果你看了這篇文章桃笙,還想深入了解 「主從復(fù)制」氏堤、「主從延遲」和「主從切換」是怎么回事 ,可以看我之前寫的:Mysql Replication 簡明教程