从星巴克到分布式架构
--一个故事教你搞懂高并发、分布式
SingFun--
从前有这么一家咖啡店,名字叫星巴克,这家咖啡店刚开始,只有一个员工(大学学的是咖啡学,硕士学位),这名员工每天的工作既担任收银员,又进行调制咖啡
假如有一天这名员工病了,,好家伙,,收银工作和调制咖啡工作都没法干了,,那就莫得了,所以,这两项工作要解耦(耦:古代指的是两人并肩而耕地,一个不耕了,好家伙,这地就没法耕了),解耦就是你调咖啡的工作不会影响到我收银的工作,怎么做呢,再招一个员工当收银员,原先那个员工专职做咖啡师,这样就完成了系统解耦(即收银和调配咖啡那个工作互不干扰)。
系统解耦之后,当咯里咯当,小店又开始进行营业了,开始经营的模式是什么呢,就是收银员打印一个订单等待咖啡师调制好之后,才进行下一个打印单,那排队的客户不干了,一看前面有那么多人,我要一个一个等,我需要排队到什么时候,流失了很多客户,后来调整了一下策略,就是使用队列思想,来一个订单我打一个来一个订单我打一个,先让顾客拿着单子心里有一个安慰:我的咖啡正在制作,这时候发现有的乘客又开始抱怨了,我先来的为什么最后一个拿走咖啡,你客户体验度差,那客户也就Loser了,后来收银员进行了把客户订单进行队列存储,交给咖啡师进行顺序调配,即先来先配制,这就是消息队列的作用:提高系统响应速度,顺序处理,削峰
后来的后来。随着生意的火爆,仅有的一名咖啡师日夜劳作,废寝忘食,食不果腹,腹背受敌,敌我不分,身体扛不住了倒下了,这时候考虑到业务的增加,人手也应该增加,,于是老板又招了一个咖啡师,两个咖啡师同时工作,提高了工作效率,,随着生意的火爆,顾客又开始抱怨了,我在这拿着单子等了一个小时还没等到,麻烦给我退了吧,这时候老板又招了5个咖啡师,这一共七个咖啡师组成了集群,(集群:同一个业务部署在多台机器上,提高系统可用性)提高了系统的处理速度,后来收银员也由于不堪重负,就随风而去了,,于是老板痛改前非,非常抱歉的又招了5个收银员,这5个收银员组成了什么?同志们(集群),后来呢由于小店只有一个排队打单的通道,排队很长,都到大门外了,既不美观,也影响后面收银员的工作,这样又遗失了一部分客户,怎么做呢,再开一个通道,配一套收银,配咖啡的,,这两套组成什么(群体集群),
然后呢,老板又发现了一个问题,一个咖啡师要完成兑水,兑咖啡的工作,兑糖的一系列工作,看起来有点慢,老板继续把这个咖啡的过程细化 ,兑水的 对咖啡的,兑糖的业务由三个咖啡师分别完成,这就是分布式的特点(统一业务进行拆分,本来3个小时完成的,现在只需要一个小时,为什么要一个小时,你想哈,三个人一起往一个桶里灌水快,还是一个人往桶里灌水快,很显然易见嘛,理想情况下哈)
随着业务的发展,老板又开了5个通道,为了防止资源的过度浪费,,老板在门口弄了一个总的进入通道,这个通道有什么特点呢,他可以根据里面引导购买者平均分配到各个购买通道(比如一共5个通道,10个人,第一个进来的去一号购买通道,第二个进来的去二号购买通道,,依次,第六个进来的进那个通道?,当然是去一号购买通道,了)这个就是我们用的负(承担的意思) 载均衡器的作用,即使均匀分配,这时候老板发现还是有的通道处理的很快,有的通道处理的很慢(同样的订单下),这时候调整负载均衡器权重,给处理快的通道分配更高的权重,即多分配一些资源,当然他们的工资也会相应增加,
然后呢又出现了有一个问题,来一一个单子 有的要糖,有的不要糖,有的不要兑咖啡,有的要兑咖啡,每次都同时调动三个业务,兑水,对咖啡,堆糖,每个人员都需要看一眼这个订单要不要兑咖啡,要不要兑水,人员调配有点乱,老板设置了一个消息分发总线 ,兑水系统,兑咖啡系统,兑糖系统,设置了一个,这个单子要兑水,兑糖,发给消息分发总线中间件,把那个兑水的,兑糖的系统同时调出来,用哪个调哪个,这就是消息中间件(系统化进行资源统一调配,统一管理)的作用
从本篇文章可以到:集群,分布式,消息队列,消息分发总线,负载均衡器
下面给出概念 集群:同一个业务部署在多台机器上,提高系统可用性
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
转载自原文链接, 如需删除请联系管理员。
原文链接:一个故事教你搞懂高并发 、分布式 (从星巴克到分布式架构),转载请注明来源!