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

这里先来聊聊什么是分布式。

与其直接用些抽象、晦涩的技术名词去给分布式下一个定义,还不如从理解分布式的发展驱动因素开始,我们一起去探寻它的本质,自然而然地也就清楚它的定义了。

这里将介绍分布式的起源,是如何从单台计算机发展到分布式的,进而深入理解什么是分布式。为了更好地理解这个演进过程,我将不考虑多核、多处理器的情况,假定每台计算机都是单核、单处理器的。

分布式起源

单兵模式:单机模式

1946年情人节发布的ENIAC是世界上的第一台通用计算机,它占地170平米重达30吨,每秒可进行5000次加法或者400次乘法运算,标志着单机模式的开始。

所谓单机模式是指,所有应用程序和数据均部署在一台电脑或服务器上,由一台计算机完成所有的处理。

以铁路售票系统为例,铁路售票系统包括用户管理、火车票管理和订单管理等模块,数据包括用户数据、火车票数据和订单数据等,如果使用单机模式,那么所有的模块和数据均会部署在同一台计算机上,也就是说数据存储、请求处理均由该计算机完成。这种模式的好处是功能、代码和数据集中,便于维护、管理和执行。

单机模式的示意图,如下所示:

这里需要注意的是,本文的所有示意图中,紫色虚线表示在一台计算机内。

事物均有两面性,我们再来看看单机模式的缺点。单个计算机的处理能力取决于CPU和内存等,但硬件的发展速度和性能是有限的,而且升级硬件的性价比也是我们要考虑的,由此决定了CPU和内存等硬件的性能将成为单机模式的瓶颈。

你有没有发现,单机模式和单兵作战模式非常相似,单台计算机能力再强,就好比特种兵以一敌百,但终归能力有限。此外,将所有任务都交给一台计算机,也会存在将所有鸡蛋放到一个篮子里的风险,也就是单点失效问题。

归纳一下,单机模式的主要问题是:性能受限、存在单点失效问题。

游击队模式:数据并行或数据分布式

“游击队模式”这一概念是由卡尔·施米特提出的,在他的论文《游击队理论》中有所阐述。这篇论文最初来源于施米特在1962年所做的两次学术演讲,并在1963年正式发表。

既然单机模式存在性能和可用性的问题。那么,有没有什么更好的计算模式呢?答案是肯定的。

为解决单机模式的问题,并行计算得到了发展,进而出现了数据并行(也叫作数据分布式)模式。并行计算采用消息共享模式使用多台计算机并行运行或执行多项任务,核心原理是每台计算机上执行相同的程序,将数据进行拆分放到不同的计算机上进行计算。

请注意,并行计算强调的是对数据进行拆分,任务程序在每台机器上运行。要达到这个目的,我们必须首先把单机模式中的应用和数据分离,才可能实现对数据的拆分。这里的应用就是执行任务的程序,任务就是提交的请求。以铁路售票系统为例,运行在服务器上的用户管理、火车票管理和订单管理等程序就是应用,用户提交的查询火车票、购买火车票的请求就是任务。

在单机模式中,应用和数据均在一台计算机或服务器上,要实现数据的并行,首先必须将应用和数据分离以便将应用部署到不同的计算机或服务器上;然后,对同类型的数据进行拆分,比方说,不同计算机或服务器上的应用可以到不同的数据库上获取数据执行任务。

以铁路售票系统的数据并行为例,主要包括两个步骤,如下所示:

第一步,将应用与数据分离,分别部署到不同的服务器上:

第二步,对数据进行拆分,比如把同一类型的数据拆分到两个甚至更多的数据库中,这样应用服务器上的任务就可以针对不同数据并行执行了。

对于铁路售票系统来说,根据线路将用户、火车票和订单数据拆分到不同的数据库中,部署到不同的服务器上,比如京藏线的数据放在数据库服务器1上的数据库中,沪深线的数据放在数据库服务器2上的数据库中。

需要注意的是,为了更好地理解这个数据拆分的过程,我在这里选择拆分数据库的方式进行讲解。由于数据库服务器本身的并发特性,因此你也可以根据你的业务情况进行选择,比方说所有业务服务器共用一个数据库服务器,而不一定真的需要去进行数据库拆分。

可以看出,在数据并行或数据分布式模式中,每台计算机都是全量地从头到尾一条龙地执行一个程序,就像一个全能的铁道游击队战士。所以,也可以将这种模式形象地理解成游击队模式,就和铁道游击队插曲的歌词有点类似:“我们扒飞车那个搞机枪,撞火车那个炸桥梁……”

