1、什么是分布式 ?
分布式系统_(distributed system)_是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
分布式系统一定是由多个节点组成的系统。
其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已。
而实际上这些服务是通过背后的众多服务器组成的一个分布式系统,因此分布式系统看起来像是一个超级计算机一样。
分布式系统的关键点:
(1)分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
(2)这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题,提供可扩展性以及高可用性,业务中使用分布式的场景主要有分布式存储和分布式计算。分布式存储中可以将数据分布到多个节点上,不仅可以提高性能(可扩展性),同时也可以使用多个节点对同一份数据进行备份。
分布式环境的特点
(1)分布性:服务部署空间具有多样性。
(2)并发性:程序运行过程中,并发性操作是很常见的。比如同一个分布式系统中的多个节点,同时访问一个共享资源。
**(3)无序性:**进程之间的消息通信,会出现顺序不一致问题。
分布式环境下面临的问题
**(1)网络通信:网络本身的不可靠性,因此会涉及到一些网络通信问题
(2)网络分区(脑裂):当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信。
(3)三态:在分布式架构里面多了个状态:超时,因此有三态: 成功、失败、超时。
(4)分布式事务:ACID(原子性、一致性、隔离性、持久性)
(5)中心化和去中心化:**冷备或者热备
分布式架构里面,很多的架构思想采用的是:当集群发生故障的时候,集群中的人群会自动“选举”出一个新的领导。
最典型的是: zookeeper
2、分布式与集群的区别是什么?
(1)集群(cluster)
集群是指_在几个服务器上部署_相同_的应用程序_来分担客户端的请求。
它是同一个系统部署在不同的服务器上,比如一个登陆系统部署在不同的服务器上。
好比多个人一起做同样的事。
集群主要的使用场景是为了分担请求的压力。
但是,当压力进一步增大的时候,可能在需要存储的部分,比如mysql无法面对大量的“写压力”。
因为在mysql做成集群之后,主要的写压力还是在master的机器上,其他slave机器无法分担写压力,这时,就引出了“分布式”。
(2)分布式
分布式是指多个系统协同合作完成一个特定任务的系统。
它是**不同的系统部署在不同**的服务器上,服务器之间相互调用。
好比多个人一起做不同的事。
分布式是解决中心化管理的问题,把所有的任务叠加到一个节点处理,太慢了。
所以把一个大问题拆分为多个小问题,并分别解决,最终协同合作。
分布式的主要工作是分解任务,把职能拆解。
分布式的主要应用场景是单台机器已经无法满足这种性能的要求,必须要融合多个节点,并且节点之间的相关部分是有交互的。
相当于在写mysql的时候,每个节点存储部分数据(分库分表),这就是分布式存储的由来。
存储一些非结构化数据:静态文件、图片、pdf、小视频 …这些也是分布式文件系统的由来。
3、用工作中的例子,来说明集群和分布式及其区别:
比方一个初始的创业公司,起初业务量少时只有一个开发,那么这个开发,开发、测试的事都要干,一人身兼数职。
后来随着业务增加,一个开发忙不过来,又招聘了一个开发,两个开发都要开发和测试,是全栈工程师的角色。那么这两个开发的关系是集群。
再后来随着业务不断头大,为了让开发专业写代码,各个角色分工协作,各司其职,便招聘了1名测试人员,那么开发与测试人员的关系是分布式。
再后来,随着业务的不断状大,当前测试人力已不满足要求,又招聘了1名测试。那么这2名测试是集群关系。
_
下面用一张简图来表示他们之间的关系:
4、最后,总结一下集群和分布式以及它们的区别:
【分布式】:把一个大业务拆分成多个子业务,每个子业务都是一套独立的系统,子业务之间相互协作最终完成整体的大业务。
把一套系统拆分成不同的子系统部署在不同服务器上,这叫分布式。
分布式处理里必然涉及任务分解与答案归并。分布式中的某个子任务节点,可以是一个集群,该集群中的任一节点都作为一个完整的任务出现。
**【集群】:**把处理同一个业务的系统部署多个节点 。
_把多个相同的系统部署在不同的服务器上,这叫集群。_部署在不同服务器上的相同系统必然要做“负载均衡”。
集群主要是简单加机器解决问题,对于问题本身不做任何分解。
集群和分布式都是由多个节点组成,但集群中各节点间基本不需要通信协调,而分布式中各个节点的通信协调是必不可少的。