---
title: 现实世界中的高并发场景
taxonomy:
    category: docs
---

本节将介绍现实世界中最常见的高并发场景，以及对应的解决方案。

### 高并发场景之——电商大促

"大促"是现如今电商平台最常见的营销模式，双 11 和 618 可以说每一个中国人都有所耳闻。

在电商大促期间，由于用户访问流量和交易量在短时间内会快速增加，就导致了一系列高并发问题的出现：

#### 系统响应慢

用户访问量突然增大，系统规模无法短时间内扩大，导致页面加载缓慢，用户体验差。 
我们可以采取以下技术手段来提升系统的总容量：

   - 静态资源缓存：将静态资源如图片、CSS 和 JavaScript 文件缓存到 CDN（内容分发网络）上，减少大促开始时服务器的带宽需求，加快页面加载速度。
   - 弹性伸缩：通过自动或手动调整服务器的数量和配置，根据实时负载情况动态分配计算资源，以满足用户访问的需求。
   - 负载均衡：将用户请求分发到多个服务器上，避免单个服务器过载，提高系统的吞吐能力。


#### 订单提交失败
订单量突然增加，系统可能无法及时处理订单，导致订单提交失败，甚至重复提交订单等问题。常用解决方案：
   - 异步处理：将订单处理过程异步化，即时返回排队中的状态，避免单个网络请求的时间过长影响用户体验和服务器总容量。
   - 消息队列：使用消息队列来存储和处理订单，确保订单的顺序和可靠处理。
   - 幂等性设计：为订单处理接口设计幂等性，在前端加入订单唯一 UUID，防止重复提交订单和重复支付。

#### 库存超售
在电商大促中，多个用户可能在同一时刻购买同一款商品，极有可能导致超出库存数量的售卖行为，给经营带来损失。为了解决这个严重的问题，可以采取以下措施：

   - 预售和抢购限制：提前设置商品的预售数量或限购数量，减少在明确无库存的情况下对库存扣减系统的额外压力。
   - 使用队列进行库存扣减：使用消息队列来存储和处理订单，确保库存的顺序扣减。我们假设每次扣减库存需要 20ms 的处理时间，那单线程队列就可以完成每秒 50 单的需求，这个容量其实是不小的，我们假设客单价为 1000 元，则单个队列处理器可以承担每秒 5 万元，每分钟 300 万元的压力，这个交易额其实已经很大了，全国能达到每分钟 300 万的电商平台应该也没有很多。
   - 订单超卖记录：在极限情况下，为了保证系统的总容量能满足大促的要求，我们不会极端严格地限制超卖。如果真的超卖了，需要及时地反映在管理后台，让客服等运营人员介入处理。

#### 支付超时

支付系统具有天然的单点性。在电商大促期间，由于用户购买行为集中，支付系统可能面临大量的并发支付请求，难以及时处理所有订单的支付请求，导致用户支付超时，有货卖不出去。这时我们可以做如下处理：

   - 多节点部署：由于支付系统具有天然的单点性，单个线程经常需要等待，所以我们要尽量地多节点部署，以利用尽量多的 CPU 核心数来提升系统总容量。
   - 异步支付处理：将支付处理过程异步化，把和用户操作相关的前序步骤和后续步骤都进行异步拆分，只在最核心的地方设置同步等待，减少对用户体验的阻滞。
   - 合理设置支付超时时间：根据实际情况，合理设置支付超时时间，可以减少单个用户的支付容量以及系统总容量，极端场景下的订单可以在系统自动侦测到了之后进行手动改库修正。

> 举个例子：用户唤起了支付，但是停留在输入密码的页面一个小时，但是最后依然支付成功了，此时该订单很有可能已经被系统自动取消了。

#### 恶意攻击

电商大促期间，由于系统流量集中，使得此时成为了恶意攻击的最佳时机。为了保护系统的安全和稳定，我们可以采取以下措施：

   - 防火墙和入侵检测系统：部署硬件防火墙和入侵检测系统，它们可以抵挡住低级的基于网络协议漏洞的低端流量攻击。
   - 限制访问频率：通过限制单个 IP 地址、单个 UUID、单个用户 ID 的访问频率和请求次数，防止恶意攻击者通过大量伪造请求或者是利用机器人抢购造成的系统瘫痪。
   - 安全加密通信：使用 SSL/TLS 等安全协议对用户和服务器之间的通信进行加密，防止信息泄露和篡改。这一步在 2023 年应该已经全面普及了，如果你的系统还在用 HTTP 协议，需要赶紧升级。

### 高并发场景之——社交网络

虽然电商大促的问题已被阿里等公司解决。然而，社交网络的高并发问题是目前仍待解决的难点之一。一个典型的案例是微博明星感情突发事件。

2017 年 10 月 8 日中午，微博工程师丁振凯正在举行婚礼，鹿晗突然宣布与关晓彤的恋情，导致微博客户端无法正常刷新、评论以及多个页面无法正常显示等问题。这次事件导致丁振凯中断婚礼，穿着西装戴着大红花坐在电脑前处理问题，成了鹿晗关晓彤事件的余波之一。事后统计，鹿晗公布恋情的微博，被转发了 33 万次，最终覆盖了 8.4 亿人次的微博用户。

在社交网络出现突发热点时，系统需要处理大量的实时数据更新、用户交互和内容传播动作，这些操作同时发生就给系统带来了巨大的压力。我们可以采取如下几个手段：

#### 缓存优化

利用缓存技术来减轻数据库的压力，提高读取性能。将热门的用户信息、动态内容等存储在缓存中，加快数据的访问速度。在微博场景下，最大的挑战就是热点数据的及时识别：在某条微博、某个账号突然流量暴增时，能够在多短的时间内将该账号、该条微博缓存化，就成了决定系统是否会崩溃的最重要的因素。

