持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
1、什么是高并发
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。吞吐量:单位时间内处理的请求数量(并发数量)QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
2、有关高并发系统设计问题的思考
像电商平台的秒杀、抢购等活动,还有12306春运抢票都是高并发的典型场景。
高并发系统设计基本概念的建立:
- 高并发
- 尽可能优化单次请求的时间
- 增加服务器,扩展集群以同时处理更多的请求
- 对架构,性能进行优化
- 时间短
- 秒杀活动基本都是一秒钟内将商品抢购一空
- 系统容量预估
- 系统设计的时候需要对业务进行预估,需要承载多大的数量级
- 好的分布式方案
- 稳定可靠
- 方便扩充
- 关注系统瓶颈
- 系统处理速度:
- 程序内数据读写 > redis > mysql > 磁盘
- 单机网络请求 > 局域网内请求 > 跨机房请求
- 不要出现跨机房网络请求
- 系统处理速度:
3、如何保障系统的高并发?
- 服务尽量进行拆分部署(分布式:SOA,微服务); --- 业务纵向拆分,化整为零,资源拆分,横向扩展
- 尽量将请求拦截在系统上游(越上游越好); --- 限流,缓存
- 读多写少多使用缓存(缓存抗读压力); --- 读缓存,写异步
- 浏览器和APP:做限速(漏桶原理) --- 限速,限流
- 站点层:按照uid做限速,做页面缓存
- 服务层:按照业务做写请求队列控制流量,做数据缓存 – 队列缓冲
- 数据层:此时数据层压力就小了,无忧无虑 –-数据库优化
4 优化方案:
- 缓存(应用级别缓存、http缓存、多级缓存)
- 连接池
- 异步
- 扩容
- 队列
4.1 数据层优化:
- 集群(分表、分库、读写分离【解决读压力】)
- 索引
- 开启缓存
- SQL优化
- 冗余设计
- 防止写复杂SQL
- 冷热数据分离
4.2 应用层优化:
- web服务器优化 (线程池,连接队列)
- JVM优化
- 代码结构优化(code review)
- 分布式拆分(提高吞吐量,提高集群部署网络数量)
- 异步架构
- 异步并发编程
- 队列
- 线程池
- nosql
4.3 前端优化:
- DNS缓存
- CDN缓存
- 浏览器缓存
- nginx缓存