软件可扩展性:来自星巴克的经验

【编者按】本文作者 Weronika Łabaj 是Particular Software的开发人员。她专注于通过软件提供业务价值,探索新模式,应对挑战。在星巴克,她总是点中杯焦糖玛奇朵。

文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文:

星巴克通过扩展运营机制和劳动力,避免了较长的顾客等待时间。无独有偶,开发人员也可以这样做!

2004年,Gregor Hohpe发表了一篇很棒的文章——“Starbucks Does Not Use Two-Phase Commit.(星巴克不相信两阶段提交) ”当笔者在阅读时,突然想到自己大学时在星巴克的工作经历。多年以来,我逐渐意识到程序员也可以从这家著名咖啡连锁企业学到更多。

很多开发人员都想构建可扩展软件,但实际操作中却很难实现。当我们在处理各类任务时,经常会陷入某种陷阱,认为每项工作都同等重要,需要同等的资源,并应当根据预先定义的顺序同步完成。

事实证明其并非如此——至少在可扩展系统中并非如此,在星巴克也并非如此。

如何制作咖啡

在星巴克,制作咖啡涉及四个步骤。首先,顾客排队,在柜台点单,依据先到先服务原则。第二,员工(咖啡师)帮顾客下单,并接受付款。第三,开始准备饮品。第四,当饮品制作完成后,将其放在吧台上,并呼叫顾客姓名。

尽管整个模式听起来非常合理,但却很快会导致很长的队伍。一位员工在同一时间,只能处理一项任务,因此顾客在咖啡师按顺序制作饮品时,只能排队等候。如果想要服务更多的顾客,就需要扩展。我们来看看星巴克是如何做的。

扩展咖啡师

星巴克可以选择的扩展方式之一就是雇用“超级咖啡师”——非常能干,效率很高,非常聪明的咖啡师。 星巴克需要在他们的发展上投入巨资,优化他们工作的各个方面,不断提高他们的效率。在软件中,这种方案被称为向上扩展(垂直扩展)。

这种扩展的问题在于,员工的工作速度(和工作时间)是有限的。总有一天,即使是超级咖啡师也无法满足所有需求。一旦出现这种状况,顾客就会沮丧地离开店铺,可能再也不会回来。

同样的,我们优化软件的程度也是有限的。我们不可能买到200 GHz的CPU。即使最大的CPU是多核的,其每个芯片的最高速率也仅在3到4 GHz。

星巴克可以采取的另一种扩展方式,是改变工作结构,添加更多的普通员工,就如软件中的并行处理。当一位咖啡师接到订单后,另一位就开始准备。这样,第一位咖啡师就可以处理下一个订单,同时第一个订单在并行准备中。

你可能会认为,只有在需求量达到一定程度时,才应该考虑并行处理。事实上,并不是那么简单。不可能在我们需要的时候,就可以马上切换到并行处理。我们必须事先做好准备。

星巴克很清楚这一点。每开设一家新的门店,即便每个班次只有一位员工,但是并行处理的一切从一开始就准备好了。他们可以随时增添人手。

经验:如果我们构建的系统不支持并行处理,就无法轻易实现并行处理。

现在,让我们看看星巴克是如何实现这一切的。

从消息传递开始

如果你曾在星巴克点过咖啡,就会注意到杯子上的那些小框框里总是标有某些符号。这些符号是一种简写,帮助咖啡师快速了解饮品类型以及其它额外要求(例如奶油,奶泡等等)。

杯子,或者信息,是员工之间沟通的基础。它告诉咖啡师需要制作的饮品,而上面的符号提供饮品的细节。即使店内并不忙碌,而且只有一名员工服务顾客时,也仍然会在杯子上标注符号。

乍看起来,似乎有点多余。但是,如果突然有一大批顾客进入店内,那么后备员工能够马上提供帮助。无需任何额外的沟通,他们可以根据信息开始制作饮品。

经验:突然增长的需求并不可怕, 只要我们能够随时添加更多员工,进行分工。使用消息是方法之一。

分工解决

正如前文所述,整个咖啡制作流程可以由一位员工——即咖啡师完成。不过星巴克的默认流程则是由一位员工(即收银员)下单并接受付款,再由另一位员工(咖啡师)制作饮品。

通常来讲,整个流程中速度最慢的环节就是制作咖啡,这也正是为什么当店内很繁忙时,有多名咖啡师同时制作咖啡。他们往往会从一叠杯子中拿取杯子,平均分担任务。而这正是“Competing Consumers(竞争消费者)”模式的体现。

不过在某些场景下,这种方式也可能带来麻烦。举例来说,有三位咖啡师共同使用一台咖啡机与一台星冰乐机。有三位顾客点了咖啡,而第四位则点了一杯星冰乐。下订单的员工排列杯子,上面分别写有对应的符号。每位咖啡师拿取一个杯子准备制作饮品。第一位开始使用咖啡机制作饮品时,其他两位只能等待。