#### 异步处理

将耗时的操作异步化，使得系统能够更快地响应用户请求。例如，将评论、点赞等操作先放入消息队列中，然后由后台任务异步处理，避免在高峰期对主数据库和核心缓存形成额外压力。

#### 数据库优化

对热点数据和非热点数据分而治之，减少热点数据所在表的长度，可以最大限度地利用数据库本身的性能特定和内存缓存，极大地提升数据库查询和更新的性能。

#### 水平扩展

水平扩展是通过增加服务器数量和实施负载均衡来应对高并发访问的策略。通过将系统拆分为多个服务实例，可以同时处理更多请求，提高系统的吞吐量。系统能够以多快的速度进行水平扩展，直接影响普通用户的感受。只要扩容足够快，大多数用户几乎无法察觉到系统曾经宕机过。

#### 资源预估和监控

在活动高峰期前，进行系统资源的预估和规划，确保系统能够承受预期的并发流量。同时，实时监控系统的运行状态，及时发现和解决潜在的性能问题。这一条只适用于节假日，明星们不按套路出牌，本条在明星场景下没什么用。

前几年，笔者刷微博的主要乐趣之一，就是见证 @蛋疼的axb 播报他在几年的时间跨度内，每次都被热点打败的故事。

### 高并发场景之——金融交易

其实，目前狭义的金融系统本身已经没什么高并发问题了，股民数量虽然多，但由于交易的并发量并不大，因此在对比互联网流量时，金融系统的高并发问题相对较小。然而，若干年前的一项创新——"量化交易"，利用算法和网络速度进行套利，使金融交易再次面临了高并发的挑战。

笔者浅尝辄止地开发过量化交易的一个分支——高频交易软件，当时笔者选择了交易所同一个机房的云服务器，使得服务器到交易所服务器公网 ip 的延迟不超过 1ms。从理论上说，这样的设置应该能够轻松实现套利，然而实际上还是盈亏不定。因为笔者发现和自己竞争的就没有真人，全是量化交易机器人。在真金白银面前，机器人是非常疯狂的。

此外，由于金融交易涉及到用户的资产安全，系统的安全性变得至关重要，这使得高并发问题变得更加复杂。在技术上，金融交易高并发设计并没有什么额外的技术问题需要解决，反而是安全问题需要下大力气去解决。

### 高并发场景之——网络游戏

游戏是一个和 Web、APP 都非常不同的高并发领域。

为什么都 2023 年了，游戏还是要分区？现在的 CPU、内存、磁盘、GPU 已经和 20 年前不可同日而语了，一台双路 EPYC™ 9654 的服务器都已经做到 384 核心 768 线程了，为什么游戏还是要分区呢？

因为游戏中的两个用户需要在极短的时间内针对对方的操作做出反应，不能别人砍了你一刀，你 1 秒之后才感觉到，大家都变成“高 Ping 战士”了，这游戏就没法玩了。

所以，一个游戏区域中，所有用户的数据都需要在内存中进行尽量快地实时计算，包括位置、状态、动作等，宏观上一个游戏分区甚至可以近似地等价于一个单线程应用：我们都知道，单线程应用是最难优化的，基本只能靠单核性能、三级缓存和内存通道数的进步获得。

### 音频、视频高并发

音视频高并发问题涉及到带宽、延迟和音视频处理这三个关键技术难点。

#### 带宽

带宽是指网络能够同时处理和传输的音视频流的数量。高清视频流占用大量的带宽资源，如果网络带宽不足，就会导致音视频传输过程中出现卡顿、延迟等问题，从而影响用户的观看体验。为了解决这个问题，我们可以采取两方面的措施：

1. 砸钱，提高带宽、部署 CDN 节点等。
2. 技术优化：通过 P2P 网络、缓冲策略、流式编码等方式，提升低带宽下用户的体验。

#### 延迟

音视频传输过程中，网络延迟可能导致帧丢失、卡顿等问题，影响用户的观看体验。我们可以采用数据压缩、流媒体缓存等技术手段来降低延迟。

数据压缩可以减小音视频数据的大小，减少传输时间，从而降低延迟。需要注意的是，相比于能压缩到 5% 的 JavaScript 文件的 Gzip 压缩，音视频本身就已经是一种压缩格式了，能够进一步压缩的比率很有限，很难低于 50%，而实际操作中我们一般选择采用新的视频格式来实现更高的压缩比率，而这依赖于客户端硬件、操作系统和浏览器的共同进步。

流媒体缓存可以预先缓存部分音视频数据，其本质是拿“过去的时间”换“现在的时间”。

#### 音视频处理

高清视频流对计算资源有巨大需求，特别是在编解码和图像处理方面，对处理高并发音视频流提出了高要求。为确保音视频处理速度和质量，需要高效利用计算资源。YouTube 和 BiliBili 等知名视频平台通过采用多项先进技术来解决高并发场景的挑战。

首先，这些平台利用先进的编码算法提高视频压缩效率。采用诸如 H.264、H.265（HEVC）等编码标准，在不损失太多质量的情况下，大幅减小视频文件大小，从而降低传输带宽和存储空间需求。

其次，视频平台借助 GPU 和专用芯片等硬件加速技术来提高音视频处理速度，相对于传统的 CPU，在视频转码任务中效率更高。

此外，视频平台还利用云计算优势来解决高并发问题。在低谷期，云服务商通常提供低价计算资源，视频平台可利用此机会进行大规模转码工作。将音视频文件转码为多种格式和分辨率，以更好地适应不同设备和网络环境的播放需求。通过充分利用云计算的弹性和资源可扩展性，视频平台能够灵活应对高并发情况，并同时降低成本。

