[译]基于容器的分布式系统设计模式sangmado

名称:Designpatternsforcontainer-baseddistributedsystems

作者:BrendanBurns,DavidOppenheimer,Google

发布:HotCloud'16:Proceedingsofthe8thUSENIXConferenceonHotTopicsinCloudComputing,June2016

在20世纪80年代末期和90年代早期,面向对象编程彻底改变了软件的开发方式,使用模块化的组件进行应用程序构建变得更为普遍。时至今日,我们看到分布式系统开发也在进行着类似的变革,基于容器化软件组件构建的微服务架构正在变得越来越流行。容器,依赖其在容器化领域内创立的多重优点,已经成为分布式系统构建的基础"对象"。随着架构风格的成熟,我们也看到了设计模式的涌现,就像我们在面向对象编程时一样,出于对细粒度代码细节的封装抽象,最终揭示了在各种应用程序和算法中相通的更高级的设计模式。

这篇论文描述了我们在基于容器构建的分布式系统中识别出的三种类型的设计模式:用于容器管理的单容器模式,多容器紧密协作的单节点模式,用于分布式算法的多节点模式。就像面向对象设计模式一样,这些为分布式计算而生的设计模式引入了最佳实践,简化了代码开发,并提升了使用它们的系统的可靠性。

设计模式的涌现和文档化,是在面向对象编程被使用多年之后才发生的。这些设计模式将一些常规编程问题的解决方法进行了代码化和规范化,而这些编码规约更进一步地改善了行业的编程水平,因为它使得经验不足的程序员也可以输出高质量的代码。同时,可复用的类库机制也使得代码越来越可靠,开发速度也比以往变得更快。

现如今,分布式系统软件工程的最先进技术,看起来更像是20世纪80年代早期编程的模样,而不像是后期的面向对象软件开发。这其中的一个成功案例就是MapReduce模式。MapReduce模式将大数据编程的力量引入至广阔的应用领域和开发者群体,将正确的模式应用在合适的位置,极大地改进了分布式系统的质量、速度和可访问能力。尽管如此,MapReduce的成功仍然受到了单一编程语言的限制,截至目前ApacheHadoop生态系统仍主要是由Java语言编写。所以,为分布式系统设计开发一套真正全面的模式,需要一套非常通用的、与语言无关的工具来表述系统中的元素。

万幸的是,最近两年Linux容器技术兴起并取得了广泛的采用。容器与容器镜像完美的满足了开发分布式系统中模式的抽象需求。迄今为止,容器和容器镜像已被广泛的验证,成为从开发至生产过程中交付软件的更好更可靠的方法。依靠紧密的封装,依赖自治,原子部署与成败标记等功能,其显著地改进了老式的云与数据中心应用部署方式。然而,除了在部署工具方面表现出色,实际上容器还有巨大的潜力,我们相信它注定可以成为类似对象在面向对象编程中的地位,并将推进分布式系统设计模式的发展。在接下来的章节中,将解释为什么我们相信这是必然的,并描述在未来的若干年中,已涌现出并常规化指导分布式系统软件工程设计的设计模式。

容器为接口定义提供了天然的边界,就像对象的边界一样。容器不仅可以暴露应用级别的功能,也可以通过接口回调为管理系统服务。

传统的容器管理接口都是极其有限的,一个容器一般仅暴露三个原语:run(),pause(),stop()。尽管这些接口用途很大,但更丰富的接口可以赋予系统开发和运维人员更多的管理功能。同时,目前几乎每种现代编程语言均支持基于HTTP的Web服务,而且支持类似JSON等的通用数据格式,通过使用容器托管Web服务器并指定端点,不仅可以暴露主要功能,更使得定义基于HTTP管理的API成为可能,

再举个复杂生命周期的例子,比如Android系统中的Activity模型,它支持一系列的回调接口和一个用于定义系统该如何触发这些回调的状态机。如果没有这些生命周期定义,开发鲁棒的、可靠的Android应用程序将变得难上加难。而在基于容器的系统上下文中,通常会定义一系列的回调钩子,以便在容器创建、启动、终止时进行调用。另一个关于南向接口API的例子是容器对"自我复制"机制的支持,以便对服务进行扩展。

