共计 1620 个字符,预计需要花费 5 分钟才能阅读完成。
原文:http://book.mixu.net/distsys/…
译:祝坤荣
1. 高层面看分布式系统
分布式编程是通过应用多计算机来实现与单机算机雷同问题的艺术
任何计算机系统都须要解决以下两个根本工作:
- 存储
- 计算
分布式编程是通过应用多计算机来实现与单机算机雷同问题的艺术 – 通常这是因为这个问题曾经不适宜在单个计算机解决了。
对于分布式系统没什么是真正须要的。给你有限的金钱和有限的研发工夫,咱们不须要分布式系统。所有计算和存储都能够在一个神奇盒子中实现 – 你能够花钱请人为你设一个单点,极速与极牢靠的零碎。
尽管如此,只有极少数人有有限的资源。因而,须要找到真实世界老本与收益的平衡点。在很小规模时,降级硬件是个间接的策略。然而,当问题域规模变大时,你会达到一个点,此时硬件降级曾经不能帮你解决一个单个节点能解决的问题,或者解决这个问题老本极为昂扬。在那个点上,欢送你来到分布式系统的世界。
当初的事实是只有中档配置的商用硬件最有价值 – 保护的老本能够通过采纳可容错软件来升高。
高端硬件最次要的计算收益来自于它们能够用外部内存拜访来代替迟缓的网络拜访。高端硬件的性能劣势在须要在节点间进行大量通信的工作时非常受限。
http://book.mixu.net/distsys/…
上图引自 Barroso, Clidaras & Hölzle 的 https://www.morganclaypool.co…,当假如所有节点都应用对立的内存拜访模式时,高端硬件与一般商用硬件的性能差距会变小。
个别感觉上,填加新机器会线性增长零碎的性能和容量。但理论这是不可能的,因为实际上这取决于这些独立的计算机。数据须要被复制,计算工作须要被协调等等。这也是学习分布式算法是值得的 – 它们为特定的问题提供了无效的解决方案,其领导了什么是可行的,一个正确的实现能够破费最小的老本是多大,什么是不可能的。
本文关注的是分布式编程,而零碎则是世俗的然而商业上常见的:数据中心。比方,我不会探讨一个特定网络配置上的特定问题,或者一个共享内存畛域的问题。另外,关注点会关注在零碎设计畛域而不是优化某个特定设计 – 后者是个更特定畛域的问题。
咱们想要达到:可伸缩能力和其余好货色
我能看到,所有事件都是从解决规模大小开始的。
在规模很小时大部分事件都很简略 – 而当达到一个特定的规模后同样的问题则变得艰难起来,从流量或其余物理上的限度。举起一片巧克力很简略,举起一座山就很难了。数一个屋子里有多少人很简略,数一个国家里有多少人就很难。
所以事件都是从规模开始的 – 可扩大能力。按正式的说法,一个可伸缩的零碎中,当咱们从小变大,事件不应该在增长中变得更糟。这是另一个定义:
可伸缩(https://en.wikipedia.org/wiki… 是零碎,网络或处理器的一种能力,以一种牢靠的形式解决一直增长的工作量或能本人变大来适应这种增长。
那么什么是增长?实际上你能够通过任何形式来计算增长(人数,应用的电量等)。但有次要有以下三种须要关注:
- 数量伸缩:退出更多的节点能够让零碎线性增长;数据集的增长不应该导致提早的增长
- 天文上的伸缩:实践上能够通过多个数据中心来升高用户查问时的响应工夫,多个数据中心之间的提早能够以一种正当的形式解决。
- 管理员伸缩:填加更多的节点不应该减少管理员管理系统的老本(例如:管理员对机器量的比例)
当然,在真实世界的增长同时产生在很多不同的维度;每种指标只捕获了增长中的其中一些局部。
一个可伸缩的零碎能够在用户规模增长时继续满足需要。这外面有两个特定的相干畛域 – 性能与可用性 – 其也能够被通过多种形式来掂量。
本文来自祝坤荣 (时序) 的微信公众号「麦芽面包」,公众号 id「darkjune_think」
开发者 / 科幻爱好者 / 硬核主机玩家 / 业余翻译
转载请注明。
微博: 祝坤荣
B 站: https://space.bilibili.com/23…
交换 Email: zhukunrong@yeah.net