这种模式的好处是,可以利用多台计算机并行处理多个请求,使得我们可以在相同的时间内完成更多的请求处理,解决了单机模式的计算效率瓶颈问题。但这种模式仍然存在如下几个问题,在实际应用中,我们需要对其进行相应的优化:

  • 相同的应用部署到不同的服务器上,当大量用户请求过来时,如何能比较均衡地转发到不同的应用服务器上呢?解决这个问题的方法是设计一个负载均衡器,这在“分布式高可靠”模块会介绍负载均衡的相关原理。
  • 当请求量较大时,对数据库的频繁读写操作,使得数据库的IO访问成为瓶颈。解决这个问题的方式是读写分离,读数据库只接收读请求,写数据库只接收写请求,当然读写数据库之间要进行数据同步,以保证数据一致性。
  • 当有些数据成为热点数据时,会导致数据库访问频繁,压力增大。解决这个问题的方法是引入缓存机制,将热点数据加载到缓存中,一方面可以减轻数据库的压力,另一方面也可以提升查询效率。

从上面介绍可以看出,数据并行模式实现了多请求并行处理,但如果单个请求特别复杂,比方说需要几天甚至一周时间的时候,数据并行模式的整体计算效率还是不够高。

由此可见,数据并行模式的主要问题是:对提升单个任务的执行性能及降低时延无效。

集团军模式:任务并行或任务分布式

那么,有没有办法可以提高单个任务的执行性能,或者缩短单个任务的执行时间呢?答案是肯定的。任务并行(也叫作任务分布式)就是为解决这个问题而生的。那什么是任务并行呢?

任务并行指的是,将单个复杂的任务拆分为多个子任务,从而使得多个子任务可以在不同的计算机上并行执行。

我们仍以铁路售票系统为例,任务并行首先是对应用进行拆分,比如按照领域模型将用户管理、火车票管理、订单管理拆分成多个子系统分别运行在不同的计算机或服务器上。换句话说,原本包括用户管理、火车票管理和订单管理的一个复杂任务,被拆分成了多个子任务在不同计算机或服务器上执行,如下图所示:

可以看出,任务并行模式完成一项复杂任务主要有两个核心步骤:首先将单任务拆分成多个子任务,然后让多个子任务并行执行。这种模式和集团军模式很像,任务拆分者对应领导者,不同子系统对应不同兵种,不同子程序执行不同任务就像不同的兵种执行不同的命令一样,并且运行相同子系统或子任务的计算机又可以组成一个兵团。

在集团军模式中,由于多个子任务可以在多台计算机上运行,因此通过将同一任务待处理的数据分散到多个计算机上,在这些计算机上同时进行处理,就可以加快任务执行的速度。因为,只要一个复杂任务拆分出的任意子任务执行时间变短了,那么这个任务的整体执行时间就变短了。

当然,nothing is perfect。集团军模式在提供了更好的性能、扩展性、可维护性的同时,也带来了设计上的复杂性问题,毕竟对一个大型业务的拆分也是一个难题。不过,对于大型业务来讲,从长远收益来看,这个短期的设计阵痛是值得的。这也是许多大型互联网公司、高性能计算机构等竞相对业务进行拆分以及重构的一个重要原因。

分布式是什么?

讲了半天,那到底什么是分布式呢?

总结一下,分布式其实就是将相同或相关的程序运行在多台计算机上,从而实现特定目标的一种计算方式。

从这个定义来看,数据并行、任务并行其实都可以算作是分布式的一种形态。从这些计算方式的演变中不难看出,产生分布式的最主要驱动力量,是我们对于性能、可用性及可扩展性的不懈追求。

总结

在文章里分享了分布式的起源,即从单机模式到数据并行(也叫作数据分布式)模式,再到任务并行(也叫作任务分布式)模式。

单机模式指的是,所有业务和数据均部署到同一台机器上。这种模式的好处是功能、代码和数据集中,便于维护、管理和执行,但计算效率是瓶颈。也就是说单机模式性能受限,也存在单点失效的问题。

数据并行(也叫作数据分布式)模式指的是,对数据进行拆分,利用多台计算机并行执行多个相同任务,通过在相同的时间内完成多个相同任务,从而缩短所有任务的总体执行时间,但对提升单个任务的执行性能及降低时延无效。

任务并行(也叫作任务分布式)模式指的是,单任务按照执行流程,拆分成多个子任务,多个子任务分别并行执行,只要一个复杂任务中的任意子任务的执行时间变短了,那么这个业务的整体执行时间也就变短了。该模式在提高性能、扩展性、可维护性等的同时,也带来了设计上的复杂性问题,比如复杂任务的拆分。