我们可以通过分工,来避免这种状况。一种方式就是对信息进一步细化,分类处理。例如,我们都知道星巴克会利用杯子上的信息来表示需要准备的饮品类型。但是,这套系统还区分热饮和冷饮:热饮使用纸杯,冷饮使用塑料杯。当我们接到三份热咖啡订单,然后再接到一份星冰乐订单时,我们有三个纸杯和一个塑料杯。第一位咖啡师从纸杯中拿取一个,并开始制作。第二位咖啡师看到咖啡机正在使用, 因此拿取塑料杯,使用星冰乐机器。这样,就有两杯饮品在并行制作了。

这种分工,使咖啡师拆分任务,并行完成,被称为“细分”。

经验:事实证明,细分是有效扩展策略的一个关键因素。并非所有的工作都需要同等水平的扩展。能快速完成的小型任务可由单一员工完成,而高需求,更耗时的任务可由多位员工共同完成。通过细分,我们能够对每个任务实现独立扩展。

并非每项工作都同等重要

星巴克成功的原因之一,是对其员工进行培训,让他们意识到记住常客的重要性。比如,每天早上,那个为他的团队购买两杯超大杯美式和两杯大杯拿铁的男士。还有,每周三,那位点中杯焦糖玛奇朵,并在店内坐上一个小时读书的女士。

如果咖啡师在周三看见这位“中杯焦糖玛奇朵女士”进入店内,他们就会在她还未到达柜台前开始准备她最爱的饮品。顾客什么也不用说,就获得了想要的饮品,肯定会很开心。收银员已经知道她要点什么饮品,就可以寒暄几句,然后接受付款。在付款完成前,她的咖啡已经准备妥当,放在吧台上了。

你可以无法想象,星巴克顾客中的常客比例非常高。为他们带来最佳体验是很重要的。通常,他们获得饮品的速度要快于其他顾客。这让他们感觉受到了重视,并鼓励他们继续前来,也为公司带来更多价值。

经验:某些任务较其它任务更为重要。通过将标准任务构建成可重用的,独立的模块,我们可以轻松地修改流程,为更有价值的任务提供更好的服务。

并不是所有的错误都值得预防

在以上所有示例中, 星巴克员工都需要在顾客获得咖啡之前,确认他们已经付款。为了确保这一点,咖啡师们可以在交付咖啡之前要求顾客出示小票。然而,事实上,他们没有这样做。

星巴克发现,很少有顾客会在没有付款的情况下,去领取饮品。他们的分析显示,让咖啡师专注于完成订单才最重点,而不是关心偶尔丢失的咖啡。 如果有人碰巧拿走了你点的咖啡(通常是无心的),咖啡师会准备一杯新的给你。

经验:要构建可扩展系统,我们必须接受某些无可避免的错误。要完全避免这些错误,代价太高。我们应该快速检测问题,当它们发生时,及时弥补。

总结

看似简单的制作咖啡四步曲,演变成了一个有趣的业务流程。那些看似独特和罕见的任务,却是业务中的必要因素。

突然增长的需求,或错误,每天都可能发生很多次。设计一个可以良好应对这些状况的系统,需要考虑各种常见的情况。通常,首先想到的模型不能够解决这些问题。另外,也还需要考虑意外情况。比如,取消订单。

从星巴克的例子可以看出,如果我们采用简单的方案,那么业务将无法扩展,为更多顾客服务。随着顾客数量的增加,我们的服务水平将不断下降,最终导致顾客不再访问。因此,我们必须改变工作方式,满足增长的需求。最后,构建的系统不仅技术上可以扩展,还可以随着业务流程不断扩展。

OneAPM 能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址:https://dzone.com/articles/what-starbucks-can-teach-us-about-software-scalabi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 示例怎么能够产生一幅艺术 github阅读效果更佳 假设我们有一幅大师的画作了,我们怎么能够提取出“大师作品”中的...
    小聪明李良才阅读 3,053评论 6 10
  • 媒介形式的实时性 媒介本身的特性,和人们对他的认知和投入程度。 比如邮件更异步、微信更实时、电话/面试最实时并专注...
    Stove3阅读 667评论 0 0
  • 在学习ACI营养师课程之前,我真的从未想过我自己的饮食习惯是不够科学合理的。甚至我一向还自诩非常饮食均衡、健康,每...
    小玉成长记录阅读 1,687评论 1 1
  • 一轮圆月静静地挂在空中,将如水的光芒洒落大地。他站在厨房门口,望着天空中的明月愣了愣。 “真的要这...
    白羊先生阅读 187评论 0 1
  • 从20岁一路走来,看着小伙伴考取一个个证书总是嗤之以鼻,没什么大不了,认为自己努力下也一定可以,也一定不会比他们差...
    梓璐阅读 227评论 0 1