分布式、集群概念汇总(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_36632174/article/details/102460892

技术本无好坏,在于适当的使用和积累。框架没有固定模式,主要是根据具体业务去设计最适合的框架。

前言

计算机的领域,当单机性能达到瓶颈时,有两种方式可以解决性能问题,一是堆硬件,进一步提升配置,二是分布式,水平扩展。在云计算、微服务、大数据、深度学习、人工智能、区块链等近些年火热领域,分布式和集群是基础,因为数据、应用的巨大,单机的性能已经无法满足需求,需要多台计算机协同工作。"分布式"有很多种,比如分布式文件系统,分布式数据库,分布式WebService,分布式计算等等,面向的情景不同,但分布式的思路是否是一样的呢?首先了解两个概念:

1.水平扩展:在水平扩展模型中,通过增加更多的系统执行者来实现,说白了就是加机器。

当大量请求并发的时候,可以通过分布式的方式,让请求均匀的分布到不同的机器上,减小压力。复制相同的表、库、服务器来共同承担压力。

2.垂直拆分:在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现。比如增加机器的内存,提高单机处理能力,拆分功能到不同的机器上部署等等。垂直扩展旨在提高自身效率,但总会遇到自身的瓶颈。或拆分功能为小功能,来转移压力的发生。拆分的小功能分配到各服务器上。

举个例子来明确下水平扩展和垂直拆分:

如果公司的计算机系统很庞大,自然是一个整的分布式系统,为了方便组织管理,公司将整个技术部按业务拆分为部门,订单的,会员的,供销商的等等。每个部门有自己的web服务器集群,数据库服务器集群,通过同一个网站访问的链接可能来自于不同的服务器和数据库,对网站及底层对数据库的访问被分配到了不同的服务器集群这个便是典型的按业务做的垂直拆分,每个部门的服务器在hold不住时,会有弹性的扩展,来对请求进行均衡分配,这便是水平扩展。在数据库层,有些表非常大,数据量在亿级,如果只是纯粹的水平的扩展并不一定最好,如果对表进行拆分,比如可以按用户id进行水平拆表,通过对id取模的方式,将用户划分到多张表中,同时这些表也可以处在不同的服务器。按业务的垂直拆库和按用户水平拆表是分布式数据库中通用的解决方案。

分布式相关概念

分布式系统:将不同地点,不同功能,不同数据的多台计算机通过通信网络链接起来,在控制系统的统一管理下协调完成大规模信息处理任务的计算机系统。所以多台计算机是基于网络的。狭义的分布是指多台PC在地理位置上分布在不同的地方。

因为分布式系统本质上是不可靠的。在一个大的集群中,有节点宕掉是很正常的,宕掉之后就会对整体产生影响,你不可能出错之后重新计算。比完全宕掉麻烦的是节点假死,如果是控制节点,就有可能破坏一致性。所以分布式才衍生出以下诸多的概念。

分布式程序:运行在分布式系统上的计算机程序。

分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。

扫描二维码关注公众号,回复: 7637096 查看本文章

分布式计算和并行计算:共同点都是大任务划分为小任务。不同点:分布式计算,基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。

并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。

分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。

分布式文件系统:具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。

分布式程序设计和编译解释系统:一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。分层应用程序可以按层数进行划分,信息可以从数据层(通常存储在数据库)传送到表现层(显示在客户端上)。通常每层相对于其他层来说都运行在不同的系统中,或者在同一系统中的不同进程空间里。分层好处:减小整个应用程序的复杂性使应用程序能够更好的扩展,跟得上企业发展的需要。

白话解释分布式计算:假如有一个新闻网站,每天会有可能上千万用户会涌入进来看你的新闻,每个人会点击不同模块,比如"体育板块","娱乐板块"然后点击一些新闻标题,比如“20年来最刺激的一场比赛即将拉开帷幕”,接着可能发表一些评论或者收藏某个新闻。用户的各种行为有一个专业的名词,叫做“用户行为”。然后呢,在网站后台系统里需要有一些报表,要让他看到不同的编辑产出的文章的点击量汇总,做一个编辑的绩效排名,还有很多类似的事情。这些事情叫什么呢?你可以认为是基于用户行为数据进行分析和统计,产出各种各样的数据统计分析报表和结果,供网站的用户、管理人员来查看。这也有一个专业的名词,叫做“用户行为分析”。比如说有个哥儿们现在点了一下“体育”板块,你需要在网页前端或者是APP上立马发送一条日志到后台,记录清楚“id为117的用户点击了一下id位003的板块”。同样,这个东西也有一个专业的名词,叫做“用户行为日志”。假设每天1000万人访问你的新闻网站,平均每个人做出30个点击、评论以及收藏等行为,那么就是3亿条用户行为日志。每条用户行为日志的大小是100个字节,因为可能包含了很多很多的字段,比如他是在网页点击的,还是在手机APP上点击的,手机APP是用的什么操作系统,android还是IOS,类似这样的字段是很多的。那么你就有每天大概28GB左右的数据,这里一共包含3亿条。

这3亿条数据,你就自己写个Java程序,从一个超大的28GB的大日志文件里,一条一条读取日志来统计分析和计算,一直到把3亿条数据都计算完毕,不可想象,根据你的计算逻辑复杂度来说,搞不好要花费几十个小时的时间。这个时候,你就可以首先采用分布式存储的方式,把那3亿条数据分散存放在比如30台机器上,每台机器大概就放1000万条数据,大概就1GB的数据量。接着你就可以上分布式计算了,你可以把统计分析数据的计算任务,拆分成30个计算任务,每个计算任务都分发到一台机器上去运行。也就是说,就专门针对机器本地的1GB数据,那1000万条数据进行分析和计算。这样的好处就是可以依托30台机器的资源并行的进行数据的统计和分析,这也就是所谓的分布式计算了。每台机器的计算结果出来之后,就可以进行综合性的汇总,然后就可以拿到最终的一个分析结果。假设之前你的3亿条数据都在一个30GB的大文件里,然后你一个Java程序一条一条慢慢读慢慢计算,需要耗费30小时。那么现在把计算任务并行到了30台机器上去,就可以提升30倍的计算速度,是不是就只需要1小时就可以完成计算了?这个就是所谓的分布式计算,他一般是针对超大数据集,也就是现在很流行的大数据进行计算的。需要将超大数据集拆分成很多数据块分散在多台机器上,然后把计算任务分发到各个机器上去,利用多台机器的CPU、内存等计算资源来进行计算。大数据技术栈里,Hadoop HDFS就是用做分布式存储的,他可以把一个超大文件拆分为很多小的数据块放在很多机器上。而像Spark就是分布式计算系统,他可以把计算任务分发到各个机器上,对各个数据块进行并行计算。

"分布式"与"集群"区别

分布式:一个业务分拆多个子业务,部署在不同的服务器上。集群:同一个业务,部署在多个服务器上。集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,运行在不同的机器上,就可以叫分布式,C/S架构也可以叫分布式。集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

核心理念:并行拆分、横向扩展。即按照一定维度将系统进行拆分,系统各部分松耦合并行运行,并建立起较为完善的横向扩展与容错恢复机制。

节点概念:分布式由多个独立运行的计算机组成,每个计算机就可称为一个节点。

分布式的优点

物理部署分布式:多台计算机来共同承载业务。

处理过程分布式:系统各环节各司其职、并行处理,通过特定机制有效协同关联。

数据存储分布式:将数据分散存储,但不影响数据运算结果的完整性和一致性。

扩展能力较强:基于通用硬件扩展计算和存储能力来提升系统处理能力,满足业务不断增长的需求。

运行效率较高:对系统各环节合理拆分的基础上,通过并行处理进一步突破传统串行处理存在的效率瓶颈。

运行可靠性较好:将系统拆分后并行运行在多台相同的设备上,即使单一设备出现故障,整个系统仍可正常运转或仅局部受损。

成本优势明显:分布式系统基于相对廉价的通用计算和存储设备构建,获取相同处理能力的成本低于传统架构。

分布式数据库

分布式数据库一般都基于分布式文件系统实现数据的分片sharding,每中数据库都有自己的应用特性,就不做介绍,列出几个典型的应用,供参考Google的big table,实现数据的追加存储append,顺序写入快速,不适合随机读的场景。hadoop的HBase。mongodb,redis等非关系型数据库。分布式数据库,由分布在不同地方(地理位置上的分布)的多个数据库(称为站点)连接(基于计算机网络来连接)而成。利用分布式DBMS对各个站点统一管理,各个站点逻辑上统一起来。基于数据分布的透明性,仿佛在管理单个站点上的数据。优点在于:容错,提高访问速度。分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或结点。分布式数据库有一个统一的数据库管理系统来进行管理,称为分布式数据库管理系统。分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。从这三个基本特点还可以导出的其它特点有:数据分布透明性、集中与自治相结合的控制机制、适当的数据冗余度和事务管理的分布性。

分布式数据库按照各站点中数据库管理系统的数据模型的异同分为:

①异构型分布式数据库:

HDB Heterogeneous DataBase,相关的多个数据库系统的集合,可以实现数据的共享和透明访问每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DMBS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性、完整性控制和安全性控制。异构数据库系统的异构性主要体现在以下几个方面:

a.计算机体系结构的异构:各个参与的数据库可以分别运行在大型机、小型机、工作站、PC或嵌入式系统中。

b.基础操作系统的异构:各个数据库系统的基础操作系统可以是Unix、Windows NT、 Linux等。

c.DMBS本身的异构:可以是同为关系型数据库系统的Oracle、 SQL Server等,也可以是不同数据模型的数据库,如关系、模式、层次、网络、面向对象,函数型数据库共同组成一个异构数据库系统。

总结:不同的站点具有不同的模式和不同的数据库管理系统软件。站点之间并不了解,在事务处理过程中,它们仅仅为合作提供有限的功能。模式的差别经常是查询处理中的主要问题,软件的差别成为访问多站点事务处理的障碍。

②同构型分布式数据库

所有站点都使用共同的数据库管理系统软件,它们彼此了解,合作处理用户的需求。本地的站点放弃了作为其自治权一部分的更改模式或者数据库管理系统软件的权利。

什么叫"丢包"

顾名思义,在通信中是指通信数据包丢失。数据在通信网络上是以数据包为单位传输的,每个数据包中有表示数据信息和提供数据路由的帧。这就是说,不管网络情况有多好,数据都不是以线性(就像打电话一样)连续传输的,中间总是有空洞的。数据包的传输,不可能百分之百的能够完成,因为物理线路故障、设备故障、病毒攻击、路由信息错误等原因,总会有一定的损失。碰到这种情况,网络会自动的让通信的两端根据协议来补包。如果线路情况好,速度快,包的损失会非常小,补包的工作也相对较易完成,因此可以近似的将数据看作是无损传输。但是,如果线路较差(如用调制解调器),数据的损失量就会非常大,补包工作也不可能百分之百完成。在这种情况下,数据的传输就会出现空洞,造成丢包。

猜你喜欢

转载自blog.csdn.net/qq_36632174/article/details/102460892
今日推荐