现在完成的事大厂的基础的架构的思维模式是什么样子
真正的大厂的基础机构的思维!
最终会汇聚到一个问题上就是:高并发
也就是当有大量的用户来访问的时候,系统是否可以稳住的意思
##
通俗理解:
并发的意思就是:比如说一个网站,同时会有1000人去访问,或者是1万人或者事10万人去访问
这就叫做:并发
而高并发的意思是:当访问量非常大的时候请求非常多的时候仍然可以稳定运行系统这就叫做:高并发
高并发的本质就是:让系统在超级大的流量之下仍然可以稳定
高在何处?
高用户数
同时在线的人数非常之多
高请求数
每秒几十万次的请求
这里有一个很重要的指标就是每秒的请求数量
10000 QPS:query per second每秒请求数
最容易挂的东西
- CPU爆炸
- 内存爆炸
- 数据库扛不住
- 网络带宽打满了
- 磁盘的IO爆了
高并发系统的对抗
- 负载均衡>将请求进行分散
- 集群:单个机器是不够的时候就加机器即可
- 例如原来是1台机器然后变成是10-100台机器(水平扩展)
- 缓存(Redis)
- 异步
- 限流
- 熔断(防止雪崩)
- 降级:系统是扛不住的,所以先进行核心功能的保留
互联网的高并发的系统的各层的职责表
大厂系统本质都是:
用户
↓
CDN
↓
Nginx/LVS
↓
应用服务
↓
Redis
↓
MySQL
一、用户层
负责的是:
- 发起请求(类似于发送HTTP 或者是HTTPS的请求)
- 接受服务器返回的数据
- 用户的交互以及相互之间的交流
一切的流量的流入都是从用户开始的
二、CDN内容分发网络
CDN :Content Delivery Network
本质是:
全国甚至是全球的缓存的节点
负责的事
- 缓存静态资源
- 加速访问
- 减少源站的压力
- 抵抗高并发的流量
如果挂了
将会出现的事:
- 图片加载失败
- 节点健康
- 流量的调度会发生变化
三、Nginx/LVS (流量的入口层)
这一层是:整个网站的门口
负责的是
- 接收用户发来的请求
- 负载均衡
- 反向代理
- HTTPS的SSL的证书的处理
- 限流
- 静态的资源的服务体系
为什么需要?
当只有一台服务器的时候发生高并发的时候就会出现直接崩溃的现象
所以入口的分流就显得非常重要了
LVS的作用
LVS会显得更加底层
特性
性能更加好,四层的负载均衡,超大的流量
LVS以及Nginx一起使用的时候即可
前端可以使用LVS 来进行流量的接入,后端使用nginx来进行流量的分配即可,使用负载均衡以及反向代理来进行理解
如果这个部分挂了会?
网站直接进不去
502
504
关注什么
QPS
连接数
错误率
RT
流量切换
限流
四、应用服务层(这是核心的业务层)
这一层是真的来处理业务的逻辑
常见的技术是:
go java python等
负责什么
1)业务逻辑
例如:
登录
支付
评论
推荐
订单
聊天
2)调用 Redis
先查缓存。
3)调用 MySQL
查询真实数据。
4)调用其他微服务
例如:
用户服务
订单服务
支付服务
推荐服务
为什么是“集群”
因为:
单机扛不住。
所以:
server1
server2
server3
一起工作。
如果挂了
500错误
业务不可用
接口失败
五、Redis缓存层
高性能的内存的数据库
负责什么?
- 缓存一些热点的数据
- 减轻MySQL的压力
- 计数器
- 分布式的锁
- Session
为什么Redis很快
基于内存
IO的效率高
数据结构优秀
为什么需要Redis
如果将所以的请求都打给MySQL数据库就会直接爆炸
六、MySQL 数据层
真正存储核心的数据
负责是什么?
- 数据的持久化
- 事务
- 复杂查询
为什么这么重要:数据最终的落脚点是在数据库
为什么容易成为瓶颈:IO慢于内存
高并发下:
大量查询
大量写入
锁竞争
慢SQL
容易崩。
优化?
1)主从复制
读写分离。
2)分库分表
拆库。
3)索引优化
4)Redis缓存
如果挂了
严重事故。
例如:
订单没了
支付异常
用户数据错误
七、整体链路最终理解(最重要)
用户打开视频:
Step1 用户发请求
App发起HTTP请求
Step2 CDN
判断:
缓存里有没有视频资源
有:
直接返回。
Step3 Nginx
负责:
HTTPS
负载均衡
反向代理
Step4 应用服务
真正处理:
用户权限
推荐逻辑
业务逻辑
Step5 Redis
先查缓存。
有:
直接返回。
Step6 MySQL
Redis 没有。
查数据库。
Step7 返回结果
最终:
视频返回给用户