文章目录
单机架构
分布式是什么
数据库分离和负载均衡
理解负载均衡
数据库读写分离
引入缓存
数据库分库分表
引入微服务
介绍
The open source, in-memory data store used by millions of developers as a databases ,cache, streaming engine, and message broker.
数百万开发人员使用的开源内存数据存储,作为数据库、缓存、流引擎和消息代理。
Redis 的初心,最初就是用来作为一个"消息中间件"的(消息队列),当前很少会直接使用 Redis 作为消息中间件(业界有更多更专业的消息中间件使用)
databases
MySQL 最大的问题在于访问速度比较慢。很多互联网产品中,对于性能要求很高。
Redis 也可以作为数据库使用.快!! 定性的角度,可以知道 Redis 快很多,但是很难定量衡量
redis和mysql相比最大的劣势,存储空间是有限的!!
虽然有不少的互联网产品,对于性能要求比较高的.更多的互联网产品对于性能要求没那么高。
又大又快可以把 Redis 和 MySQL 结合起来使用,但是系统的复杂程度大大提升了,而且, 如果数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题。
"二八原则",20% 的热点数据, 能满足 80% 的访问需求
streaming engine
分布式系统下的生产者消费者模型。
redis的引入
定义变量,不就是在内存中存储数据嘛?
Redis 是在分布式系统中才能发挥威力的。如果只是单机程序,直接通过变量存储数据的方式是比使用 Redis 更优的选择。
由于进程 的隔离性!!进程间通信=>网络
Redis 就是基于网络,可以把自己内存中的变量给别的进程甚至别的主机的进程进行使用
分布式系统
单机架构
只有一台服务器,这个服务器负责所有的工作。
MySQL 是一个客户端服务器结构的程序!!!本体是 MySQL 服务器(存储和组织数据的部分)
单机程序中,能不能把数据库服务器也去掉,光一个应用服务器又负责业务,又负责数据存储?(也不是不可以,但是就是会比较麻烦)
绝大部分的公司的产品,都是这种单机架构!!!现在计算机硬件,发展速度非常之快
哪怕只有一台主机,这一台主机的性能也是很高的.可以支持非常高的并发 & 非常大的数据存储,
如果业务进一步增长,用户量和数据量都水涨船高,一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源。
一台主机的硬件资源是有上限的!!!
1.CPU
2.内存
-
硬盘
-
网络
6...
服务器每次收到一个请求,都是需要消耗上述的一些资源的
如果同一时刻,处理的请求多了,此时就可能会导致某个硬件资源,不够用了!!!
无论是哪个方面不够用了,都可能会导致服务器处理请求的时间变长,甚至于处理出错
如果我们真的遇到了这样的服务器不够用的场景,怎么处理呢?
1.开源 -简单粗暴,增加更多的硬件资源~-
2.节流-软件上优化.(各凭本事了,需要通过性能测试,找到是哪个环节出现了瓶颈,再去对症下药)
难!! 对于程序猿的水平要求就比较高了
一个主机上面能增加的硬件资源也是有限的取决于主板的扩展能力
主机扩展到极限了,但是还不够,就只能引入多台主机了!!!
不是说新的机器买来就直接可以解决问题了.也需要软件上做出对应的调整和适配
一旦引入多台主机了,咱们的系统就可以称为是"分布式系统"
引入分布式,这是万不得已,无亲之举,系统的复杂程度会大大提高。出现 bug 的慨率越高, =>加班的概率 & 丢失年终奖的概率 提高。
应用服务和数据库服务分离
应用服务器,里面可能会包含很多的业务逻辑, 可能会吃 CPU 和 内存.
数据库服务器, 需要更大的硬盘空间,更快的数据访问速度可以配置更大硬盘的服务器,甚至还可以上 SSD 硬盘(固态硬盘)。
1.机械硬盘,便宜,慢 2. 固态硬盘, 贵, 快
【负载均衡】引入更多的应用服务器节点
负载均衡就像公司的一个组的领导一样,要负责管理,要负责把任务分配给每个组员。
应用服务器可能会比较吃 CPU 和 内存,如果把 CPU 或者内存吃没了,此时应用服务器就顶不住了,引入更多的应用服务器,就可以有效解决上述问题。
用户的请求,先到达负载均衡器/网关服务器(单独的服务器),对于负载均衡器来说,有很多的 负载均衡 具体的算法,假设有 1w 个用户请求,有 2 个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担 5k 的访问量,这个和"多线程"有点像。