高并发业务架构设计思路

404 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

1、什么是高并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

  • 响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
  • 吞吐量:单位时间内处理的请求数量(并发数量)
  • QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
  • 并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

2、有关高并发系统设计问题的思考

像电商平台的秒杀、抢购等活动,还有12306春运抢票都是高并发的典型场景。

高并发系统设计基本概念的建立:

  • 高并发
    • 尽可能优化单次请求的时间
    • 增加服务器,扩展集群以同时处理更多的请求
    • 对架构,性能进行优化
  • 时间短
    • 秒杀活动基本都是一秒钟内将商品抢购一空
  • 系统容量预估
    • 系统设计的时候需要对业务进行预估,需要承载多大的数量级
  • 好的分布式方案
    • 稳定可靠
    • 方便扩充
  • 关注系统瓶颈
    • 系统处理速度:
      • 程序内数据读写 > redis > mysql > 磁盘
      • 单机网络请求 > 局域网内请求 > 跨机房请求
    • 不要出现跨机房网络请求

3、如何保障系统的高并发?

  1. 服务尽量进行拆分部署(分布式:SOA,微服务); --- 业务纵向拆分,化整为零,资源拆分,横向扩展
  2. 尽量将请求拦截在系统上游(越上游越好); --- 限流,缓存
  3. 读多写少多使用缓存(缓存抗读压力); --- 读缓存,写异步
  4. 浏览器和APP:做限速(漏桶原理) --- 限速,限流
  5. 站点层:按照uid做限速,做页面缓存
  6. 服务层:按照业务做写请求队列控制流量,做数据缓存 – 队列缓冲
  7. 数据层:此时数据层压力就小了,无忧无虑 –-数据库优化

4 优化方案:

  1. 缓存(应用级别缓存、http缓存、多级缓存)
  2. 连接池
  3. 异步
  4. 扩容
  5. 队列

4.1 数据层优化:

  1. 集群(分表、分库、读写分离【解决读压力】)
  2. 索引
  3. 开启缓存
  4. SQL优化
  5. 冗余设计
  6. 防止写复杂SQL
  7. 冷热数据分离

4.2 应用层优化:

  1. web服务器优化 (线程池,连接队列)
  2. JVM优化
  3. 代码结构优化(code review)
  4. 分布式拆分(提高吞吐量,提高集群部署网络数量)
  5. 异步架构
  6. 异步并发编程
  7. 队列
  8. 线程池
  9. nosql

4.3 前端优化:

  1. DNS缓存
  2. CDN缓存
  3. 浏览器缓存
  4. nginx缓存