高并发系统设计:从理论到实践 —— 零基础也能看懂的教程
开篇:什么是高并发,为什么要学它?

想象一下你开了一家小饭馆,每天最多接待50位客人。有一天突然火了,一天来了1000人,结果店里挤得水泄不通,厨师忙不过来,客人都走光了。
这就是低并发处理能力的问题。
在互联网行业,我们把“同时能处理多少用户请求”叫做并发量。如果你开发的是一个电商平台、社交App或者在线游戏,就特别需要让你的系统具备高并发能力 —— 换句话说,就是能快速处理大量用户请求,不让服务崩溃或卡顿。
本教程将带你从零开始了解高并发系统的原理,并动手实现一个简单的项目,让你理解高并发到底是什么、为什么会难、如何优化。
环境准备:搭建你的第一个后端开发环境(Node.js + Express)

我们选用 Node.js + Express 来做这个实战项目,因为它轻量、上手快,很适合初学者练习高并发场景。
一、安装 Node.js 和 npm
- 打开 https://nodejs.org
- 下载 LTS 版本(推荐)
- 安装完成后,在终端(Windows用CMD)运行以下命令:
node -v # 查看是否安装成功 npm -v # 查看npm版本
二、创建项目目录并初始化
mkdir high-concurrent-demo
cd high-concurrent-demo
npm init -y
三、安装 Express
npm install express
四、创建入口文件 app.js
在项目根目录下创建 app.js 文件,内容如下:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, 高并发世界!');
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});
启动服务器:
node app.js
现在浏览器访问 http://localhost:3000,你能看到 “Hello, 高并发世界!” —— 恭喜!你的第一个 Web 后端已经完成了!
核心概念讲解:什么是并发?为什么处理不了太多请求?