在数据并行和任务并行这两个模式的使用上,用户通常会比较疑惑,到底是采用数据并行还是任务并行呢?一个简单的原则就是:任务执行时间短,数据规模大、类型相同且无依赖,则可采用数据并行;如果任务复杂、执行时间长,且任务可拆分为多个子任务,则考虑任务并行。在实际业务中,通常是这两种模式并用。

课后思考

你觉得分布式与传统的并行计算的区别是什么?

分布式计算与传统的并行计算在设计理念、应用目标和资源管理上存在显著差异。
  1. 设计理念:
  • 传统并行计算通常指的是多处理器或多核处理器在同一时间内执行多个计算任务,这些处理单元通常共享内存和资源,强调的是计算性能的提升。
  • 分布式计算则涉及多个独立的计算机节点协作完成一项任务,这些节点可能分布在不同的地理位置,它们之间通过网络进行通信,每个节点拥有自己的内存和资源。
  1. 应用目标
  • 并行计算主要应用于需要大量计算的场景,如科学模拟和复杂数学问题的求解,其目标是提高单个任务的计算速度。
  • 分布式计算更多用于处理大量的独立任务,例如大规模的数据处理和分析,其优势在于能够同时处理许多小任务,从而加快整体的处理速度。
  1. 资源管理
  • 在并行计算中,由于资源共享,资源管理相对简单,因为所有处理单元都在同一系统中协同工作。
  • 分布式计算中的资源管理更为复杂,因为需要协调和管理分散在不同地点的计算资源,并确保它们能够高效地共同完成任务。

微服务与任务并行模式的区别是什么?

结论:微服务拆分后,天然支持任务并行模式。各子任务就是单独被拆分好的微服务,以供并行调用执行。

微服务架构和任务并行模式是两种不同的概念,它们在目的、实现方式和应用场景上有所区别。以下是具体分析:

  1. 目的
  • 微服务架构的目的是通过服务的解耦和细粒度的组件化来提高系统的灵活性、可维护性和可扩展性。它允许开发团队独立地开发、部署和扩展每个服务,从而加快开发速度并减少系统间的依赖。
  • 任务并行模式则是为了提高计算效率,特别是在处理大量数据或执行复杂计算时,通过同时执行多个任务来缩短整体的处理时间。
  1. 实现方式
  • 微服务架构通常涉及到将应用程序分解为一系列小型、独立的服务,每个服务负责一个功能模块,并且可以独立运行和扩展。这些服务之间通过网络通信,通常使用HTTP RESTful API或轻量级的通信机制(如RPC)进行交互。
  • 任务并行模式则可以通过多线程、多进程或分布式计算来实现。在微服务架构中,任务并行可以作为一个优化手段,例如通过并行调用不同的服务来提高系统性能。
  1. 应用场景
  • 微服务架构适用于大型复杂的应用程序,它可以使系统更加模块化,便于团队协作和持续集成/持续部署(CI/CD)。
  • 任务并行模式则适用于需要高性能计算的场景,如科学模拟、大数据分析等。

总的来说,微服务架构专注于通过服务分解来提高系统的模块化和可维护性,而任务并行关注于提高计算效率和加速任务执行。两者虽然在某些情况下可以相互配合,但它们的核心目标和实现方式是不同的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚道云连接器打通红圈CRM和金蝶云星辰,赋能环境科技公司数字化转型

一、客户介绍 某环境科技有限公司是一家专注于环保科技领域的领先企业,致力于为客户提供全方位的环境解决方案。公司拥有一支经验丰富、技术精湛的团队,不断推动环保技术的创新与应用。作为业内的佼佼者,该公司在环境治理、资源回收和节能减…

深度学习理论基础(四)Parser命令行参数模块

学习目录: 深度学习理论基础(一)Python及Torch基础篇 深度学习理论基础(二)深度神经网络DNN 深度学习理论基础(三)封装数据集及手写数字识别 深度学习理论基础(四)Parse…

Datax,hbase与mysql数据相互同步

参考文章:datax mysql 和hbase的 相互导入 目录 0、软件版本说明 1、hbase数据同步至mysql 1.1、hbase数据 1.2、mysql数据 1.3、json脚本(hbase2mysql.json) 1.4、同步成功日志 2、mysql数据同步至hbase 1.1、hbase数据 1.2、mysql…

SpringBoot快速入门笔记(5)

