其实所谓的“分布式系统”,就是想尽办法引入更多的硬件资源!!!
明确几个概念:
- 应用/系统:一个应用就是一个/组服务器程序。
- 模块/组件:一个应用里面有很多个功能,每个独立的功能就可以称为是一个模块/组件。
- 分布式:引入多个主机/服务器,协同配合完成一系列的工作。
- 主/从:是分布式系统中比较典型的结构,多个服务器节点,其中一个是主,另外的是从。从节点的数据是从主节点这里同步过来的。
- 中间件:和业务无关的服务(功能更通用的服务),比如:数据库、缓存、消息队列…。
- 可用性:系统整体可用的时间/总的时间。
- 响应时长:响应时长可以用来衡量服务器的性能。
- 吞吐vs并发:衡量系统的处理请求的能力。
1. 单机架构
只有一台服务器,这台服务器负责所有的工作。

单机程序也可以把数据库服务器去除掉,只用一个应用服务器既负责处理业务,又负责数据存储。这种方式会比较麻烦。
现在绝大部分公司的产品都是使用的这种单机架构。
现在计算机硬件的发展速度很快,哪怕只有一台主机,性能也是很高的,可以支撑非常高的并发和非常大的数据存储。
一台主机的硬件资源(CPU、内存、硬盘、网络…)是优先的。服务器每次收到一个请求,都是需要消耗这些资源的,如果同一时刻,服务器需要处理的请求过多。此时就可能会导致某个硬件资源不够用,无论是哪方面的资源不够用了,都可能会导致服务器处理请求的时间变长,甚至会处理出错,这极大的降低了用户的体验感。
遇到服务器资源不够用的情况,一般是有两种处理方法:
- 开源。这种方式比较简单粗暴,就是引入更多的硬件资源。但是一台主机上面能增加的硬件资源取决于主板的扩展能力,也是有限的。当一台主机的硬件扩展到极限了,还是达不到我们业务的需求,就只能引入更多的主机了。但是并不是说只需要买来新的主机就可以解决问题了,也需要在软件上面做出对应的适配和调整。一旦引入多台主机,这个系统就可以称为“分布式系统”。
- 节流。这种方式是在软件上进行优化,需要通过性能测试,找到是哪个环节出现了瓶颈,然后对症下药,对其进行优化。但是这种方式就比较难,对于程序员的水平要求比较高。
由于引入分布式会使系统的复杂程度大大提高,所以引入分布式系统是无奈之举,是万不得已的。
2. 应用服务和数据库服务分离

采用应用服务和数据库服务分离,就可以根据不同的业务需求来配置服务器的硬件资源,从而达到更高的性价比。比如应用服务器中可能会包含大量的业务逻辑,就会比较吃CPU和内存;数据库服务器,就需要更大的硬盘空间,更快的数据访问速度,,就可以配置更大硬盘的服务器,甚至可以使用SSD硬盘。
硬盘有两种:
- 机械硬盘–便宜–访问速度慢。
- 固态硬盘–贵–访问速度快。
3. 引入负载均衡器
如果业务量进一步增加,一个应用服务器难以支撑,那么此时就可以采用增加应用层硬件的方式,将用户流量分担到不同的应用服务器上,来提升系统的承载能力。

用户的请求先到达负载均衡器/网关服务器(单独的服务器)。负载均衡器有很多种算法,将用户的请求合理的分配给各个应用服务器。
问:负载均衡接收了用户的所有请求,负载均衡器能顶住吗?
答:负载均衡器对于请求的承担能力是要远超于应用服务器的。负载均衡器就相当于是老板,只负责给应用服务器分配任务;应用服务器相当于是组员,负责执行任务。
如果用户的请求量大到负载均衡器也承载不住了,那么就可以引入更多的负载均衡器。
通过增加应用服务器的方式,解决了处理更高请求量的问题,但是随着请求量的增加,对应的存储服务器要承担的请求量也会更多,此时就引入了读写分离,
4. 引入读写分离
在实际的应用场景中,读的频率是要比写高很多的。

主服务器一般是一个,从服务器可以有多个(一主多从),主从库通过数据同步,从库就可以维护着和主库一致的数据。
5. 引入缓存–冷热分离
数据库有着一个天然的问题,那就是响应速度慢!!

堆数据进行区分“冷热”,将热点数据放到缓存中,缓存的访问速度往往比数据库要快很多。
在缓存中只存放一小部分热点数据,在数据中有一个“二八原则”:20%的数据,能够支撑80%的访问量。
虽然在缓存中只存放20%的热点数据,但是在存储服务器中并不是只存放其余的80%数据,存储服务器中仍然存放的是全量数据。
这里的缓存数据库就是Redis,缓存虽然访问速度快,但是它小。
6. 引入分库分表

引入分布式系统,不光是要能够应对更高的请求量,同时也要能够应对更大的数据量。可能会出现一台数据库服务器已经存不下,一台主机存不下,就需要多台主机来存储。
就可以针对数据库进行进一步的拆分(分库分表),本来只有一个数据库服务器,这个数据库服务器上有多个数据库,现在就可以引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库。如果某个表特别大,大到一台主机存不下,也可以针对表进行拆分。
具体的分库分表如何实践,需要结合实际的业务场景来展开,可以说我们做的一切都是为了业务!!
7. 引入微服务

上面的应用服务器,一个服务器里面做了很多业务,这就会导致这一个服务器的代码变得越来越复杂。为了更方便代码的维护,就可以把一个复杂的服务器拆分成多个的,功能更单一,但是更小的服务器。
引入微服务的缺点:
- 系统的性能降低。拆出来更多的服务,多个功能之间更加依赖网络通信,网络通信的速度很可能是比磁盘还要慢的。幸运的是随着硬件技术的发展,现在已经有了万兆网卡,读写速度已经能够超过硬盘读写了,但是它贵。
- 系统复杂度提高,可用性受到影响。服务器越多,出现问题的概率就越大,这就需要一系列的手段来保证系统的可用性(更丰富的监控报警,以及配套的运维人员)。
微服务的优势:
3. 使用微服务可能更方便于功能的复用。
4. 可以给不同的服务进行不同的部署。
8. 集群和分布式
集群 是将一个系统完整的部署到多个服务器上,每个服务器都能提供系统的所有服务(多个计算机做相同的事),多个服务器通过负载均衡调度完成任务,每个服务器称为集群的节点,每个节点的功能是相同的,并且可以替代。
分布式 是将一个系统拆分为多个子系统,多个子系统部署在多个服务器上,多个服务器上的子系统协同合作完成一个特定任务(多个计算机做不同的事),每个节点完成的业务是不同的,一个节点出现问题,这个业务就不可访问了。
在实践中,很多时候分布式和集群是相互配合使用的,一个分布式的某一个节点,可能是一个集群,分布式架构大多是建立在集群上的。一般会把分布式和集群统称为分布式架构。

1417

被折叠的 条评论
为什么被折叠?



