分布式技术原理与算法解析
聂鹏程
智载云帆CTO,前华为分布式Lab资深技术专家
立即订阅
5969 人已学习
课程目录
已更新 36 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 四纵四横,带你透彻理解分布式技术
免费
01 | 分布式缘何而起:从单兵,到游击队,到集团军
02 | 分布式系统的指标:啥是分布式的三围
第一站:分布式协调与同步 (6讲)
03 | 分布式互斥:有你没我,有我没你
04 | 分布式选举:国不可一日无君
05 | 分布式共识:存异求同
06 | 分布式事务:All or nothing
07 | 分布式锁:关键重地,非请勿入
08 | 分布式技术是如何引爆人工智能的?
第二站:分布式资源管理与负载调度 (6讲)
09 | 分布式体系结构之集中式结构:一人在上,万人在下
10 | 分布式体系结构之非集中式结构:众生平等
11 | 分布式调度架构之单体调度:物质文明、精神文明一手抓
12 | 分布式调度架构之两层调度:物质文明、精神文明两手抓
13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓
14 | 答疑篇:分布式事务与分布式锁相关问题
第三站:分布式计算技术 (4讲)
15 | 分布式计算模式之MR:一门同流合污的艺术
16 | 分布式计算模式之Stream:一门背锅的艺术
17 | 分布式计算模式之Actor:一门甩锅的艺术
18 | 分布式计算模式之流水线:你方唱罢我登场
第四站:分布式通信技术 (4讲)
19 | 分布式通信之远程调用:我是你的千里眼
20 | 分布式通信之发布订阅:送货上门
21 | 分布式通信之消息队列:货物自取
22 | 答疑篇:分布式体系架构与分布式计算相关问题
第五站:分布式数据存储 (5讲)
23 | CAP理论:这顶帽子我不想要
24 | 分布式数据存储系统之三要素:顾客、导购与货架
25 | 数据分布方式之哈希与一致性哈希:“掐指一算”与“掐指两算”的事
26 | 分布式数据复制技术:分身有术
27 | 分布式数据之缓存技术:“身手钥钱”随身带
特别放送 (3讲)
特别放送 | 分布式下的一致性杂谈
特别放送 | 徐志强:学习这件事儿,不到长城非好汉
特别放送 | 那些你不能错过的分布式系统论文
第六站:分布式高可靠 (5讲)
28 | 分布式高可靠之负载均衡:不患寡,而患不均
29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵
30 | 分布式高可用之故障隔离:当断不断,反受其乱
31 | 分布式高可用之故障恢复:知错能改,善莫大焉
32 | 答疑篇:如何判断并解决网络分区问题?
分布式技术原理与算法解析
登录|注册

01 | 分布式缘何而起:从单兵,到游击队,到集团军

聂鹏程 2019-09-23
你好,我是聂鹏程。这是专栏的第一篇文章,我们先来聊聊什么是分布式。
与其直接用些抽象、晦涩的技术名词去给分布式下一个定义,还不如从理解分布式的发展驱动因素开始,我们一起去探寻它的本质,自然而然地也就清楚它的定义了。
在今天这篇文章中,我将带你了解分布式的起源,是如何从单台计算机发展到分布式的,进而帮助你深入理解什么是分布式。为了方便你更好地理解这个演进过程,我将不考虑多核、多处理器的情况,假定每台计算机都是单核、单处理器的。

分布式起源

单兵模式:单机模式

