浅谈Redis
Redis用于存储数据,且在内存当中进行存储。
但是在日常编写代码中,定义一个变量也就属于在内存当中存储一个数据。
Redis主要会在分布式系统当中发挥重要作用,如果只是单机程序,直接通过变量存储数据的方式会比使用Redis更优。=
为什么会使用Redis?
主要原因是:当今的系统一般是分布式系统,存在多个进程,而进程是具有隔离性的。
我们如果要在进程之间通信,就需要通过网络的方式。
所以,Redis是基于网络的,可以把自己的内存中的变量给别的进程,甚至别的主机的进程进行使用。
与MySQL进行对比
MySQL存在一个最大的问题:访问数据的速度很慢。MySQL的数据存在于硬盘当中。
很多互联网产品对于性能的要求极高。
所以Redis也可以作为数据库进行使用。
Redis虽然快,但是存储空间小。
是否能够让Redis和MySQL的优点结合起来?
把常使用数据存放在Redis当中,将不常用的数据存储在MySQL当中。
当然代价是有的,就是系统的复杂度提升。
数据发生修改,还存在Redis和MySQL的数据同步问题。
单机架构与分布式架构
单机架构,只有一台服务器,这个服务器负责所有的工作。
分布式,引入多台主机。
负载均衡器
负载均衡器(Load Balancer)是在计算机网络中常用的一种技术,用于在多个服务器之间分配负载,以实现更好的性能、可靠性和可扩展性。它可以帮助有效地处理大量的请求并确保系统的稳定运行。
负载均衡器的主要目标是将请求分发到多个服务器上,以避免单个服务器过载,并确保系统能够高效地响应用户的请求。它可以根据不同的算法和条件来决定如何分配负载,例如轮询、加权轮询、最少连接数等。
负载均衡器的工作原理
1.接收请求:负载均衡器作为系统的入口点,接收来自客户端的请求。
2.负载分发:根据预设的负载均衡算法,将请求分发到后端服务器。常见的负载均衡算法有轮询、加权轮询、最少连接数等。
3.处理请求:后端服务器接收到请求后,处理请求并返回响应给负载均衡器。
4.响应返回:负载均衡器将后端服务器返回的响应发送给客户端。
负载均衡器的好处包括:
1.提高性能:通过将负载分发到多个服务器上,负载均衡器可以减轻单个服务器的负载,从而提高整体系统的性能和响应速度。
2.提高可靠性:如果某个服务器发生故障,负载均衡器可以将请求重新分发到其他正常运行的服务器上,从而提高系统的可靠性和容错能力。
3.实现可扩展性:通过添加更多的服务器并将负载均衡器配置为将请求均匀分发到这些服务”器上,可以实现系统的可扩展性,以满足不断增长的用户需求。
4.简化管理:负载均衡器可以集中管理和监控多个服务器,简化了系统的管理和维护。
tips:负载均衡器,对于请求量的承担量,要远超过应用服务器。
负载均衡器,相当于领导,分配任务。
应用服务器,相当于员工,执行任务。
增加应用服务器,确实能够处理更高的请求量,但是随之存储服务器,要承担的请求量也就更多了。
可采取以下措施
数据库读写分离
主数据库负责写,从数据库负责读,而且主数据库会同步数据到从数据库。
读的频率会比写的频率要高很多。
一般来说,主服务器是一个,从服务器可以有多个。
同时从数据库通过负载均衡的方式,让应用服务器进行访问。
当然,数据库天然有个问题:响应速度是更慢的!
我们还可以通过以下方式来解决
Redis作为热数据缓存
把数据区分为“冷热”,热点数据放到缓存中,缓存的访问速度往往比数据库要快多了。
但是缓存要想快,就需要付出一些代价 -> 很小
所以Redis通常就是作为缓存服务器使用。
此时,缓存数据库就帮助数据库服务器负重前行。
引入分布式系统,不光要能够应对更高的请求量(并发量),同时也要能应对更大的数据量。
如果出现了一个主机装不下那么大的数据量呢?
就需要多台主机来存储。
分库分表
首先我们可以针对数据库进一步的拆分。
本来一个数据库服务器,这个数据库服务器上有多个数据库,也就是逻辑上的数据集合。
现在可以引入多个数据库服务器,每个数据库服务器存储一个或者一小部分数据库。
如下:
微服务
之前应用服务器,一个服务器程序里面做了很多的业务,这就可能会导致这一个服务器的代码变得越来越复杂。
为了更方便于代码的维护,就可以把这样的复杂的服务器拆分成更多的,功能更单一,但更小的服务器。(微服务)
以上使得服务器的种类和数量增加。
这里需要注意:微服务在本质上是解决“人”的问题。
当应用服务器复杂了,势必就需要更多的人来维护。
人多了就需要分组,再分工。
按照功能,拆分成多组微服务,就可以有利于上述 人员的组织机构的分配。
引入微服务,解决了“人”的问题,付出的代价:
1.整个系统的性能会下降。(网络通信比进程内通信慢太多了)
2.系统复杂程度提高,可用性受到影响
拆出来更多的服务,多个功能之间要更依赖网络通信。
网络通信的速度很可能是比硬盘还慢的。
要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源。直白点说就是充钱呗。
服务器更多了,出现问题的概率更大了
这就需要一系列的手段来保证系统的可用性。(监控报警,配套的运维人员)
但是微服务还是有一定的优势的。
微服务的优势
1.解决了“人”的问题。
2.使用微服务可以更方便于功能的复用。
3.可以给不同的服务进行不同的部署。硬件资源的调配。
下面再来讲一些概念:
概念
分布式与集群
分布式和集群同样是引入多个主机/服务器,协同配合完成一系列的工作。
分布式是指在物理上的多个主机,而集群表示的是逻辑上的多个主机。
主从:
多个服务器节点,其中一个是主,其他为从,从节点的数据要从主节点同步过来。
中间件
和业务无关的服务(功能更通用的服务)
eg:1.数据库 2.缓存 3.消息队列
总结
1.单机架构(应用程序 + 数据库服务器)
2.数据库和应用分离
应用程序和数据库服务器 分别放到不同的主机上部署。
3.引入负载均衡,应用服务去 => 集群
通过负载均衡器,把请求均匀的分发给集群中的每个服务器。
当集群某一个主机挂了,其他的主机依然可以承担服务,提高了整个系统的可用性。
4.引入数据库读写分离,数据库主从结构
一个数据库节点作为主节点,其他的数据库节点作为从节点。
主节点负责写数据,从节点负责读数据。
主节点需要把修改后的数据同步给从节点。
5.引入缓存,冷热数据分离
进一步提升了服务器针对请求的处理能力。
Redis在一个分布式系统当中,通常扮演着缓存的角色
引入的问题:数据库和缓存的数据的一致性。
6.引入分库分表,数据库能够进一步扩展存储空间
7.引入微服务,从业务上进一步拆分应用服务器
从业务功能的角度,把应用服务器,拆分成更多更单一,更小,更简单的服务器。