本文主要是介绍计算机科学中的“边际效益递减”理论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
计算机科学中的“边际效益递减”理论
边际效益递减,不仅仅是一个经济学词汇,在计算机硬件领域,也是这样的。
在经济学中,边际效益递减受人的心理影响,当消费某种物品时,开始的刺激一定大,从而人的满足程度就高,但不断的消费同一种物品,即同一刺激不断反复时,人在心理上的兴奋程度或满足必然减少。
在计算机科学中,不管是单机还是分布式集群,都存在一个问题:规模越大,维护成本越高。
在经济学中,导致这个结果的原因是人的心理。在计算机科学中,导致这个结果的原因是一些瓶颈。
经济学中的“不断消费同一种物品”,是物品的增加。对应到计算机科学中,是系统的扩展。
系统扩展能力
共享结构
当负载增加需要更强的处理能力时,最简单的办法就是购买更强大的机器(有时称为垂直扩展)。由一个操作系统管理更多的 CPU, 内存和磁盘, 通过高速内部总线使每个 CPU 都可以访问所有的存储器或磁盘。 在这样一个共享内存架构中, 所有这些组件的集合可看作一台大机器。
共享内存架构 的问题在千,成本增长过快甚至超过了线性:即如果把一台机器内的 CPU 数量增加一倍,内存扩容一倍,磁盘容僵加大一倍,则最终总成本增加不止一倍。并且由千性能瓶颈因素,这样一台机器尽管拥有了两倍的硬件指标但却不一定能处理两倍的负载。
共享内存架构能够提供有限的容错能力,例如高端的服务器可以热插拔很多组件(在不关闭机器的情况下更换磁盘,内存模块,甚至是CPU) 。但很显然,它仍局限于某个特定的地理位置, 无法提供异地容错能力。
另一种方法是 共享磁盘架构,它拥有多台服务器,每个服务器各自拥有独立的 CPU 和内存,然后将数据存储在可共享访问的磁盘阵列上, 服务器与磁盘阵列之间往往通过高速网络连接。这种架构多适用千数据仓库等负载,然而通常由千资源竞争以及锁的开销等限制了其进一步的扩展能力。
无共享结构
相比之下, 无共享架构(也称为水平扩展) 则获得了很大的关注度。 当采用这种架构时, 运行数据库软件的机器或者虚拟机称为节点。 每个节点独立使用本地的 CPU,内存和磁盘。 节点之间的所有协调通信等任务全部运行在传统网络(以太网)之上且核心逻辑主要依靠软件来实现。
无共享系统不需要专门的硬件, 具有较高的性价比。 它可以跨多个地理区域分发数据, 从而减少用户的访问延迟, 甚至当整个数据中心发生灾难时仍能继续工作。 通过云计算虚拟机的部署方式, 即便是没有 Google 级别规模的小公司, 也可以轻松拥有跨区域的分布式架构和服务能力。
共享结构 vs 无共享结构
几千台节点同时做一件事情的时候,它总要去共享一些东西,去协调一些东西。共享的方式可以是上述的内存/磁盘,也可以是网络。但我们通常将基于网络共享的架构称为“无共享架构”。
虽然分布式无共享体系架构具有很多优点, 但也会给应用程序带来更多的复杂性, 有时甚至会限制实际可用的数据模型。 例如在某些极端情况下,一个简单的单线程程序可能比一个拥有100多个CPU核的集群性能更好。 而另一方面, 无共享系统也可以做到性能非常强大。
从另一个角度理解分布式系统与CAP
参考:https://lvwenhan.com/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/498.html
分布式计算的本质
分布式系统的产生,来源于源于人们日益增长的性能需求与落后的x86架构之间的矛盾。
人们想办法利用网络和一大票便宜的PC机,通过一顿猛如虎的数学操作,来自己构建一个宏观上更强性能、更高负载能力的计算机,去替换掉昂贵的小型机、大型机。
单体服务器 VS 分布式计算:系统规模问题
分布式系统的设计,摆脱了单机昂贵的x86服务器,但没有摆脱冯诺依曼结构。原有的单机瓶颈,在分布式系统中仍然会存在。具体来看,
- 单体的计算机使用总线通信,总线成为数据传输速率的瓶颈。
- 基于网络的分布式计算,其本质是把网络当做总线,仍然不能摆脱节点间通信和协调时的数据传输瓶颈。
- 每一台机器相当于一个运算器加一个存储器
- master 节点就是控制器加输入输出设备
分布式计算的瓶颈
无论主从还是主备,整个系统的流量最终还是要落到一个特定的资源上。当然这个资源可能是多台机器,但是依旧无法解决一个严重的问题:系统规模越大,其本底性能损失就越大。因为要涉及到节点之间的通信和协调,要想让数百万节点一起运算,传递命令和数据的工作占据了绝大多数的运行时间。
分布式系统的性能问题可能表现为很多方面,但归根到底,是人们日益增长的性能需求和数据一致性之间的矛盾。一旦需要强数据一致性(Consistency),那就必然存在一个限制性能的瓶颈,这个瓶颈就是信息传递的速度(Availability)。
那么,信息传递速度的瓶颈在哪里呢?
所以说,当应用规模由单体拓展到分布式系统的时候,数据密集型应用设计的基本矛盾已经由“人们日益增长的性能需求与落后的x86架构之间的矛盾”转化成“人们日益增长的性能需求和数据一致性之间的矛盾”了。
但(就像CAP定理所说)新的矛盾是无解的。为什么说它是无解的呢?个人认为,信息传递的瓶颈最表层是人类的硬件制造水平决定的,再往底层去是冯·诺依曼架构决定的,再往底层去是图灵机的逻辑模型决定的。可是图灵机是计算机可行的理论基础呀,所以,还是怪这个熵增宇宙吧,既然我们这个宇宙是一个熵增宇宙,那么这个问题就无法解决。为什么规模越大维护成本越高呢,你也是个成熟的宇宙了,该学会自己把自己变成熵减宇宙了(狗头)。
这篇关于计算机科学中的“边际效益递减”理论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!