除了单个容器的接口之外,我们还可以看到跨容器设计模式的涌现。之前我们已经确定了几个这样的模式。这些单节点模式由共生容器组成,它们被共同调度到同一台主机上。容器管理系统支持将多个容器作为一个原子单元进行协同调度,Kubernetes将此抽象为"Pods",而Nomad则将其抽象为"taskgroups",这也是本节中描述的模式所必需的特性。

边车模式是首个也是最常见的多容器部署模式,边车扩展并增强了主容器。例如,主容器可能是一个Web服务器,它可以与一个能够从本地磁盘收集Web服务器的日志"logsaver"边车容器配合,并将日志发送至存储系统集群。图1展示了边车模式的一个示例。另一个常见的示例是一个基于Web的本地磁盘内容服务器,这些内容由边车容器填充,边车容器定期对Git仓库、内容管理系统或其他数据源的内容进行定期同步。这两个例子在Google内部应用中都很常见。在同一机器上的容器可以共享同一个本地磁盘卷,也使得边车机制成为可能。

当然,尽管也可以将边车容器的功能构建到主容器中,但是使用独立容器有几个好处。

请注意,以上五个优点适用于本文后续部分中描述的所有容器模式。

我们观察到的下一个模式是大使模式。大使容器代理了与主容器之间的通信。例如,开发人员可能将使用memcache协议的应用程序与twemproxy大使进行搭配。应用程序认为它只是与本地主机上的单个memcache进行交互,但实际上twemproxy则将分片请求转发至在其他地方安装的分布式memcache集群节点上。

这个容器模式在三方面对程序员的开发过程进行了简化:他们只需要思考和编写应用程序连接到一个在本地主机上的服务器,他们可以通过在本地机器上运行一个真正的memcache实例而非大使来对应用程序进行独立测试,他们可以在其他应用程序中复用twemproxy大使,甚至可以是不同的编程语言。因为同一机器上的容器共享相同的本地主机网络接口,方使得大使模式成为可能。图2展示了此模式的一个示例。

除了在一台机器上互相协作的容器外,模块化的容器使得构建协调的多节点分布式应用程序变得更加容易。接下来,我们将描述其中的三种分布式系统模式。与前一节中的模式类似,这些模式也需要系统对Pod抽象的支持。

分布式系统中最常见的问题之一就是领导者选举。通常实例副本用于在一个组件的多个相同实例之间共享负载,但应用程序副本的另一个更复杂的使用场景是需要将一个"领导者"副本与其他副本区分开来。如果当前领导者副本故障了,则其他的副本需要迅速的进行取代。系统甚至可以并行地进行领导者选举,例如,多个分片均需要确定领导者。

有许多类库可以进行领导者选举,它们通常很复杂,也难以正确理解和使用。此外,它们还受到使用特定编程语言实现带来的限制。一种替代的方案就是将领导者选举机制从应用程序中剥离至领导者选举专属容器中。提供一组领导者选举容器,它们中的每个容器都与需要进行领导者选举的应用程序共同调度,则可在这些领导者选举容器之间执行选举。同时,它们可以在localhost上为需要进行领导者选举的应用程序容器提供一个简化的HTTPAPI(例如,becomeLeader、renewLeadership等)。这些领导者选举容器可以由这个复杂领域的专家进行构建,然后不管应用程序开发人员选择何种编程语言,都可以复用其简化的接口。这种方式代表了软件工程中最好的抽象和封装过程。

尽管工作队列模式,也包括领导者选举模式,已经是被研究得很深入的课题,并且有许多框架也实现了它们,但这些分布式系统设计模式仍然是可以在面向容器的系统架构中获益。在以往的系统中,应用程序框架限制了项目的单一开发语言环境(如Python中的Celery),或者任务分发和二进制执行已与实现者脱离(如Condor)。

容器针对run()和mount()接口的实现,使得实现一个通用的工作队列框架变得简单直接,可以将任意的处理代码打包成一个容器,与任意数据,构建成一个完整的工作队列系统。开发人员只需要构建一个容器,可以从文件系统接收一个数据文件,并将其转换为一个输出文件;这个容器还可以作为工作队列的一个阶段来使用。所有其他的涉及开发一个完整的工作队列的工作均可由通用工作队列进行处理,并可在任意时刻进行复用。用户代码集成到这个工作队列共享框架的方式如图4所示。

