什么是集中式系统?
集中式系统是指把整个系统的所有功能,比如数据库、缓存等这些全都部署在一起,然后通过整套系统对外提供服务。但是集中式系统存在大而复杂、难以维护、容易发生单点故障、扩展性比较差等问题。然而这些问题在分布式系统中就可以很好地解决。
什么是分布式系统?
分布式系统是相对相对于集中式系统而言的,分布式系统是指将一个集中式的系统拆分成多个系统,然后每一个系统单独对外提供部分功能,整个分布式系统整体对外提供一整套服务。但是对于访问分布式系统的用户来说,其感知就如同在访问一台计算机一样。
分布式系统即通过利用多台普通计算机(相对于昂贵的大型机)组成分布式集群,对外提供系统服务。随着计算机台数的增加,CPU、内存、存储资源等计算机资源也不断变多,该系统可以处理的并发访问量也就越大,但是随之而来也带来了一些问题,由于是集群部署,不是在一台机子上,所以该系统可能存在许多问题,如网络通信延迟、数据一致性等问题。
这里我们拿一个电商网站来举例(主要是电商网站一般功能比较齐全,很多场景都能学习到),我们这里把这个电商系统拆分成多个子系统,比如订单系统、购物车系统、物流系统、支付系统等。我们把不同的模块部署到不同的机器上,各个模块之间通过RPC(Dubbo、gRPC)即远程服务调用等方式进行通信,然后以一个分布式系统的方式对外提供服务。
分布式与集群之间的区别?
分布式(Distributed) 是指在多台不同的服务器中部署不同的服务模块, 通过远程调用的方式相互之间进行协同工作,然后对外提供服务。
集群(cluster) 是指在多台不同的服务器中部署相同的应用或者服务模块,构成一个集群,通过请求负载均衡的方式对外提供服务。
那如何理解集群与分布式之间的区别呢?你可以通过一个案例来理解,集群的话就是一个组织里的所有人都干同一件事情,比如,百度搜索,这个在每个人的电脑上其都是一样的,主要负责搜索的业务,而分布式就是指一个团队中每部分人负责一部分的内容,比如阿里里面,有些人负责淘宝业务的内容,有些人负责阿里云业务·······每部分人负责的业务有所差异,这种就是分布式。
分布式系统的特征
分布式系统需要各个主机之间通信和协调主要通过网络进行,所以,分布式系统中的计算机在空间上几乎没有任何限制,这些计算机可能被放在不同的机柜上,也可能被部署在不同的机房中,还可能在不同的城市中,对于大型的网站甚至可能分布在不同的国家和地区。
但是,无论空间上如何分布,一个标准的分布式系统应该具有以下几个主要特征:
- 分布性
分布式系统中的多台计算机之间在空间位置上可以随意分布,系统中的多台计算机之间没有主、从之分,即没有控制整个系统的主机,也没有受控的从机。
- 透明性
系统资源被所有计算机共享。每台计算机的用户不仅可以使用本机的资源,还可以使用本分布式系统中其他计算机的资源(包括CPU、文件、打印机等)。
- 同一性
系统中的若干台计算机可以互相协作来完成一个共同的任务,或者说一个程序可以分布在几台计算机上并行地运行。
- 通信性
系统中任意两台计算机都可以通过通信来交换信息。
相比集中式系统,分布式系统有什么优势与不足?
和集中式系统相比,分布式系统的性价比更高、处理能力更强、可靠性更高、也有很好的扩展性。但是,分布式在解决了网站的高并发问题的同时也带来了一些其他问题。
- 分布式的必要条件就是网络,这可能对性能甚至服务能力造成一定的影响。
- 一个集群中的服务器数量越多,服务器宕机的概率也就越大。
- 由于服务在集群中分布式部署,用户的请求只会落到其中一台机器上,所以,一旦处理不好就很容易产生数据一致性问题。