如何给老婆解释什么是 Master-Slave
以下文章来源于柳树的絮叨叨 ,作者靠发型吃饭的柳树
本文公众号来源:柳树的絮叨叨 作者:靠发型吃饭的柳树
这个作者我在知乎关注很久啦,之前看他的Spring系列、给老婆解释什么是RESTful,十分有趣!这篇文章是他新发表的,我看了觉得非常不错,给大家分享一下!
(我之前的文章”给女朋友讲解xxx“的也是借鉴他的风格 haha)
一天,阳光明媚,天朗气清,正是春游的好日子。
我在家中躺着看权游,老婆在一旁,翻阅着书架上的书。
和往常一样,她在看到一本技术书时,阅读速度骤降下来,我知道她又要对我进行灵魂拷问了。
小命不保
“嘿,发现了一个现象。”,老婆说,手中拿着的书,是《高性能Mysql》。
“嗯哼。”,我故作镇定。
“你们每本技术书,讲到最后,都要讲一个叫 Master-Slave 的东西。”
“你是说主从?”
“主从是个啥子?”
“主从,emmm,就是... 呃,怎么跟你说呢,这是很简单的概念嘛 ... ”
"什么,很简单的概念,你意思是说,这么简单的东西我都不懂咯?"
“呃... ”,我感觉我要跪,仿佛挂在悬崖边上,靠臂力支撑着 ......
自我救赎
我不想今晚跪搓衣板、洗碗、洗衣服,我的权游还没看完。
“是这样的,很多东西嘛,一般人都不懂,但只要懂了,就会觉得很简单,比如说去日本旅游,怎么办签证、怎么坐电车、怎么和日本人沟通,没了解之前,都觉得很难,但一旦做成了,就很简单。”,我在悬崖边缘挣扎。
“嗯哼,是这个道理~”
貌似已经靠着臂力和背阔肌,把自己拉上去了,暂时安全了。
“还记得咱们上次坐高铁去长沙,在深圳北那排队取票吗?”
“记得呀~ ”
“嗯,咱们去取票,售票处那里,有很多个窗口吧,而且有的窗口上写着,只限取票,不能买票。”
“嗯嗯,是有这样的。”
“好,现在我们把这个高铁站售票窗口的模型简化一下,我们假设,一开始,只有一个窗口,既负责售票,又负责取票,你觉得会有什么问题?”
“那会很烦吧,像咱们这种在网上买票,到了那再取票的,估计得取好久。只有一个窗口,全部人都挤在一块了。”
“没错,这是只有一个窗口带来的第一个问题:拥挤。”
“还有别的问题?”
“是的,你想想看,假设负责这个窗口的员工尿急,想去上厕所,或者这个窗口的电脑坏掉了,用不了,怎么办?”
“噢,那这时候就一张票也卖不了,一张票也取不了。”
“嗯嗯,这个叫SPOF,Single Point of Failure,意识是系统里一个节点的故障,导致整个系统都不可用。”
“Soga,长见识了。”
“嗯哼,那么,这时候,假设你是高铁站的站长,你会怎么做?”
“呃,我得请更多的员工,开多几个窗口。”
“没错,我们再加多几个窗口,现在就不怕有哪个窗口,因为员工尿急或者电脑坏掉而不能提供服务了,如果无法服务,让排队的乘客去其他窗口就好了。”
“666,那这样就既解决了SPOF,又解决了拥挤问题啦~ ”
“哈,你都会用软件术语来描述生活问题了。SPOF是肯定解决了,但是拥挤嘛,还可以再继续优化的~”
“咋优化?”
“你看,现在各个窗口,都是既可以买票,又可以取票的,但是常识告诉我们,人均买票花费的时间,要远大于人均取票的时间。”
“啊,对,要是这条队,前面一百个人都是买票的,但是我一个取票的过来了,排到队尾,那就得奔溃... ”
"是的,所以我们可以优化下,让其中两个窗口,既可以买票又可以取票,或者干脆就只让它们可以买票,这些,我们叫做Master,然后再按需要加多几个窗口,这几个窗口,只能取票。因为他们是为了给 Master 们减轻负担,所以我们叫它们 Slave,这个用软件的术语来描述,就是读写分离"
“Wow!原来 Master-Slave 是这样个意思~ ”
“其实,很多软件设计的想法,都可以在生活中找到影子,软件设计也是一门“仿生学”。比如刚开业的小店,可能员工都不多,但是一旦生意上去了,就会招更多的小弟过来,因为一旦顾客想点菜或者买单时,找不到服务员,是很影响心情和体验的。软件也是这样,只放一台机器在那,一旦这台机器忙不过来,就会表现为网页发来的请求,响应很慢,同样影响访客的体验和心情,访客点个按钮,半天没响应,那他们可能就把这个网站拉黑了。”
“Wow,可以可以,很6嘛~ ”
我仿佛已经从悬崖边上撑了起来,迎着早晨的阳光,大步往回走 ......
非程序员请就此止步,程序员请继续往前走……
对程序员的话
这篇文章用了售票窗口来类比机器,解释什么是 Master-Slave,什么是SPOF,什么是读写分离。
要说这两者最大的不同,那就是售票窗口并不是数据源。
即我们查询数据时,不会直接从售票窗口查询,而是售票窗口里的服务员,用电脑再去查数据。
而机器呢,很多机器本身就是数据源,比如Mysql,请求过来后,它们直接从自己身上拉数据,返回出去。这样就要求不同机器上的数据,必须要一致,不能客户从机器A查询,得到结果是“aa”,从机器B查询,得到结果却是“bb”,所以就需要当数据写入 Master 时,把数据同步给 Slave,这就是「主从复制」。
「主从复制」期间,Slave的数据会和Master不一致,这是「主从延迟」。
由于「主从延迟」的存在,当Master宕机时,你要优先保证「数据强一致性」还是「服务可用性」,这就是「主从切换」时要考虑的问题了。
如果你看了这篇文章,还想深入了解 「主从复制」、「主从延迟」和「主从切换」是怎么回事 ,可以看我之前写的:Mysql Replication 简明教程
乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,关注即可获取!
长按扫码可关注
推荐阅读: