性能设计
2023-05-05 10:12:19 0 举报
AI智能生成
学习笔记
作者其他创作
大纲/内容
缓存设计
服务端缓存
缓存属性
吞吐量
影响因素
尽可能避免数据竞争的数据结构
存在竞争风险时处理同步的策略(悲观,乐观)
如何避免伪共享现象(False Sharing)
处理方式
同步处理
异步处理
环形缓冲
Caffeine
命中率
爬虫防御
扩展功能
加载器:主动加载指定 Key 值的数据,也是自动刷新的基础前提。
淘汰策略:支持用户选择不同的淘汰策略。
失效策略:要求缓存在一定时间后自动失效或者自动刷新。
事件通知:提供事件监听器在数据状态变动(失效刷新移除)时进行额外操作。还可监视缓存数据(Watch 功能)。
并发级别:对于通过分段加锁来实现的缓存提供并发级别的设置。
容量控制:缓存通常都支持指定初始容量(减少扩容频率)和最大容量(自动清理)。
引用方式:将数据设置为软引用或者弱引用,便于垃圾回收。
统计信息:提供诸如缓存命中率、平均加载时间、自动回收计数等统计。
持久化:将缓存内容存储到数据库或者磁盘中(对于分布式缓存意义较大)。
分布式支持
分布式缓存
复制式缓存
集中式缓存
多级缓存
二级缓存
存在问题
代码侵入性大、不便于开发管理
数据更新容易出现不一致
更新方式
更新模式
主动更新
Cache Aside
实现细节
先写数据源再失效缓存
失效而非更新缓存
存在问题
Read/ Write Through
Write Back
延时双删
订阅 Binlog 实时更新
被动淘汰
FIFO(First In First Out)
LRU(Least Recent Used)
LFU(Least Frequently Used)
TinyLFU(Tiny Least Frequently Used)
W-TinyLFU(Windows-TinyLFU)
ARC(Adaptive Replacement Cache)
LIRS(Low Inter-Reference Recency Set)
存在问题
复杂度
开发:提高系统复杂度(需考虑失效、更新、一致性等问题)。
运维:掩盖系统缺陷,让问题在更久后、距离发生现场更远的位置上出现。
安全:可能导致保密数据泄漏,也是容易受到攻击的薄弱点。
缓存穿透
缓存雪崩
缓存击穿
更新锁
后台更新
定时器
消息队列
多副本分流
无底洞
内容分发网络
路由解析
CDN 处理流程
内容分发
主动分发
被动回源
CDN 应用
加速静态资源
安全防御(流量清洗,如 DDoS)
协议升级(IPv6、HTTP/3、HTTPS 等)
状态缓存(301/302 等状态码)
修改资源(CORS、内容协商、缓存等)
访问控制(黑白名单、QoS、防盗链等)
注入功能(无需修改代码为源站注入功能)
客户端缓存
状态缓存
强制缓存
HTTP Header
Expires
Cache-Control
协商缓存
HTTP Header
Last-Modified 和 If-Modified-Since
Etag 和 If-None-Match
内容协商
数据库设计
资源池化
连接池
连接数配置
连接可用性
线程池
处理逻辑
存在问题
读写分离
基本原理
实现方式
分配机制
程序代码封装
中间件封装
CQRS(命令与查询职责分离)
切换策略
可靠性优先
可用性优先
使用须知
同步延迟
备库性能较差
备库压力太大
大事务同步
并行复制能力不足
MariaDB
解决方法
单调读
失败读
请求分离
数据恢复
互为主备
丢失数据
分库分表
分库
优化操作
优化存储
多租户
按种类划分
按范围划分
哈希算法
存在问题
关联与分页操作
分布式事务
成本较高
分表
水平划分
范围路由
哈希路由
配置路由
Join 操作
Count 操作
Order 操作
垂直划分
NoSQL
键值数据库(Redis)
支持多种数据结构
弱事务支持
高性能
文档数据库(MongoDB)
结构修改简单
易于存储复杂数据
不支持事务
难以实现 join 操作
列式数据库(HBase)
按列访问效率高
数据压缩效率高
写多列无法保证原子性
适用于仅追加写入
全文搜索引擎(Elasticsearch)
字段排列组合访问
高效的模糊匹配
设计重点
服务拆分
垂直分片
水平分片
定期重新平衡
使用索引表
使用并行任务
跨分片的事务
配置和管理
通信设计
网络 I/O 模型
阻塞 I/O
非阻塞 I/O
I/O 多路复用
实现方式
单 Reactor 单进程 / 线程
单 Reactor 多线程
多 Reactor 多进程 / 线程
注册函数
select
poll
epoll
水平触发
边缘触发
信号驱动 I/O
异步 I/O
实现方式
序列化方式
JSON
Thrift 和 Protobuf
RPC 框架
RMI
Web Service
gRPC
负载均衡
数据链路层:转发
原理
特点
性能高(不经上层解析、无转发开销)
无法感知上传协议
只用于子网内(二层可达)
网络层:转发
IP 隧道(IP Tunnel)
原理
特点
打包拆包引入开销
可跨越 VLAN
要求支持 IP 隧道协议、人工配置
网络地址转换(NAT)
原理
特点
性能损失较大
运维简单
SNAT 无法获取服务端 IP
应用层:代理
特点
代表服务端与客户端通信
性能相对差(多一轮 TCP 握手、带宽约束、解析层次高)
可定制多种多级功能
高级功能
类似 CDN
静态资源缓存
协议升级
安全防护
访问控制
智能路由
根据 Session 路由实现亲和性集群
根据 URL 路由实现专职化服务
根据用户身份路由实现对特殊服务
报文过滤
SQL 注入
SYN Flood 攻击
链路治理
降级、限流、熔断
异常注入
均衡策略
轮询/加权轮询
随机/加权随机
一致性哈希
响应速度/最少连接数
源地址/ ID 哈希
自适应策略
基本实现
DNS 负载均衡
硬件负载均衡:F5、A10
软件负载均衡:LVS、Nginx、HAProxy、KeepAlived
异步处理
应用实例
异步设计
前台系统
任务处理系统
PUSH
PULL
扩展消费
可靠消费
不重复
幂等生产者
事务生产者
幂等消费者
不丢失
生产者
发送确认(ack)
失败重试
Broker
复制系数:replication.factor
不完全的领导者选举:unclean.leader.election
最少同步副本:min.insync.replicas
消费者
重置偏移量
确保消费完成再提交偏移量
分区再均衡
失败重试
状态维护
有序消费
分布式事务
事件溯源
流水记录
事件不可变
避免并发冲突
设计重点
状态回传和重试
事务补偿
最终一致
订阅 Binlog
限流处理
边缘计算
发展背景
趋势
成本
业务场景
实时响应的业务逻辑
简单的业务逻辑
收集结构化数据
去中心化应用
云资源管理
关键技术
API Gateway
Serverless
核心项目
* 秒杀系统
解决方案
0 条评论
下一页