最后一个我们要着重介绍的分布式系统涉及模式是分散/收集模式。给定一个系统,一个外部客户端向"根"或"父"节点发送一个初始请求,这个"根"节点将请求分发给大量服务器以执行并行计算,每个服务器分片均返回部分数据,然后"根"节点再将这些数据收集到原始请求的单个响应中。这种设计模式在搜索引擎中很常见。开发这样一个分布式系统需要大量的样板代码:分散请求、收集响应、与客户端交互等,而这些代码在面向对象编程中是完全通用的,重复的。通过容器化的方案来进行重构,当客户端发起请求至"根"容器时,按照开发人员的设计,请求被扇出至叶子容器集群中,开发人员再指定一个容器负责结果集的收集和聚合。

具体的说,实现分散/收集系统,用户需要提供两类容器。首先,一类容器实现叶子节点计算,这个容器执行部分计算并返回相应的结果。第二种容器是合并容器,这个容器需要汇总所有叶子容器的计算结果,并组织成一个单一的响应后输出。很容易看出用户可以实现任意深度的分散/收集系统,只需提供已实现这些相对简单的接口的容器即可。这样一个系统如图5所示。

我们在第5节中提到的所有分布式系统设计模式都有很长的历史。你可以在Github上找到许多领导者选举模式的实现,尽管它们看起来像是类库而不是独立的组件。也有许多流行的工作队列实现,包括Celery和AmazonSQS。分散/收集模式已被识别为一种企业级系统集成模式。

正如面向对象编程引出了面向对象"设计模式"和代码范式,我们也看到基于容器的架构也引出了基于容器的分布式系统设计模式。在本文中,我们识别了三种类型的模式:用于系统管理的单容器模式、用于容器间紧密协作的单节点模式和用于分布式算法的多节点模式。在这些模式中,容器提供了许多与面向对象系统中的"对象"相同的益处,例如可以方便地在多个团队之间划分应用实现,在新的上下文中复用组件等。此外,它们还为分布式系统提供了一些独特的好处,比如可以独立地升级组件,可以用多种语言编写组件,还可以让整个系统优雅地降级。我们相信,容器模式将会持续不断的扩充,在未来的几年里,就像面向对象编程在几十年前所做的那样,通过对分布式系统开发的标准化和规范化,它们将带来分布式系统编程的革命性变化。

想法不会凭空出现在我们的脑海里,本文的工作受到了BrianGrant、TimHockin、JoeBeda和CraigMcLuckie深深地影响。