一、并发 vs 请求量
- 并发(Concurrency) 是指在同一时刻有多少个请求在“处理中”
- 请求数量(Requests) 可以是每秒成千上万个,但只有其中一部分在“并发”
例如:如果服务器每秒钟可以处理10个请求,那它的并发能力大概就是10左右。
就像餐厅有10张桌子,每桌坐一个人吃饭,每小时翻台5次,相当于1小时服务了50个人,但最大并发只有10。
二、常见的性能瓶颈有哪些?
- CPU计算能力不够
- 内存不足
- 数据库处理慢
- 网络延迟大
我们要做的就是想办法绕开这些限制,提高服务器响应速度。
三、缓存:给数据加“快捷通道”
比如用户访问首页时会查很多数据。如果每次都去数据库查,就会很慢。我们可以把第一次查询的结果保存起来,下次直接返回这个结果,这就叫缓存(Cache)。
举个例子:
let cache = null;
app.get('/data', async (req, res) => {
if (cache) {
return res.json(cache); // 使用缓存
}
const data = await fetchDataFromDB(); // 从数据库取数据
cache = data; // 存入缓存
res.json(data);
});
✅ 新手问答:
问:缓存过期了怎么办?
可以加一个时间戳判断,超过一定时间自动失效,重新获取。
let cacheData = null; let lastFetchTime = 0; app.get('/data', async (req, res) => { const now = Date.now(); const TTL = 5 * 1000; // 缓存5秒 if (cacheData && now - lastFetchTime < TTL) { return res.json(cacheData); } const newData = await fetchDataFromDB(); cacheData = newData; lastFetchTime = now; res.json(newData); });
四、异步非阻塞:不要等,去做别的事!
Node.js 的一大优势是它使用了“事件驱动、异步非阻塞”的方式处理请求。
通俗点说:以前服务员要等一个客人点完菜才去招待下一个客人;现在他可以让多个客人同时点菜,谁先点完他就先去下单,效率大大提高。
示例代码:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
app.get('/slow', async (req, res) => {
await sleep(2000); // 模拟耗时操作
res.send("两秒后终于好了!");
});
你可以在浏览器同时打开多个标签页访问 /slow,你会发现它们几乎是差不多同时返回的,不是排队等,而是大家一起处理。
五、负载均衡:把请求分给多个“服务员”
如果我们有10个服务器一起工作,把每个请求随机分配给其中一个服务器,就能扛住10倍的并发。
你可以使用 Nginx 或者云服务来做负载均衡。本教程不展开配置细节,但我们后面会给出一个模拟多节点的例子。
实战项目:打造一个支持高并发的“每日一句” API 接口
我们将实现一个接口 /quote,每次访问都能得到一句鼓励的话。目标:在高并发下仍然快速返回结果。
步骤一:创建 quotes.js 放一些金句
// quotes.js
module.exports = [
"努力终有回报。",
"今天比昨天更好。",
"你真的很棒!",
"再坚持一下就胜利了。",
"人生没有白走的路。",
];
步骤二:在 app.js 中调用它,并加缓存
const express = require('express');
const quotes = require('./quotes');
let currentQuote = '';
let lastUpdateTime = 0;
function getRandomQuote() {
const index = Math.floor(Math.random() * quotes.length);
return quotes[index];
}
app.get('/quote', (req, res) => {
// 每隔5秒更新一次
const now = Date.now();
if (!currentQuote || now - lastUpdateTime > 5000) {
currentQuote = getRandomQuote();
lastUpdate = now;
}
res.json({ quote: currentQuote });
});
步骤三:使用压力测试工具压测看看效果
安装 loadtest 压力测试工具:
npm install -g loadtest
发起一个并发测试:
loadtest --rps 100 --maxSeconds 10 http://localhost:3000/quote
上面这段命令的意思是:每秒发送100个请求,持续10秒。
你会看到类似这样的输出:
INFO: Target URL: http://localhost:3000/quote
INFO: Max requests: None
INFO: Concurrency level: 100
INFO: Requests per second: 100
INFO: OK: 1000 responses
INFO: Mean latency: 2 ms
INFO: Succeeded: 100%

说明我们的系统能够承受每秒100个请求而不崩溃。
常见问题解答(新手常问)
问题1:为什么我测试时服务器很快崩掉了?
可能原因:
- 你用了同步方法导致阻塞(比如用了
for循环做复杂计算) - 内存泄漏或无限递归
- 数据库连接池没设置好
建议排查方式:
- 使用
console.log()打印执行过程 - 用调试工具检查 CPU/内存占用
- 把代码精简,找出卡住的地方
问题2:是不是并发越高越好?
不是。并发高意味着资源消耗也高。如果你的服务器只有一核CPU、1G内存,盲目提升并发会适得其反。
所以你要根据硬件情况、用户需求进行权衡优化。
问题3:有没有更简单的方式处理高并发?
有的,比如使用一些现成的平台:
- Redis:作为缓存中间件
- Nginx:做负载均衡和静态资源处理
- Docker + Kubernetes:容器化部署更容易横向扩展
- 云服务:阿里云/腾讯云的 Serverless 架构(如函数计算)也可以帮你自动扩缩容
这些都是进阶学习方向,我们在下一节会介绍。
学习建议:下一步应该学什么?
恭喜你完成了这篇入门教程!接下来的学习路径可以这样安排:
| 阶段 | 学习内容 | 推荐资源 |
|---|---|---|
| 初级阶段 | 熟练使用 Node.js + Express + MongoDB | B站、慕课网 |
| 中级阶段 | 学习 Redis、数据库索引、SQL优化 | 《高性能MySQL》 |
| 进阶阶段 | 学会负载均衡、微服务架构 | 《深入理解 Nginx》、Spring Cloud |
| 实战阶段 | 自己做一个博客系统 / 电商后台 | GitHub 开源项目 |
| 深造阶段 | 学 Docker、Kubernetes、Serverless | 官方文档 & 极客时间 |
结语
高并发系统看起来很高大上,其实只要理解它本质是在解决“同时很多人找你办事”的问题,你就已经迈出了第一步。
通过缓存、异步、负载均衡等手段,你也可以写出能抗住大流量的服务。
记住一句话:
“并发不是拼硬件,而是靠聪明的设计。”
愿你在后端的世界越走越远,写出令人惊叹的高并发系统!
如你喜欢这篇文章,请点赞、收藏、分享给正在入门的好友吧!如有后续想了解的主题,欢迎留言告诉我 😄

评论 0