架构遵循 “四要,一不要"
数据要少
数据量要少
路径要小
依赖要小
不要单点
快 准 稳
快: 提高单次请求效率 减少没必要的请求 --------------------动静分离
静态数据处理
- 把静态数据缓存到离用户最近的地方
- 静态化改造: 直接缓存HTTP链接,访问一个url,直接拿到的是http的响应头和响应体,这样的话连解析都不用了。
- 让谁来缓存,对于java来说,它的sevlet容器去解析http请求会比较慢一点,我可以选择直接在web服务器来做缓存
动态处理 ESI : 在web代理服务器上做动态请求,插入到静态页面中去
和CSI 单独发起一个异步的javaScript请求,向服务端动态获取内容
动静分离架构的几种方案:
实体机单机部署
统一缓存层
热点的处理
热点操作和热点数据
热点数据的思路:
- 一优化 、 优化缓存
- 二限制 、 用hash做分桶,让热点数据,让热点数据集中在某几个桶,不去影响其他正常数据
- 三隔离 、 业务隔离: 卖家提前报名,这样也可以做一个预热
系统隔离: 单独部署
数据隔离: 热点数据隔离
消除峰:
- 消息队列
- 答题排队
- 分层过滤
提高性能
QPS每秒处理的请求数 RT服务器这边的一个响应耗时
RT 一般是由CPU处理时间和线程等待时间决定的
QPS 它和线程数有一定的关系,2xCPU核数+1
CPU诊断工具 JProfile和Yourkit这两个工具
减少编码 :网页输出直接用流输出
合并部署
秒杀系统的单机上缓存商品的相关数据 动态数据和静态数据:
- 动态:就淘汰拉取
- 静态: 直接缓存到结束
减库存设计的主要逻辑(事务实现库存不能为负数,直接设置无符号整数)
下单减库存
付款减库存
预扣减库存
应用层排队和数据库层排队 : 补丁程序 Commit on success 和 ro'l'lback on fail
sql合并
Plan B
降级: 当系统容量到一定程度的时候,可以关闭一些系统非核心的功能
限流: 客户端和服务端
拒绝策略: 直接拒绝