高并发设计

数据库:

一.池化技术
原因:1.连接的耗时比较长
2.相反执行一次sql可能时间很快
二.池化连接
最小连接(10左右),最大连接(20-30左右),预热(初始化)
三.池化线程
1.CPU密集型(一定不要让线程数超过cpu核心数)
2.IO密集型(线程池可以适当放宽)
3.尽量不使用无界队列

四.主从读写分离(冗余)
1.读多写少,突发流量
2.主从拷贝:一个数据拷贝给多个从库
查询在从库来
3.异步更新:延迟效应(毫秒级),不同步

五 分库分表(分片)
问题:
数据量增大,查询性能下降
数据量占用磁盘较大,备份困难
单点故障如何避免
更高的写请求如何实现
4核一般可以支持1万左右的查询
1.对数据做垂直拆分:按业务类型拆分,专库专用
2.水平拆分:按照数据的特点拆分 hash拆分 -实体表 区间拆分

六 全局唯一主键(UUID)
1.业务字段
2.生成唯一的id 自增字段(分库分表后难解决),uuid(无意义) ,发号器 Snoflake算法

七:NoSQL
redis

缓存:

与之对应:缓冲
缓存:位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构(最常见的是内存)增加速度
案例:
MMU&&TLB
短视频
缓存协商
web代理

缓冲:缓冲区则是一块临时存储数据的区域,这些数据后面会被传输到其他设备上(buff)减少IO次数

二.缓存分类
静态缓存
分布式缓存
热点本地缓存-极端热点

三.缓存的不足
1.适合读多写少的业务场景,并且数据最好带点热点信息
2.给整体系统带来复杂性,并且会有数据不一致的风险
3.之前缓存通常使用内存作为存储机制,但内存并不是无限的
4.缓存会给运维带来一定成本

四.缓存的读写(尽可能把缓存放在上层)
1.缓存读写:旁路缓存:竞争产生缓存不一致
更新数据时不更新缓存 删除缓存
查询:缓存未命中,回写缓存
缺点:存在一定的异常可能
频繁清理缓存->不清理,加分布式锁,更新
不清理,更新,很快过期

五 读穿/写穿 用户只和缓存打交道,不直接读取数据
1.写穿:先查询要写入的数据在缓存中是否已经存在,如果已经存在,更新缓存中的数据,并且由缓存组件同步更新到数据库
Write Miss:1.Write Allocate:写入缓存相应位置,并且由缓存组件同步更新到数据库
2.No Write Allocate:不写入缓存,而是直接更新到数据中

3读穿:先查询缓存中数据是否已经存在,如果已经存在则直接返回,如果不存在,则由缓存组件负责从数据库同步加载数据

4.回写:
写入数据时只写入缓存,并且把缓存标记为脏的,只有再次使用才会被写入到后端存储中
读取缓存时如果发现缓存命中则直接返回,如果不存在,则寻找一个可用的缓存块,如果缓存是”脏的“,写入后端存储,不是”脏的“,返回数据就好

适合高速设备写入低速设备

六缓存的高可用性
命中率:核心缓存命中率:99%
分布式缓存:1.客户端方案:缓存分片(一致性hash分片,hash 分片)
2.Memcached的主从机制
3.多副本

中间代理层方案:中间件,中台(导致灵敏性下降),去中台

服务端方案:redis

七.缓存穿透

八.CDN:web缓存器,内容分发网络

消息队列:

分布式服务:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值