概念
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
最初redis用来作为消息中间件,现在更多用于分布式缓存。与mysql相比,redis的访问速度更快,mysql将变量存储在外存中,而redis存储在内存中,基于网络将自己内存中的变量给别的主机的进程进行使用
分布式系统
单机架构:只有一台服务器负责业务处理和数据存储
当用户数非常多时,一台服务器既要存储又要和用户交互,性能和内存难以支撑,因此可以将应用服务和数据存储服务分开
分别设立应用服务器和数据库服务器,应用服务器可以配备更好的cpu和内存,而数据库服务器可以配置更大的ssd硬盘
而当公司规模变大,用户数量进一步激增,便需要引入更多的服务器节点,此时用户的请求先到达负载均衡器/网关服务器,其可以根据应用服务器的访问量自动分配请求,让每个应用服务器的工作量大致相同
当然,所有的用户请求都集中到负载均衡器的身上了,虽然负载均衡器不负责处理请求,但是当请求过多时负载均衡器也会达到极限,因此可以引入多个负载均衡器协同工作
我们的请求分散到了多个应用服务器上,减少了应用服务器的压力,但是存储服务器也有很大的压力。
可以采用读写分离的方式减轻存储服务器的压力,主存储器负责数据的写入,从存储器同步主存储器中的内容,应用服务器从从存储器中读取数据
由于数据库的响应速度很慢,我们可以将频繁被访问的数据放到缓存中,用户的请求先发送到缓存服务器中,如果缓存中存在,那么直接返回数据,否则发送到主存储器中。这样也可以减轻数据库的压力,而redis就是负责这个缓存服务器的
虽然存储服务器的可存储数据可以达到几十个tb,但是现在的视频越来越大,有些时候一个主机存不下那么多数据,因此需要对存储服务器进行分库分表,每个数据库存储器存储部分数据库
当应用服务器变得更多更复杂时,管理这些服务器就更加困难,此时可以按照公司的业务,可以分为不同的服务器种类,使服务器的功能更加单一,这样的服务器架构称为微服务架构
常见概念
应用(Application)/ 系统(System)
一个应用就是一个/一组服务器程序
模块(Module)/ 组件(Component)
一个应用中有许多的功能,一个功能就是一个模块
分布式(Distributed)
多个主机/服务器协同处理工作
集群(Cluster)
和分布式一致,但是集群是逻辑上有多个主机,分布式是物理上有多个主机
主(Master)/ 从(Slave)
多个服务器节点中有一个主节点,其他的是从节点,从节点需要同步主节点的数据
中间件(Middleware)
和业务无关的服务,例如数据库,消息队列,缓存等
可用性(Availability)
可用性是系统的第一要务
可用性 = 系统整体可用的时间 / 总时间
响应时长(Response Time RT)
处理一个请求消耗多少时间
吞吐(Throughput)
系统在单位时间内处理请求的数量
并发(Concurrent)
系统同时处理的请求数