什么是分布式系统(通俗易懂)

最近做了一些分布式的项目,但还没有真正的理解和认识什么是分布式,以及为什么要这么设计等等一系统问题,在看过大神的贴子了,如梦初醒,受益匪浅!

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:林建入
链接:http://www.zhihu.com/question/22764869/answer/56011081
来源:知乎

一.分布式的简单介绍

 1.什么是分布式?
      在一个操作中,需要多个系统之间配合才能完成的整个业务逻辑,叫做分布式系统。(个人理解)

 2.分布式拆分三步骤

  1.将你的整个软件视为一个系统(不管它有多复杂)。

  2.将整个系统分割为一系列的 Process(进程), 每个 Process 完成一定的功能。

  3.将这些 Process 分散到不同的机器上。分散后,选择若干种(没错一种可能不够)通信协议把他们连接起来,当执行某项操作的时候按照拆分的系统有序的执行。

二、跳出误区——分布式不等于并行计算

 人们常常把分布式系统自然而然的和并行计算联系起来。然而这并不正确。实际上,分布式系统并不一定是并行的,举个简单的例子就能理解——
 某软件,功能如下:

  1. 提示用户输入两个数 A 和 B
  2. 在内部,对 A 和 B 执行某数学运算,获得 C
  3. 输出 C

  很简单吧?这三个步骤是无法并行的。它们需要被依次执行。但是这个软件依然可以被改为分布式的,方法就是用前面提到的方法,把步骤 2 的计算过程独立为一个 Process 移动到另外一台计算机上完成。

  如果我们从整个系统流程的观点来看,并没有什么并行。整个过程都是顺序执行的。只不过执行时出现了“跨设备”的现象而已。可见,分布式本身就只如其字面意思所指,指的仅仅是从结构角度的分散而已。

  当然啊,现实世界中,我们更多的时候钟情于分布式,还是因为它与并行之间可以相互配合。例如实现既是分布同时也是并行的系统。

  好了,理解这一点之后就不难解释为什么我会说前文提到的三步骤是万用大法了。接下来我们继续讨论分布式本身。

三、拆分+连接是分布式系统的本质

  所谓分布式,无非就是”将一个系统拆分成多个子系统并散布到不同设备“的过程而已。

  本质上而言,实现一个分布式系统,最核心的部分无非有两点:

   1.如何拆分——可以有很多方式,核心依据一是业务需求,二是成本限制。这是实践中构建分布式系统时最主要的设计依据。

   2.如何连接——光把系统拆开成 Process 还不够,关键是拆开后的 Process 之间还要能通信,因此涉及通信协议设计的问题,需要考虑的因素很多,好消息是这部分其实成熟    方案很多

四、为什么你要使用分布式?

  分布式系统并非灵丹妙药,解决问题的关键还是看你对问题本身的了解。通常我们需要使用分布式的常见理由是:

  1.为了性能扩展 ——系统负载高,单台机器无法承载,希望通过使用多台机器来提高系统的负载能力。

    例:对一个B2C(京东、淘宝)商城进行拆分,首页部分我们要考虑到高并发、高可用、搜索、缓存等等一系列的情况,需要把这个功能单独拆分出来来扩展性能

  2.为了增强可靠性 ——软件不是完美的,网络不是完美的,甚至机器本身也不可能是完美的,随时可能会出错,为了避免故障,需要将业务分散开保留一定的冗余度

    在以提供 Service 为主的服务端软件开发过程中常常遇到这些问题。

五、一些分布式方案能解决你的问题,另一些却不能,要学会的其实是选择

  笼统的讨论分布式没有太大的意义,就如我刚才所谈的,实际上分布式很容易实现。真正难的地方在于如何选择正确的分布方案。

  例如,当你想要建立一个分布式的数据管理系统的时候,你就必须得面对“一致性”问题。如果你对数据一致性要求很高,你就不得不容忍一些缺陷例如规模伸缩困难;而如果你放弃它,你可以轻松伸缩规模,但你必须解决好由此带来的一系列数据不一致导致的问题。(CAP 问题)

  于是你会意识到,有许多种分布方案,为了正确解决你的问题,你需要对每一个方案都进行了解,并评估,选择不同的方案有时候区别不大,有时候却会深刻的影响整个系统中其他部分的工作方式,甚至影响用户界面中用户操作时的流程。这是我们学习分布式系统的重点所在。

六、分布式学习入门——基础知识要点

  如我前面所讲,分布式入门不难。主要包含如下知识点:

  • Process(进程)。在分布式系统中,进程是基本单元
  • 通信协议。Process 间需要相互配合才能完成工作,因此通信协议是最基本要解决的问题。这部分其实挺复杂,牵涉面光,不过核心还是抓住两方面,一是存在哪些需求,二是各个协议如何满足这些需求
  • 命名法。两个 Process 要通信,必须相互知道对方的名字,名字可以是数字,也可以是结构化的字符串。例如众所周知域名系统就是一种命名方案,但是方案还有很多,各有特点
  • 协作。上面都在谈 Process 之间的通信,可是为什么要通信?因为要协作。协作是个复杂的主题,其中最基本最基本的一个问题就是同步问题。而聊同步问题必然要聊“锁”……知识点就这么展开了

  上面几点是最基础的知识。了解了这些其实就算入门了。可是如何进阶呢?那么必然要开始学习下面的问题:

  • 一致性。数据存储时,最基本的问题。其实也是实际设计系统时常常需要反复考虑的问题
  • 容错。冗余是容错的基础,但并不是全部,分布式本身为实现容错提供了一些便利,这也是实际设计系统时常常需要考虑的问题

  好了,如果这些你都学的差不多了,那咱们“纸上谈兵”也就告一段落了。接下来进入实战演练。

