1、秒杀要解决的两个问题:
-
并发读
并发读核心优化理念:减少用户到服务器端读数据,或让他们读更少的数据。
-
并发写
与之类似
经验:
架构师要打造并维护一个超大流量并发读写、高性能、高可用得系统,请求到服务端要遵循几个原则:请求数据少,请求数少,路径尽量短,依赖尽量少,不要有单点
2、秒杀的整体架构可以概括为“稳、准、快”几个关键字
-
稳(高可用):
整个系统架构满足高可用,流量符合预期时肯定要稳定,超出预期时也不能掉链子, -
准(一致性):
保证数据一致性 -
快(高性能):
性能要足够高,服务器要做到极致的性能优化,请求链路上都要协同的优化
3、秒杀注意的5个架构原则(4要1不要):
- 数据要尽量少
请求的数据能少则少(原因:服务器在写网络时要做压缩和字符编码,这些会消耗CPU);系统依赖的数据能少则少(原因:调用其他服务会涉及序列化反序列化,消耗CPU)- 请求数要尽量少
CSS/JavaScript、图片、以及Ajax请求,每多一个请求会有一些消耗,建立连接需要三次握手等- 路径要尽量短
经过中间的节点数要少- 依赖要尽量少
完成一次用户请求必须依赖系统或服务,强依赖- 不要有单点
避免将服务的状态和机器绑定,把服务无状态化。
4、如何才能做好动静分离?方案有哪些?
动静分离:
即把用户请求的数据(HTML页面)划分为动态数据和静态数据。
1、静态数据缓存:
- 把静态数据缓存到离用户最近的地方(用户浏览器、CDN、服务端的Cache中)
- 缓存HTTP连接
2、动态内容处理:
- ESI方案(SSI) 在Web代理服务器上做动态内容请求,并将请求插入到静态页面中
优点:服务端性能有影响
缺点:用户体验好
- CSI方案 单独发起一个异步JavaScript请求
优点:服务端性能更佳
缺点:用户页面可能会延时,体验稍差
3、动静分离的几种架构方案
- 实体单机部署
- 统一Cache层
- 上CDN
5、二八原则:有针对性地处理好系统的“热点数据”
热点分:热点操作 和 热点数据
处理热点数据几种思路 :
- 优化 缓存热点数据,可采用LRU淘汰算法替换
- 限制 保护机制,ID做一致性Hash
- 隔离 将热点数据隔离出来,不要让1%的请求影响到另外99%业务
- 业务隔离 提前报名,可以提交预热数据
- 系统隔离 与另外的业务分开部署,申请单独域名
- 数据隔离 启用单独的Cache集群或者MySQL数据库来存放热点数据
6、流量削峰
削峰的目的:
可以让服务端处理变得更加平稳
可以节省服务器资源成本
操作思路:
- 排队、 消息队列 、线程池加锁、先进先出、请求序列化到文件中,再顺序文件
- 答题、防止作弊、延缓请求
- 分层过滤(漏斗)
7、影响性能的因素:
系统服务端的性能:
- QPS
- RT-ResponseTime