文章目录 一、elemetnUI1、main.js2、App.vue3、fontAwesome 一、elemetnUI 开源前端框架,安装 npm i element-ui -S 建议查看官方文档 Element组件,这里是Vue2搭配elementUI,如果是vue3就搭配elementPlus,这里初学就以Vue2为例子…

docker基础学习指令

文章目录 [toc] docker基础常用指令一、docker 基础命令二、docker 镜像命令1. docker images2. docker search3. docker pull4. docker system df5. docker rmi1. Commit 命令 三、 docker 容器命令1. docker run2. docker logs3. docker top4. docker inspect5. docker cp6. …

合并主分支到子分支

参考:【Git】合并分支出现 Please enter a commit message to explain why this merge is necessary.-CSDN博客 git 如何将主分支(master)合并到子分支上_git 将主分支合并到子分支-CSDN博客 1、先切换到主分支master git checkout master 2、把主分支代码拉到本地…

RankCSE

前置知识复习 https://www.cnblogs.com/Allen-rg/p/13958508.htmlword2vec详解:https://zhuanlan.zhihu.com/p/114538417 Word2Vec和GloVe都是用于将词与向量相关联的流行词嵌入模型。 相同点: 目标:Word2Vec和GloVe的共同目标是将词汇映射…

Windows/Jerry

Jerry Enumeration nmap 扫描系统发现对外开放了 8080 端口,再次使用 nmap 扫描端口详细信息,发现运行着 Apache Tomcat ┌──(kali㉿kali)-[~/vegetable/HTB/Jerry] └─$ nmap -sV -sC -p 8080 -oA nmap 10.10.10.95 -Pn Starting Nmap 7.93 ( htt…

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item-CSDN博客 前言 本篇,我们将通过对QGraphicsItem类进行派生,创建自定义图元item并显示在窗口中。我们将以创建一张从文件读取的图片item为例进行分…

使用Nodejs + express连接数据库mongodb

文章目录 先创建一个js文档安装 MongoDB 驱动程序:引入 MongoDB 模块:设置数据库连接:新建一个表试试执行数据库操作:关闭数据库连接: 前面需要准备的内容可看前面的文章: Express框架搭建项目 node.js 简单…

轻松上手Jackjson(珍藏版)

写在前面 虽然现在市面上有很多优秀的json解析库,但 Spring默认采用Jackson解析Json。 本文将通过一系列通俗易懂的代码示例,带你逐步掌握 Jackson 的基础用法、进阶技巧以及在实际项目中的应用场景。 一、Jackjson简介 Jackson 是当前用的比较广泛的&a…

idea开发 java web 疫情信息查询系统bootstrap框架web结构java编程计算机网页接口查询

一、源码特点 java 疫情信息查询系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 前段主要技术 css j…

The Closest Pair Problem

Problem Let S be a set of n points ((xi,yi), 1≤i≤n) in the plane, finding a pair of points p and q in S whose mutual distance is minimum. Algorithm 1: Θ ( n 2 ) The brute-force algorithm simply examines all the possible n(n−1)/2 distances and returns t…

CentOS部署Apache Superset大数据可视化BI分析工具并实现无公网IP远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透,实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

模具行业项目管理系统哪家好?模具项目管理系统找企智汇!

模具行业是一个对项目管理要求非常高的领域,涉及到复杂的制造流程、精细的工艺要求以及紧密的供应链协作。因此,选择一款适合模具行业的项目管理系统至关重要。 企智汇作为一款专注于企业数字一体化项目管理的软件,为模具行业提供了全面的项…

解决Xshell连接不上虚拟机

相信有很多同学和我一样遇到这个问题,在网上看了很多教程基本上都先让在虚拟机输入ifconfig命令查看ip地址,弄来弄去最后还是解决不了😭😭,其实问题根本就不在命令上,很大概率是我们的虚拟机没有开启网卡&a…

CSS实现热门创作者排行榜(毛玻璃效果)

CSS实现热门创作者排行榜&#xff08;毛玻璃效果&#xff09; 效果展示 CSS 知识点 CSS 基础知识回顾filter 属性运用回顾 整体页面布局实现 <div class"container"><h3>Popular Creator Rank List</h3><!-- 用户列表容器 --><div cl…

【剪映专业版】02软件快捷键

视频课程&#xff1a;有知公开课【剪映电脑版教程】 快捷键 苹果电脑选择Final Cut Pro X Windows电脑选择Premiere Pro 常用快捷键 更改快捷键

刷题之动态规划-子序列

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的子序列类型相关的题目&#xff0c;子序列元素的相对位置和原序列的相对位置是一样的 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xf…

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…