七、实战演练?其实你已经开发过分布式系统了

  你有没有开发过简单的增删改查软件?这类软件通常都需要搭配一个独立的数据库管理系统共同完成功能。实际上,只要你开发过这么简单的软件,那么你就已经开发过分布式系统了。

“什么,基于数据库管理系统开发出来的软件就可以算分布式呀?我做了很多这类软件,怎么我从来没听过这种说法?

  真的,我没开玩笑。还记得我们前面提到的吗,什么是分布式?不就是一个大系统拆分成多个小系统分散到不同的设备上吗。回想一下,当你写一个简单的增删改查软件时,只要用到数据库管理系统,是不是具有如下特点:

  • 整个系统中,你写的代码跑在 A 进程里,而数据库管理系统则跑在另外一个进程 B 里
  • A 进程与 B 进程通过某种通信协议连接
  • 既可以使 A 进程与 B 进程运行在同一台机器上,也可以将它们分开运行于不同的机器上,并且系统依然可以照常运行

  你看,这不就是分布式系统的特点吗?

“啊,原来如此,可是我印象里一说分布式的话,应该会讲「集群」啊啥的吧,这么简单的也算?”

八.分布式的本质  

  我们需要透过分布的本质来提高的是解决问题的能力,能解决这些问题的前提不但需要知识的深度,还需要知识的广度,只有这样才能设计好真正适合业务需求的分布式!

  毕竟,代码只是思想的一种体现而已!!!

  

    

时间: 2024-09-20 18:47:27

什么是分布式系统(通俗易懂)的相关文章

什么是分布式系统(通俗易懂的说法)

https://www.cnblogs.com/yzlpersonal/p/5121065.html ------------------------------------------------------------------------------------------ 网上找了些资料,看完觉得明白了很多~~~ 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:林建入链接:http://www.zhihu.com/question/22764869/answe

分布式系统常用思想和技术总结

一.分布式系统的难点 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 1. 网络延迟:性能.超时 同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了.并且,延迟不是带宽,带宽可以随便增加,千兆网卡换成万兆,只是成本的问题,但延迟是物理限制,基本不可能降低. 这带来的问题就是系统整体性能的降低,会带来一系列的问题,比如资源的锁住,所以系统调用一般都要设置一个超时时间进

分布式系统常用思想和技术总结 (入门很清楚)

一.分布式系统的难点 转载自:http://ju.outofmemory.cn/entry/75834 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 1. 网络延迟:性能.超时 同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了.并且,延迟不是带宽,带宽可以随便增加,千兆网卡换成万兆,只是成本的问题,但延迟是物理限制,基本不可能降低. 这带来的问题就是系统整体性能

分布式系统常用思想和技术

感谢该作者的总结,转载地址:http://blog.arganzheng.me/  本人将重点进行加粗,便于大家一起查阅学习 一.分布式系统的难点 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 1. 网络延迟:性能.超时 同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了.并且,延迟不是带宽,带宽可以随便增加,千兆网卡换成万兆,只是成本的问题,但延迟是物理限制,基

分布式系统常用思想和技术总结(转)

一.分布式系统的难点 分布式系统比起单机系统存在哪些难点呢? 1. 网络因素 由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题: 1. 网络延迟:性能.超时 同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了.并且,延迟不是带宽,带宽可以随便增加,千兆网卡换成万兆,只是成本的问题,但延迟是物理限制,基本不可能降低. 这带来的问题就是系统整体性能的降低,会带来一系列的问题,比如资源的锁住,所以系统调用一般都要设置一个超时时间进

过去这几十年,分布式系统的「数据一致性」精华都在这了!

阅读目录 为什么需要事务 事务的来源 分布式系统中的事务问题 分布式事务的解决方案 结语 暂时还未涉及的园友们,可以收藏防身哦~ 本文是本系列的第三篇.与前两篇<不知道是不是最通俗易懂的<数据一致性>剖析了>.<烦人的数据不一致到底怎么解决?——通过“共识”达成数据一致性>形成完整的「数据一致性」合集. 一.为什么需要事务 如果说「共识」解决的是「水平」问题,那么「事务」解决的是「垂直」问题.是如何让一条绳上的蚂蚱共同起舞? 事务只是一个计算机术语,而事务的体现形式其实

大规模分布式系统的跟踪系统 Dapper设计给我们的启示

在2010年,google发表了一篇名为"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure"的论文,在文中介绍了google生产环境中大规模分布式系统下的跟踪系统Dapper的设计和使用经验.而zipkin/pinpoint/hydra/watchman/鹰眼等系统都是基于这篇文章而实现的.重新再读这篇文章,简单整理如下. 为什么需要跟踪系统 故障快速定位 快速的故障定位非常重要,一个好的系统需要提供快速检

什么是ZooKeeper(一)(通俗易懂)

以前在做别的项目时用过zk,但没有过多深入的学习,本着通俗易懂.简单方便学习成本低的方式,建议大家耐心看完,如果文章中有不清楚的地方,可发私信进步探讨! 学习zk共分为二部分,第一部分主要以理论为主.讲解架构原理.数据结构等. 第二部分主要以操作为主.集群的搭建.API的操作,zk负载均衡.分布式锁的实现 本篇读完预计6分钟 一.Zookeeper 简介 1.简介(重点) zooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系

分布式系统中的CAP原理

分布式系统中的CAP原理,布布扣,bubuko.com