本期只是简单了解,想要深入学习,还需要看看其他资源~
目录
一、单机架构
二、数据库和应用分离
三、负载均衡——应用服务器
四、读写分离——数据库主从结构
五、引入缓存——冷热数据分离
六、分库分表——数据库扩展空间
七、微服务——进一步拆分应用服务器
一、单机架构
在了解分布式之前,我们当然是要先了解一下什么是单机架构?
单机架构,从字面就可以理解,就是只有一台服务器,该服务器来负责所有工作~
示图:
- 上述中的应用服务,也就是我们以前开发过的,例如我做的是Java-Spring,就是写了一个HTTP服务器
- 上述的数据库服务,也是我们用过的——MySQL,MySQL其实本来就是一个客户端服务器结构的程序,他的本体是MySQL服务器(本体就是存储和组织数据的部分)。既然MySQL就是一个客户端服务器,那谁是他的客户端呢,应用服务就是他的客户端,就是上述所说的HTTP服务器~
- 上述中,也可以不要数据库服务,直接在应用服务中解决数据问题,但这种实现起来更麻烦
- 当遇到服务器不够用时,解决办法:1、开源:引入更多的硬件资源-但这上限要取决于该主机的主板的扩展能力2、节流:在软件上优化,对于程序员水平要求较高
- 在单机架构,如果说硬件资源被我们充分利用后,还是不满足我们的使用,也就是一台主机应付不了了,此时就可以引入更多的主机,一旦引入多台主机,该系统就叫做是“分布式系统”
二、数据库和应用分离
字面意思,就是将上述的应用服务和数据库服务分离开,示图:
- 应用服务器,内部可能会包含很多的业务逻辑,可能会比较吃CPU和内存
- 数据库服务器,需要更大的硬盘空间,更快的数据访问速度,可以配置更大硬盘的服务器,甚至还可以上SSD(固态硬盘)
- 综合上述服务器的特点,为了达到更高的性价比,我们可以给不同的服务器配置不同的硬盘
三、负载均衡——应用服务器
负载均衡,就是当我们引入多台主机作为应用服务器时,要使用负载均衡,使得各个应用服务器所承载的压力是相对来说比较平均的,示图:
- 由于应用服务器可能会比较吃CPU和内存,所以当CPU和内存吃完了,应用服务器就顶不住了,因此引入更多的应用服务器,但又担心,请求随机分配而导致可能都分配都同一台主机上,因此就需要负载均衡了~
- 对于负载均衡器来说,有很多的负载均衡的具体算法,例如:根据用户id,再通过模运算来分配
- 还有就是不用担心负载均衡不够用了怎么,首先负载均衡就相当于公司领导,应用服务器就是普通员工,所以领导只管分配任务,也就是请求量的承担能力会远超过应用服务器;其次,就算是请求量太大了,负载均衡器扛不住了,我们大可以引入更多的负载均衡器~
- 小提示:机器变多了,管理成本就会提高,出错率也会提高
四、读写分离——数据库主从结构
因为在绝大多数实际应用场景中,读的频率是要比写高很多的,因此将读写分离,进一步提升性能,示图:
- 主服务器一般是一个,从服务器有多个(一主多从)~
- 同时 从 数据库通过负载均衡的方式,让应用服务器进行访问~
五、引入缓存——冷热数据分离
数据库有个天然问题就是,响应速度慢!再结合,数据遵循的二八原则,因此我们把数据区分为“冷热”,热点数据放到缓存中,缓存的访问速度是比数据库快非常多的~示图:
- 存储服务器中,存储的是完整数据
- 缓存服务器中只存放一小部分的热数据-百分之二十的数据能够支持百分之八十的访问量~实际情况略有差异~
六、分库分表——数据库扩展空间
引入分布式系统,不仅会面临更高的请求量,也会面临更大的数据量,也就是说,会存在一台服务器存不下数据,例如存储视频,可能就会导致这种问题,图示:
- 情况一:表特别大,要拆分表
- 情况二: 库特别大,拆分库,每个数据库服务器存储一部分数据库
七、微服务——进一步拆分应用服务器
当业务越来越庞大时,一个服务器程序中可能有很多的业务,就会导致服务器的代码越来越复杂。而为了便于维护代码,就可以把一个复杂的服务器拆分成更多的,功能更单一的,但是更小的服务器——微服务
图示:
- 服务器的种类和数量增加
- 应用服务器复杂后,维护的人就要增多,微服务更利于给人划分领域,把这些人组织好,按照功能,拆分成多组微服务,就可以有利于人员的组织结构分配了,也就是说,微服务就是解决了人的问题
- 系统的性能下降。为保证下降不能太多,就需要引入更多的机器,更多的硬件资源~【拆分出来的服务,多个功能之间要更依赖网络通信,而网络通信的速度很可能比硬盘还要慢】
- 可用性受到影响。服务器多,出问题的概率增加~【需要更丰富的监控报警,以及配套的运维人员】
- 可以给不同的额服务进行不同的部署
本期只是简单了解,想要深入学习,还需要看看其他资源~