THE END
1.为什么如今翻译软件越来越流行?随着全球化进程的推动,使得跨国交流变得越来越普遍,人们需要进行不同语言之间的交流,而翻译软件便可以https://www.zhihu.com/question/528107918/answer/3035094710
2.GitHubakiritsu/cslearningFlutter 是Google 开发的一个开源UI软件开发工具包,用于从单一代码库开发跨平台的移动、Web 和桌面应用。Flutter 使用 Dart 语言,支持快速的开发周期和富动画的 UI 设计,近年来在跨平台移动和桌面应用开发中变得越来越流行。 此条目涉及的技术、工具和框架多而繁杂,因而无法给出推荐课程和书目,请善用搜索引擎、在线网https://github.com/akiritsu/cs-learning-map
3.哪个工具可以图片翻译在线?答案就在这6个图片翻译软件使用评价:大家反馈对于亚洲语言如韩语、日语等的翻译准确性很高,翻译后的文字排版合理,方便阅读和理解,软件的更新频率也较高,不断优化翻译功能。好啦,这6款图片翻译在线工具的介绍就分享到这!别再对着满屏外文干瞪眼啦,赶紧下载试试,解锁轻松看懂外文图片的小妙招,往后遇上图文难题,一键翻译搞定,越用越省心https://baijiahao.baidu.com/s?id=1817654258659318517&wfr=spider&for=pc
4.“2024年十大流行语”公布!看看英文怎么翻译~如今,社会越来越注重孩子个性发展和综合素质培养,孩子们获得了更多机会发挥潜能,也获得了更多支持和肯定。 ▲7月28日,中国选手崔宸曦在比赛中。新华社记者 朱峥 摄 “语言是社会的一面镜子,”《咬文嚼字》杂志主编黄安靖说,“今年流行语折射出的时代特征十分https://mp.weixin.qq.com/s?__biz=MzU4NTU4Mjc1NA==&mid=2247546015&idx=1&sn=32dba685b91e507061ce2bff8c48f1a1&chksm=fc508f962ee5ea0c440fef122fb56625badc06a1519cf7aaed14ddf6313f20312488874f4137&scene=27
5.一月2010AdSense中文博客已经发布了一则公告,标题是:“Google AdSense引起杀毒软件报警问题的反馈”,称“AdSense 中文小组今天陆续收到一些用户关于Google AdSense代码引起杀毒软件报警的反馈,目前我们正在与相关方进行沟通,争取使问题尽快得以解决”。AdSense英文博客至今未有说明。 https://info.williamlong.info/2010_01_01_archive.html
6.中英翻译器在线翻译软件有哪些免费好用的中英翻译器APP推荐随着全球化的加速发展,跨语言沟通变得越来越重要。然而,语言障碍仍然是一个常见的问题。为了解决这个问题,各种在线翻译APP应运而生,其中最受欢迎的是中英翻译器在线翻译APP。今天小编就为大家推荐一些免费好用的中英翻译器APP,如果你也想知道中英翻译器在线翻译软件有哪些,就快来下载喜欢的软件吧! https://www.mckuai.com/zt/zhongyingfanyiqi/
7.电影自动翻译字幕看电影自动翻译的软件(23篇)自动翻译技术利用机器学习和自然语言处理等先进技术,可以快速准确地将一种语言翻译成另一种语言。在英文电影字幕翻译领域,自动翻译技术的应用已经变得越来越普遍。通过自动翻译,观众可以在不同语言之间自由切换,极大地方便了跨语言观影的需求。 除了提高翻译效率之外,自动翻译技术还可以大大提升字幕翻译的质量。传统的人工https://shishifanyi.com/tag/?url=1253
8.变得越来越流行的翻译是:什么意思?中文翻译英文,英文翻译中文变得越来越流行问题补充:匿名 2013-05-23 12:21:38 Becoming increasingly popular 匿名 2013-05-23 12:23:18 becoming more and more popular 匿名 2013-05-23 12:24:58 Becomes more and more popular 匿名 2013-05-23 12:26:38 Becoming more popular 匿名 2013-05-23 12:28:18 http://www.zaixian-fanyi.com/fan_yi_2240785
9.已经变得越来越流行,这是有原因的。的英文翻译英语怎么说海词词典,最权威的学习词典,专业出版已经变得越来越流行,这是有原因的。的英文,已经变得越来越流行,这是有原因的。翻译,已经变得越来越流行,这是有原因的。英语怎么说等详细讲解。海词词典:学习变容易,记忆很深刻。http://dict.cn/%E5%B7%B2%E7%BB%8F%E5%8F%98%E5%BE%97%E8%B6%8A%E6%9D%A5%E8%B6%8A%E6%B5%81%E8%A1%8C%2C%E8%BF%99%E6%98%AF%E6%9C%89%E5%8E%9F%E5%9B%A0%E7%9A%84%E3%80%82
10.词汇手册翻译完整整理版191.因为缺乏资金,他们只好放弃__那个软件(give 2.男士一般不擅长购物时和店主讨价还价(good 3.乘车时你有主动给老人让座的习惯吗?(habit 4.他刚到家,4.MP3如今很流行主要因为从网上下载歌曲很方便__inly 5.方便的地理位置使得这家快餐店越来越受到大家的欢迎__ke 5.17这座老房子作为博物馆而受到保护preservhttps://www.yxfsz.com/view/1394757421113065473
11.analysis,miningandapplications2019翻译事实证明,合作继续影响研究实践和知识生产,在不同学科中越来越流行(Uddin等人,2013)。协作在几乎所有学科中都变得越来越普遍。此外,随着信息技术、交通运输和通信的发展,科学家不再需要在同一地点,科学合作可能跨越大学边界(Jones et al.,2008),甚至跨越国家边界(Wilsdon et al.,2011)。学者们根据合著者网络研究合作https://cloud.tencent.com/developer/article/2093707
12.了解中国全部行业和岗位,这一篇就够了!猿生活翻译 法官 保安 花匠 服务员 清洁工 建筑师 理发师 采购员 设计师 消防员 机修工 推销员 魔术师第一:软件工程师 月收入万元以上 上榜理由:作为职场中的常青树——软件工程师仍将是人才市场上的热点上榜理由:随着奥运概念和世博概念的渐渐清晰,房产业越烧越热。未来4到5年北京市将投资2800亿元用于奥运https://ac.nowcoder.com/discuss/438486?channel=-1&source_id=discuss_terminal_discuss_sim_nctrack
13.国外的社交号软件怎么设置中文在全球信息化的大潮中,聊天应用软件的使用越来越普遍,其中(社交号)和WhatsApp是用户shouxuan的两大平台。对于非英语用户而言,使用这些软件时可能会遇到语言障碍。本文将围绕“国外的社交号软件怎么设置中文”这一主题展开,深入分析社交号APP如何实现中文设置,以及如何将其翻译成中文,从而为使用者提供更好的用户体验。我https://shantou.11467.com/info/31972536.htm
14.theinternet英语作文附翻译(通用31篇)随着科技的发展,互联网变得越来越流行。谈及这一现象时,人们对于这个问题的态度差异很大。有人坚持认为上网有很多优点。与此相反,有人认为互联网给人们带来了很多的缺点。就我个人而言,我同意前者的观点,因为我觉得它的优点多于缺点。 First of all, internet is so amazing that many people are easily indulged https://www.ruiwen.com/zuowen/qitaleiyingyuzuowen/377125.html
15.搜狗旅行翻译宝app下载搜狗旅行翻译宝app安卓版下载现在出国旅行的小伙伴们越来越多了,那么对于语言不通的小伙伴们来说,一款好用的翻译软件是必不可少的搜狗旅行翻译宝APP软件能够为用户提供强大的语言翻译功能,实时翻译让用户的沟通再无障碍,是一款实用的语音翻译软件,有需要的小伙伴赶快来非凡软件站下载吧! https://www.crsky.com/soft/223073.html
16.一文读懂WWDC20:苹果自研Mac芯片正式亮相,iOS14界面大改这次的iOS 14,给人最大的感觉就是整体越来越“安卓化”,更详细的说就是带来了更多的可定制性以及更丰富的功能性。无论是App资源库、还是桌面小部件、画中画、以及类似“微信小程序”理念的App Clip等,都让我们看到了最近几年安卓与iOS两大系统互相借鉴、互相学习的趋势。 https://www.36kr.com/p/763447843072516
17.解析软件本地化翻译中的语言风格调整通过合理的策略和方法,充分考虑各种影响因素,解决常见问题,能够使翻译后的软件在目标市场中展现出良好的语言风格,提高软件的竞争力和用户满意度,从而实现软件本地化的成功。随着全球化的不断推进和软件行业的迅速发展,对软件本地化翻译中语言风格调整的研究和实践将越来越重要,也将不断面临新的挑战和机遇。https://www.chinapharmconsulting.com/cn/hy_zs/3552.html
18.长沙翻译公司专业语言翻译服务商国际认证翻译省级翻机构企业不要选择在线翻译与翻译软件应该选择翻译公司更专业更有保障 企业不要选择在线翻译与翻译软件应该选择翻译公司更专业更有保障相关小标题:在线翻译公司,在线专业翻译公司, 在线翻译哪家好, 在线翻译哪家专业 ,在线翻译找哪家比较好,长沙在线翻译公司,湖南在线翻译公司,在线翻译哪家强 目前,翻译行业经历了最辉煌的时期https://www.hnjjfy.com/
19.高考英语整句翻译汉译英训练500题(含答案解析).pdf翻译句子 162.随着时间的推移,这个国家变得越来越强大。(as引导的时间状语从句) 163.我们几年前买的冰箱坏了,但我们没钱换掉它。(replace) 16.昨天你给我打电话的时候我正准备去图书馆。(when) 165.我第一次遇到他的时候,他正在看书。(thefirsttime) 166.父母应该给孩子买太阳镜,因为在炎热的天气里保护眼睛https://max.book118.com/html/2024/0410/7165131145006063.shtm