1946 年情人节发布的 ENIAC 是世界上的第一台通用计算机,它占地 170 平米重达 30 吨,每秒可进行 5000 次加法或者 400 次乘法运算,标志着单机模式的开始。
所谓单机模式是指,所有应用程序和数据均部署在一台电脑或服务器上,由一台计算机完成所有的处理。
以铁路售票系统为例,铁路售票系统包括用户管理、火车票管理和订单管理等模块,数据包括用户数据、火车票数据和订单数据等,如果使用单机模式,那么所有的模块和数据均会部署在同一台计算机上,也就是说数据存储、请求处理均由该计算机完成。这种模式的好处是功能、代码和数据集中,便于维护、管理和执行。
单机模式的示意图,如下所示:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式技术原理与算法解析》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(46)

  • 吾皇万岁万岁万万岁
    之前去会所,一口气叫上十个嫩模,到房间之后,我就给她们讲Quorum协议怎么实现节点选举,蒙特卡洛方法的实际应用,MVCC怎么实现事务的并发,tcp怎么做到传输可靠…她们很感兴趣,我也很愉快的就回来了。
    后来我朋友听了,他们也想去,于是去了五个人(五人同行,两人免单),这次可以服务50个嫩模,每人10个,在不同的房间,我们又给她们讲了Quorum协议…蒙特卡洛…MVCC…tcp传输等等,她们很开心,我们也开心的回来了。
    再下次的时候,也去了5个人,但这次我们想服务更多的嫩模,于是我们进行了现场分组,想听Quorum的和第一个朋友走,想听蒙特卡洛的和第二个朋友走,想听MVCC的和第三个朋友走……于是我们每个人只讲一个知识点就回来了,很轻松也很开心,所以我们经常去会所。

    上面三部分,依次单机模式、数据并行、计算并行。

    后来,会所里面的姑娘都有了正经的职业,叫程序员鼓励师!

    作者回复: 你确定你开的不是时光机吗?为什么读着你的文字总有种移步换景,有种穿越的错觉?:)

    2019-09-23
    16
    110
  • 1024
    ## 分布式起源
    ### 单兵模式:单机
    将服务和数据都部署到同一个节点(服务器)上
    存在的问题:单点故障,单点性能瓶颈
    ### 游击队模式:数据分布式
    实际上是水平分层
    1. 数据分层
    2. 将数据分离
    就是针对不同的请求,去路由到不同的数据节点上
    存在问题:对提升单个任务的执行性能及降低时延无效

    ### 集团军模式:任务分布式
    实际上是垂直分层
    拆分服务到不同节点,一个任务可能要请求多个服务,多个服务并行执行
    类似于不同兵种,各司其职,协同作战
    存在问题:数据的全局一致性(各节点通信),数据的可用性保证(副本),各节点的调度(哪个节点可以响应服务)
    ### 总结
    我理解的分布式:将一个任务,拆分成多个子任务,每个任务都对应一个服务,每个服务又都部署到不同的节点上,实现一个任务,多服务并行响应,最后通过调度、统筹返回请求的结果
    为什么会有分布式:是我们对性能、可用性、及可扩展性的不懈追求

    ### 课后问题
    传统的并行计算是时空上复用多处理器
    分布式是空间上给任务分配多处理器

    作者回复: 积跬步,而终至千里!加油!

    2019-09-24
    13
  • 臧咔嚓
    "分布式其实就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。“
    这就相当于说 ”分布式是一种计算方式“,感觉有点别扭,套用到分布式协调、分布式计算、分布式存储上,感觉更别扭。

    作者回复: 从你的留言,能看出你有勤于思考的习惯!

    我想你如果理解下面两个问题,你的困惑也就消除了:
    1. 为什么个人电脑、服务器、平板、手机等都可以叫做计算机,而不是叫做存储机或其它机?
    2. 为什么大学里一级学科一般都只有计算机科学与技术,而没有什么存储科学与技术或协调科学与技术?

    2019-09-23
    2
    10
  • longhaiqwe
    首先,单核是无法实现真正的并行计算的,更多的是使用时间分片的方式,在各个“计算”之间跳动执行。
    然后,多核是可以实现真正的并行计算的。那我们为何不在机器上增加CPU和内存,而是去研究分布式这样的技术呢?
    我的思考哈,因为一台机器做好了放那儿,硬件是已经确定了的。假如我们需要更好的性能,也就是更多的CPU和内存,我们当然可以把机器拆了,然后现场改板子加CPU和内存,不过明显我只是为了强调不可行才说的“当然可以”。分布式的作用之一就在于我们不需要改变原来的机器,而是增加一台机器来达到增加CPU和内存的目的。这就是我理解的“可扩展性”,分布式能带来“高性能”无疑,不过不考虑在原来机器上增加CPU和内存的难度,我觉得不使用分布式技术也是可以做到的。
    最后,假设我们在一台机器上增加CPU和内存是不需要任何成本的(服务不断),也存在假设这台机器挂了,我们的服务也就会中断的问题。而使用分布式,也就是多台机器,即使其中一台挂了,还有其他机器可以对外提供服务。这就是我理解的“可用性”。
    2019-10-07
    7
  • Dale
    分布式核心在于将任务拆解分布在不同的服务器上,业务解耦,提高性能和可用性。并行计算核心在于充分利用服务器cpu,内存,网络资源,可以将单个任务以多进程多线程方式来运行。分布式中采用并行计算可以提高性能。
    2019-09-25
    6
  • c-xyy
    分布式强调拆分,如果面对的问题的瓶颈在数据量,则讲焦点集中在数据的拆分上,也就是数据分布式;如果问题的瓶颈在任务执行逻辑的复杂性上,则将任务进行拆分,也就是计算的分布式;讲相同的逻辑部署在多个节点上,一般称之为集群,平时我们经常说分布式集群系统,实际的包含了底层任务的拆分和多机部署的含义。
    2019-10-13
    3
  • 老男孩
    传统的并行计算,拿单核来说就算通过CPU的指令在多个进程或者线程间切换来实现宏观上的并行,微观上还是串行的。多核是可以真正实现并行的。传统的并行计算是同一个主机的不同进程或者线程,分布式是不同物理主机中的进程或者线程。
    2019-09-24
    3
  • Geek_54edc1
    并行计算强调运算的同时进行,对于多核处理器,就是每个处理器都同时进行运算;而分布式更多是从数据、任务的并行上来考虑,通常是利用多台机器,较少考虑多处理器并行的问题
    2019-09-24
    3
  • 向往的生活
    厉害

    作者回复: 宝剑锋自磨砺出,加油!:)

    2019-09-23
    3
  • 布小丫学编程
    如果系统的瓶颈在数据量太大,则对数据进行分片,如MySQL的数据分片和Redis Cluster。
    如果系统的瓶颈在于业务复杂,耦合度太高,则将任务拆分到各个微服务,分别部署到不同服务器上,这就是常说的分布式微服务。
    如果系统的瓶颈在于单个微服务负载过高,难以处理高并发请求时,则使用集群部署,同一个微服务有多个实例,应该也可以叫做并行计算吧。
    2019-11-16
    1
  • 旅途
    数据并行例子中,上面两个服务访问下面的数据库是不是应该是交叉的,每个服务都可以访问下面两个数据库,否则就是服务和地点有绑顶关系,按你接下来说的请求转发,那么就是根据查询的地点来指定特定的服务器,而不是负载均衡了
    2019-10-13
    1
  • 阿亮
    任务并行不是特别理解。如果有一个任务有多个任务组成,且是顺序执行的,前后有依赖,在这种情况下,无论怎么拆分也是不可能提高效率的吧,如果放到不同机器上,是否还会降低执行效率?
    2019-10-02
    2
    1
  • zhaozp
    打卡文章学习:
        1、分布式是系统架构不断演进的结果,是对系统性能不断追求的结果。单机模式的缺点是性能瓶颈并且有单点故障。这时系统中往往最先出现的数据瓶颈所以先出现数据并行(分库分表,读写分离)等,任务也会水平扩展增加节点通过负载均衡路由,缺点就是对提升单个任务的性能和时延无效。随着系统的复杂性提升,任务的执行成为系统瓶颈,这时需要对任务进行拆分,拆分成小粒度的子任务,容器技术也实现了子任务单独部署,当然缺点是引入了系统的复杂度。
        
    2、分布式其实就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的计算方式。结合"四横":数据并行就是对数据存储和管理的分布式化、任务并行就是对计算方式的分布式化,也会涉及资源池的分布式和通信的分布式。结合"四纵":数据和任务拆分后怎么解决分布式协同、分布式调度、分布式高可用的问题,容器化技术也致力于解决分布式部署问题。

    课后思考:
        我理解传统的并行计算还是运行于单服务器,其核心在于充分利用服务器的CPU、内存等资源,可以通过多线程并发技术实现。而分布式是把任务拆分到不同的服务器上,是业务解耦,提高可用性和可扩展性。但是也引入了系统设计复杂度。

    作者回复: 积跬步,而终至千里!加油!

    2019-09-29
    1
  • leslie
    关于分布式和并行计算的区别:
       1)从虚拟化这块来解释:分布式其实就是我们现在所最常用的Kubernetes或者docker,传统的并行就是Vmware
        2)从数据系统这块来来解释就是:RMDB和no sql DB的区别;RMDB严格遵守ACID特性,nosql 做不到只能在CAP中选择其中的2项。
       不知道这样的解释是否算是一种解释吧。
    2019-09-23
    1
  • Robic
    老师举的数据并行的例子 不是任务并行吗 让他们处理各自的地区的订单 只不过没把任务划分成更小的子任务
    2019-09-23
    1
  • Robic
    我还是不理解 数据并行和任务并行的区别 任务并行时 不会划分数据吗 老师说 通常结合两者使用 如何结合 能举一个例子吗
    2019-09-23
    1
    1
  • AKA三皮
    集团军引入的复杂性,我的理解就是服务拆分引入的复杂性:数据聚合、分布式事务等等
    2019-09-23
    2
    1
  • 北漂鱼
    所谓的“集团军模式”(作者自己起的名字?)提升单个任务的执行效率,我看你只是做了服务拆分。并没有“单个复杂的任务拆分为多个子任务”,只是把一个大系统的包含的多个业务功能拆分成小系统。就叫任务拆分就好了。我理解的单个任务拆分成子任务拆分成多个服务,作者的意思是不是一个火车票购买流程拆成多个服务后,分别调用你拆分后的这几个服务。感觉表达得太不清楚了!
    2019-12-11
  • lobby
    我觉得对于数据分布式而言,程序(计算资源)是一种集群的体现,这个时候程序是不是不能称为分布式计算,但是我们认为数据分布式也是属于一种分布式,不知道理解有没有什么问题
    2019-12-02
  • 黄锦坤
    最后的思考题不太明白是想表达啥?并行计算是相对于串行计算的,可以针对空间和时间去做并行计算。而分布式计算则是相对于单机计算的,当然此处单机自然是单核单处理器的。这么讲的话其实分布式计算应该是并行计算的一个子集而已吧,不知道我这么理解对不对呢?
    2019-11-24
收起评论
46
返回
顶部