分布式、集群概念的理解

一、分布式的理解

1、何为分布式?

一个业务分拆多个子业务,部署在不同的服务器上。 然后通过一定的通信协议,能够让这些子业务之间相互通信。

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

所谓分布式,无非就是”将一个系统拆分成多个子系统并散布到不同设备“的过程而已。
本质上而言,实现一个分布式系统,最核心的部分无非有两点:
(1). 如何拆分——可以有很多方式,核心依据一是业务需求,二是成本限制。这是实践中构建分布式系统时最主要的设计依据。
(2). 如何连接——光把系统拆开成 Process 还不够,关键是拆开后的 Process 之间还要能通信,因此涉及通信协议设计的问题,需要考虑的因素很多,好消息是这部分其实成熟方案很多。

分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,其实很多号称分布式专家的人也就停留于此,大致结构如下图所示:

分布式、集群概念的理解_第1张图片
分布式.gif

这种环境下真正进行分布式的只是web server而已,并且web server之间没有任何联系,所以结构和实现都非常简单。

有些情况下,对分布式的需求就没这么简单,在每个环节上都有分布式的需求,比如Load Balance、DB、Cache和文件等等,并且当分布式节点之间有关联时,还得考虑之间的通讯,另外,节点非常多的时候,得有监控和管理来支撑。这样看起来,分布式是一个非常庞大的体系,只不过你可以根据具体需求进行适当地裁剪。按照最完备的分布式体系来看,可以由以下模块组成:


分布式、集群概念的理解_第2张图片
分布式结构.gif

对上面一些名词的解释:
分布式任务处理服务:负责具体的业务逻辑处理
分布式节点注册和查询:负责管理所有分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁
分布式DB:分布式结构化数据存取
分布式Cache:分布式缓存数据(非持久化)存取
分布式文件:分布式文件存取
网络通信:节点之间的网络数据通信
监控管理:搜集、监控和诊断所有节点运行状态
分布式编程语言:用于分布式环境下的专有编程语言,比如Elang、Scala
分布式算法:为解决分布式环境下一些特有问题的算法,比如解决一致性问题的Paxos算法

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

  • 为了性能扩展——系统负载高,单台机器无法承载,希望通过使用多台机器来提高系统的负载能力。
  • 为了增强可靠性——软件不是完美的,网络不是完美的,甚至机器本身也不可能是完美的,随时可能会出错,为了避免故障,需要将业务分散开保留一定的冗余度。

二、集群

1、集群的概念

网络技术的飞速发展,给网络带宽和服务器性能带来了巨大的挑战,基于互联网的应用系统越来越多的瓶颈出现在服务器端,这对服务器提出了更高的要求。集群是一组协同工作的服务器集合,用来提供比单一服务更稳定、更高效、更具扩展性的服务平台。在外界来看,集群是一个独立的服务实体,但实际上,集群内部有两个或两个以上的服务实体在协调、配合完成一系列复杂的工作。
集群一般由两个或两个以上的服务器组建而成,每个服务器被称为一个集群节点,集群节点之间可以相互通信。通信方式有两种,一种是基于RS232线的心跳监控,另一种是一块单独的网卡 来跑心跳。因而,集群具有节点服务状态监控功能,同时还必须具有服务实体扩展功能,可以灵活地增加和剔除某个服务实体。
在集群中,同样的服务可以由多个服务实体提供。因此,当一个节点出现故障时,集群的另一个节点,可以自动接管故障节点的资源,从而保证服务持久、不间断地运行。因而集群具有故障
自动转移功能。
一个集群系统必须拥有共享的数据存储,因为集群对外提供的服务是一致的,任何一个集群节点运行一个应用时,应用的数据集中存储在节点共享空间内,而每个节点的操作系统上仅运行应用的服务,同时存储应用程序文件。
综上所述,构建一个集群系统至少需要两台服务器,同时还需要有串口线、集群软件和共享存储设备等。

2、集群的分类

集群一般被分为三种类型,高可用集群如RHCS、LifeKeeper等,负载均衡集群如LVS等、高性能运算集群;分布式应该是高性能运算集群范畴内。

三、分布式与集群的区别,总结

分布式 集群
不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题 同一个业务部署在多台机器上,提高系统可用性
分布式是个工作方式 集群是个物理形态
一个程序或系统,只要运行在不同的机器上,就可以叫分布式,C/S架构也可以叫分布式。 只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道
分布式系统则不强调这一点 集群一般是物理集中、统一管理的
分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。 集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统
分布式是相对中心化而来,强调的是任务在多个物理隔离的节点上进行。中心化带来的主要问题是可靠性,若中心节点宕机则整个系统不可用,分布式除了解决部分中心化问题,也倾向于分散负载,但分布式会带来很多的其他问题,最主要的就是一致性。 集群就是逻辑上处理同一任务的机器集合,可以属于同一机房,也可分属不同的机房。分布式这个概念可以运行在某个集群里面,某个集群也可作为分布式概念的一个节点。
分布式是指将不同的业务分布在不同的地方 集群指的是将几台服务器集中在一起,实现同一业务
分布式中的每一个节点,都可以做集群 集群并不一定就是分布式的
分布式是以缩短单个任务的执行时间来提升效率的 集群则是通过提高单位时间内执行的任务数来提升效率。

例如:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。
采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)
而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,1小时后,10个任务同时完成,这样,整体来看,还是1小时内完成一个任务!

很形象的分布式与集群的比喻:
小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群

本文的一些参考文章:
https://blog.csdn.net/CSDN297904380/article/details/78802763
https://blog.csdn.net/cutesource/article/details/5811914
http://www.cnblogs.com/aspirant/p/5697807.html

每天学习一个半小时的新知识.2018/04/23

你可能感兴趣的:(分布式、集群概念的理解)