目录
一、Redis应用
二、实现方式
三、Redis应用
四、分布式系统
五、分布式系统实现
1、应用服务和数据库服务分离
2、引入负载均衡,应用服务器集群(解决高并发)
3、引入读写分离,数据库主从结构(解决高并发)
4、引入缓存,冷热数据分离(解决高并发)
5、分库分表(解决高数据量)
6、引入微服务架构(从业务上进一步拆分应用服务器)
六、总结
一、Redis应用
Redis是在内存中存储数据,主要应用于分布式系统,如果只是单机程序,直接通过变量存储数据的方式是比Redis更优的选择
二、实现方式
由于进程间隔离性,进程间的通信基于网络。Redis就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。
三、Redis应用
1、数据库(database)
MySQL最大的问题在于访问速度比较慢,因为数据存储在硬盘上。Redis数据存储在内存上,速度快了很多。但是Redis和MySQL的业务场景不一样,没办法定量的衡量到底快多少。Redis最大的劣势是存储空间是有限的。
2、缓存(cache)
将Redis和MySQL结合起来,又打又快。Redis充当缓存的角色,劣势是系统的复杂度大大提升了,而且如果数据发生修改。还涉及到Redis与MySQL之间的数据同步问题。
3、streaming engine
Redis的初心,最初就是用来作为一个“消息中间件”(消息队列)的分布式系统下的生产者消费者模型,应用的很少。业界有更多更专业的消息中间件。
四、分布式系统
1、单机架构
只有一台服务器,这个服务器负责所有的工作。
2、分布式
如果业务进一步增长,用户量和数据都水涨船高,一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源。
一台主机的硬件资源是有上限的,这里的硬件资源包括但不限于以下几种:CPU,内存,硬盘,网络等等。服务器每收到一个请求,都是需要消耗上述的一些资源的,如果同一时刻,处理的请求多了,此时可能会导致某个硬件资源不够用了,无论是哪个方面不够用了,都可能会导致服务器请求处理的时间变长,甚至与处理出错。
解决以上问题,有下面两种方法:
(1)节流
软件上优化,通过性能测试。找到是哪个环节出现了瓶颈,再去对症下药。
(2)开源(简单粗暴)
增加更多的硬件资源,但是一个主机上面能增加的硬件资源也是有限的,取决于主板的扩展能力,也是有上限的。当一台主机扩展到上限了,就只能引入多台主机了,并且要在软件上做出相应的调整和适配。一旦引入多个主机了,咱们的系统就可以被称为“分布式系统”
五、分布式系统实现
1、应用服务和数据库服务分离
2、引入负载均衡,应用服务器集群(解决高并发)
引入更多的服务器节点(请求量和数据量进一步增加)
对于负载均衡器来说,有很多的负载均衡具体的算法,需要结合具体的业务场景。
3、引入读写分离,数据库主从结构(解决高并发)
一个数据库节点作为主节点,其他N个数据库节点作为从节点。主节点负责写数据,从节点负责读数据。主节点需要把修改过的数据同步给从节点。
实际的应用场景中,读的频率是要比写的概率要高的。因此主服务器一般是一个,从服务器可以有多个。同时从数据库通过负载均衡的方式,让应用服务器进行访问。
4、引入缓存,冷热数据分离(解决高并发)
数据库天然有个问题:相应速度很慢。把数据区分“冷热”,热点数据放到缓存中。
5、分库分表(解决高数据量)
引入分布式系统,不光要能够去应对更高的请求量(并发量),同时也要能应对更大的数据量。当数据量很大时,就需要多台主机来存储。
6、引入微服务架构(从业务上进一步拆分应用服务器)
引入微服务,解决了管理人的问题,但是系统性能会下降。因为是网络间通信,比进程间通信速度大大降低。要想保证性能不下降的太多,只能引入更多的机器,更多的硬件资源。并且系统复杂度更高,可用性收到影响,出现问题的概率就更大了。
微服务的优势:
解决了人的问题;
使用微服务,可以更方便的完成功能的复用;
可以给不同的服务进行不同的部署
六、总结
一些概念:
1、应用(Application)/ 系统(System)
一个应用,就是一个/组 服务器程序
2、模块(Module)/ 组件(Component)
一个应用,里面有很多功能,每个独立的功能,就可以称为是一个模块/组件
3、分布式(Distributed)
引入多个主机/服务器,协同完成一系列的工作(物理上的多个主机)
4、集群(Cluster)
引入多个主机/服务器,协同完成一系列的工作(逻辑上的多个主机)
5、主(Master)/ 从(Slave)
多个服务器节点,其中一个是主,另外的是从。从节点的数据要从主节点这里同步过来。
6、中间件(Middleware)
和业务无关的服务(功能更通用的服务)
例如:
数据库
缓存
消息队列
.......
7、可用性(Availability)
系统整体可用时间 / 总的时间 是一个系统的第一要务
8、 响应时长(衡量服务器的性能)
9、吞吐(衡量系统处理请求的能力)
总结:所谓的分布式系统,就是想办法引入更多的硬件资源!!