文章目录
- 分布式
- 单机架构
- 应用数据分离架构
- 应用服务集群架构
- 负载均衡
- 读写分离
- 冷热分离架构
- 垂直分库
- 微服务架构
分布式
下面就要简单对于分布式进行一个认识了
单机架构
在进行了解分布式之前,先了解一下什么是单机架构
如上所示就是一个单机架构,对于单价架构来说,就是只有一台服务器,这个服务器可以负责处理所有的工作
我们假设这是一个电商网站,那么这个应用服务其实就是我们写的一个服务器程序,比如说有前面写的一个C++的httplib这样的程序,而这样的HTTP服务器是可以和MySQL数据库的服务进行结合起来的,那么对于MySQL来说,它本质上其实是一个客户端服务端结构的高层许,本体上是一个MySQL的服务器,这个服务器来负责进行数据的存储和组织的部分
而在大多的项目中,其实使用的就是这种比较典型的单机架构,单机架构的特点其实就是简单,并且由于现在计算机的硬件已经发达到了一定的程度,所以哪怕只有一个主机,其实已经是可以有比较高的性能了,可以支持比较大的并发和数据的存储
但是事实上,当业务到达一定程度的时候,其实一个主机已经很难进行处理了,那么就需要用到的是主机,其实本质上是硬件资源
一个主机上的硬件资源是有限的
这句话其实很好理解,因为在一台主机上,它的硬件资源包括但不限于有CPU,内存,硬盘,网络等等,当服务器收到请求的时候,其实都是需要消耗这些资源的,在同一时刻,如果处理的请求比较多,那么就会造成此时的某个硬件资源就不够用,那这是一个比较大的问题,对应该如何进行解决呢?
开源和节流
解决方式也比较简单,开源或者节流,下面一一进行分析
对于开源来说,其实就是新增一些新的硬件资源,比如说可以引入更大的内存,或者新加一些内存条等,但是这样的设计也是有问题的,因为一个硬件的数量是有限的,这就意味着,一个主机的性能是有上限的,当我们需要的性能到达这个瓶颈的时候,本质上就需要新增主机来进行资源
从某种意义来说,如果一旦引入了多台主机,就可以把系统称之为分布式系统了
对于节流来说,就需要用到一些专业知识来对于数据进行优化,需要对于性能测试来看到底是哪个模块出现了问题,这一般需要比较高的水平
应用数据分离架构
所以就引出了下面的这种架构体系模式,可以把应用服务器和存储服务器分开,例如:
下面分开来看这两个模块:
应用服务器:
对于应用服务器来说,里面可能包含有很多的业务,这些业务都会需要进行CPU和内存的资源
数据库服务器:
对于这种服务器来说,它就需要更大的磁盘空间,更快的数据访问速度,因此可以搭配有对应的SSD硬盘等
把这两个服务器进行分离,就可以到达一个更高的性价比
应用服务集群架构
应用服务器通常来说比较吃CPU和内存,那么如果CPU和内存都被吃掉了,那此时应用服务器就无法满足要求了,那此时怎么办?
其实一个比较好的解决措施就是多来几个应用服务器即可,这样就可以解决这样的问题,具体的设计模式如下所示:
看起来是两个应用服务器,实际上也可能是多个应用服务器,而对于应用服务器来说,用户的请求实际上会优先到达负载均衡器或者是网关服务器,之后会被分配到每一个应用服务器,所以这也就使得会诞生很多种不同的算法,来进行合适的分配
假设现在有1w个请求,经过分配后就可以让每一个服务器去分担5k个,这样就实现了分配的道理
负载均衡
上面说了负载均衡这个内容,那么现在问题来了,什么是负载均衡呢?
上图所示就是负载均衡的一个模式,其中需要注意的是上面的负载均衡器,这是什么东西?
这个东西就是负责进行负载分配的一个分配体,当所有的请求到来的时候,都需要这个内容来帮助进行请求的分配,所以这就意味着这个东西必然有很高的承担能力,这个承担能力是要远远高于普通的应用服务器的
但是这就可以了吗?其实也是不一定的,因为负载均衡器也可能会无法承受一个比较大的请求,此时就需要引入更多的负载均衡器,也就是我们俗称的引入多个机房,让多个机房共同来进行分配
但这其实并不是一件好事,因为风险总是和收益并存的,只是单纯这样的设计并不会有比较大的风险,但是随着机房的增多,机器的增多,这就意味着出现问题的概率就会大大增加,此时就会导致出现问题
读写分离
随着业务的增长,可以动态扩张服务器来进行压力的缓解,但是实际上,数据的压力会到达一个系统承载能力的上限,此时如果一味地去扩展数据库的服务器是不现实的,因为存在数据一致性的问题,例如对于同样的数据,如果在不同的机器上是不同的数据,那这必然是一件非常危险的事,所以就诞生了下面的模式-----主从分离架构
如何理解?只保留一个主要的数据库作为写入数据库,其他的数据库都是作为从属数据库,从库的数据全部来源于主库的数据,在经过同步之后,从库中就一直维护着的是和主库一致的数据
我们为了分担数据库的压力,可以让数据的请求全部交给主库来处理,但是读的请求可以分配到各个库当中,在大多数的系统中,读的比例是要远远高于写的比例的,所以就有了读写分离这样的架构体系
主服务器一般是一个,从属服务器一般是多个,这叫做一主多从,让数据库也通过负载均衡的方式,让应用服务器来进行访问
冷热分离架构
但是数据库有一个天然的问题,那就是响应速度比较慢,那么如何解决这个问题?此时就引入了所谓冷热分离架构体系
把数据区分为冷热两个部分,把热点数据缓存到缓存中,在缓存中的访问速度就要比数据库块多了,具体的实例如下所示:
如上所示,在原来的基础上新增一个缓存服务器,这个缓存服务器就会帮助数据库服务器进行负重前行,而在缓存服务器当中其实存放的只是一小部分的热点数据,也就是会频繁访问到的数据,缓存虽然快,但不是没有代价的,那就是它很小,这也就解释了不会有完美的解决方案,只是会有不同的优化场景
垂直分库
引入了分布式系统,不光要去应对更高的并发量,但是也要应对更大的数据量,因此存储,也就变成了一个比较大的问题
是否可能会出现的场景是,一台数据库服务器已经存不下数据了呢?当然会出现这样的情况,既然一个主机存不下,那么就需要用到更多的主机来进行存储,所以下面引入的这个模式架构体系,就是叫做分库分表
简单来说,就是本来一个数据库服务器,这个数据库服务器上有多个数据库,现在就可以引入多个数据库服务器,让每一个数据库服务器去存储一个或者一部分数据库,甚至说,当一个表特别大的时候,也可以对于表进行拆分
微服务架构
在之前的应用服务器当中,一个服务器中可能做了很多的业务,这就会导致一个服务器的代码会变的非常的复杂,为了解决这样的问题,就可以使用一个微服务的概念,把一个复杂的服务器拆解为更多的,功能更加单一的更小的服务器
微服务就使得服务器的种类和数量增加了