服务器并发性能详解:从C10K到C10M
文档时间: 2026-01-27
目录
- 什么是C10K/C100K/C10M
- 并发性能指标
- 性能挑战演进
- C10K问题
- 解决方案
- 技术要点
- C100K挑战
- 关键技术
- 系统优化
- C10M挑战
- 内核旁路技术
- 实现架构
- 接入层/网关
- 业务微服务
- 数据库与缓存
- 高性能配置
- 中等配置
- 低配置
- I/O多路复用
- 异步非阻塞
- 零拷贝技术
- 内核旁路技术
并发性能速查表
快速对比不同并发级别:
| C10K | 1万 | ✅ 轻松实现 | 线程模型优化 | 几十MB | 低 | ⭐⭐ |
| C100K | 10万 | ⚠️ 需优化 | 系统调优、内存管理 | 4-10GB | 中 | ⭐⭐⭐ |
| C1M | 100万 | ⚠️ 需深度优化 | 内核优化、协议栈优化 | 40-100GB | 高 | ⭐⭐⭐⭐ |
| C10M | 1000万 | ⚠️ 需内核旁路 | 内核旁路、专用硬件 | 400GB+ | 极高 | ⭐⭐⭐⭐⭐ |
典型服务性能参考:
| Nginx/OpenResty | 5万-10万 | 10万-30万 | 4-8核,8-16GB | 接入层 |
| Netty TCP服务 | – | 10万-30万 | 4-8核,8-16GB | 长连接 |
| 简单CRUD接口 | 数千-2万 | 数千-2万 | 4-8核,8-16GB | 业务服务 |
| 复杂业务接口 | 几百-几千 | 几百-几千 | 4-8核,8-16GB | 业务服务 |
| Redis | 10万+ (读) | – | 4-8核,8-16GB | 缓存 |
| MySQL | 几千 | – | 4-8核,8-16GB | 数据库 |
关键技术对比:
| epoll | C10K+ | 10-100倍 | ⭐⭐ | I/O多路复用 |
| 异步非阻塞 | C10K+ | 5-10倍 | ⭐⭐⭐ | 业务处理 |
| 零拷贝 | C100K+ | 2-5倍 | ⭐⭐⭐ | 数据传输 |
| DPDK | C1M+ | 10-100倍 | ⭐⭐⭐⭐⭐ | 内核旁路 |
| XDP | C1M+ | 5-50倍 | ⭐⭐⭐⭐ | 内核旁路 |
并发性能概述
什么是C10K/C100K/C10M
C10K/C100K/C10M指单机维持1万/10万/1000万条并发TCP连接并正常处理请求的能力。
#mermaid-svg-fdLSKtRXloTeJlRE{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fdLSKtRXloTeJlRE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fdLSKtRXloTeJlRE .error-icon{fill:#552222;}#mermaid-svg-fdLSKtRXloTeJlRE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fdLSKtRXloTeJlRE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fdLSKtRXloTeJlRE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fdLSKtRXloTeJlRE .marker.cross{stroke:#333333;}#mermaid-svg-fdLSKtRXloTeJlRE svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fdLSKtRXloTeJlRE p{margin:0;}#mermaid-svg-fdLSKtRXloTeJlRE .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-fdLSKtRXloTeJlRE .cluster-label text{fill:#333;}#mermaid-svg-fdLSKtRXloTeJlRE .cluster-label span{color:#333;}#mermaid-svg-fdLSKtRXloTeJlRE .cluster-label span p{background-color:transparent;}#mermaid-svg-fdLSKtRXloTeJlRE .label text,#mermaid-svg-fdLSKtRXloTeJlRE span{fill:#333;color:#333;}#mermaid-svg-fdLSKtRXloTeJlRE .node rect,#mermaid-svg-fdLSKtRXloTeJlRE .node circle,#mermaid-svg-fdLSKtRXloTeJlRE .node ellipse,#mermaid-svg-fdLSKtRXloTeJlRE .node polygon,#mermaid-svg-fdLSKtRXloTeJlRE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fdLSKtRXloTeJlRE .rough-node .label text,#mermaid-svg-fdLSKtRXloTeJlRE .node .label text,#mermaid-svg-fdLSKtRXloTeJlRE .image-shape .label,#mermaid-svg-fdLSKtRXloTeJlRE .icon-shape .label{text-anchor:middle;}#mermaid-svg-fdLSKtRXloTeJlRE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fdLSKtRXloTeJlRE .rough-node .label,#mermaid-svg-fdLSKtRXloTeJlRE .node .label,#mermaid-svg-fdLSKtRXloTeJlRE .image-shape .label,#mermaid-svg-fdLSKtRXloTeJlRE .icon-shape .label{text-align:center;}#mermaid-svg-fdLSKtRXloTeJlRE .node.clickable{cursor:pointer;}#mermaid-svg-fdLSKtRXloTeJlRE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fdLSKtRXloTeJlRE .arrowheadPath{fill:#333333;}#mermaid-svg-fdLSKtRXloTeJlRE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fdLSKtRXloTeJlRE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fdLSKtRXloTeJlRE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fdLSKtRXloTeJlRE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fdLSKtRXloTeJlRE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fdLSKtRXloTeJlRE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fdLSKtRXloTeJlRE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fdLSKtRXloTeJlRE .cluster text{fill:#333;}#mermaid-svg-fdLSKtRXloTeJlRE .cluster span{color:#333;}#mermaid-svg-fdLSKtRXloTeJlRE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fdLSKtRXloTeJlRE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fdLSKtRXloTeJlRE rect.text{fill:none;stroke-width:0;}#mermaid-svg-fdLSKtRXloTeJlRE .icon-shape,#mermaid-svg-fdLSKtRXloTeJlRE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fdLSKtRXloTeJlRE .icon-shape p,#mermaid-svg-fdLSKtRXloTeJlRE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fdLSKtRXloTeJlRE .icon-shape rect,#mermaid-svg-fdLSKtRXloTeJlRE .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fdLSKtRXloTeJlRE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fdLSKtRXloTeJlRE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fdLSKtRXloTeJlRE :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
基础
优化
深度优化
极限
并发性能级别
C10K1万连接
C100K10万连接
C1M100万连接
C10M1000万连接
I/O多路复用
系统调优
内核优化
内核旁路
并发级别说明:
| C10K | 10,000 | 单机1万并发连接 | 中小型Web服务 |
| C100K | 100,000 | 单机10万并发连接 | 大型Web服务、IM |
| C1M | 1,000,000 | 单机100万并发连接 | 超大型服务、CDN |
| C10M | 10,000,000 | 单机1000万并发连接 | 极限场景、专用设备 |
并发性能指标
关键性能指标:
#mermaid-svg-d2VnPYQmXc56TnM4{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-d2VnPYQmXc56TnM4 .error-icon{fill:#552222;}#mermaid-svg-d2VnPYQmXc56TnM4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-d2VnPYQmXc56TnM4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-d2VnPYQmXc56TnM4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-d2VnPYQmXc56TnM4 .marker.cross{stroke:#333333;}#mermaid-svg-d2VnPYQmXc56TnM4 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-d2VnPYQmXc56TnM4 p{margin:0;}#mermaid-svg-d2VnPYQmXc56TnM4 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster-label text{fill:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster-label span{color:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster-label span p{background-color:transparent;}#mermaid-svg-d2VnPYQmXc56TnM4 .label text,#mermaid-svg-d2VnPYQmXc56TnM4 span{fill:#333;color:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 .node rect,#mermaid-svg-d2VnPYQmXc56TnM4 .node circle,#mermaid-svg-d2VnPYQmXc56TnM4 .node ellipse,#mermaid-svg-d2VnPYQmXc56TnM4 .node polygon,#mermaid-svg-d2VnPYQmXc56TnM4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-d2VnPYQmXc56TnM4 .rough-node .label text,#mermaid-svg-d2VnPYQmXc56TnM4 .node .label text,#mermaid-svg-d2VnPYQmXc56TnM4 .image-shape .label,#mermaid-svg-d2VnPYQmXc56TnM4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-d2VnPYQmXc56TnM4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-d2VnPYQmXc56TnM4 .rough-node .label,#mermaid-svg-d2VnPYQmXc56TnM4 .node .label,#mermaid-svg-d2VnPYQmXc56TnM4 .image-shape .label,#mermaid-svg-d2VnPYQmXc56TnM4 .icon-shape .label{text-align:center;}#mermaid-svg-d2VnPYQmXc56TnM4 .node.clickable{cursor:pointer;}#mermaid-svg-d2VnPYQmXc56TnM4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-d2VnPYQmXc56TnM4 .arrowheadPath{fill:#333333;}#mermaid-svg-d2VnPYQmXc56TnM4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-d2VnPYQmXc56TnM4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-d2VnPYQmXc56TnM4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d2VnPYQmXc56TnM4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-d2VnPYQmXc56TnM4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d2VnPYQmXc56TnM4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster text{fill:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 .cluster span{color:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-d2VnPYQmXc56TnM4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-d2VnPYQmXc56TnM4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-d2VnPYQmXc56TnM4 .icon-shape,#mermaid-svg-d2VnPYQmXc56TnM4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-d2VnPYQmXc56TnM4 .icon-shape p,#mermaid-svg-d2VnPYQmXc56TnM4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-d2VnPYQmXc56TnM4 .icon-shape rect,#mermaid-svg-d2VnPYQmXc56TnM4 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-d2VnPYQmXc56TnM4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-d2VnPYQmXc56TnM4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-d2VnPYQmXc56TnM4 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
并发连接
每秒查询
带宽
响应时间
CPU/内存
并发性能指标
连接数
QPS
吞吐量
延迟
资源消耗
同时在线连接
请求处理能力
数据传输能力
用户体验
资源利用率
指标说明:
| 并发连接数 | 同时维持的TCP连接数 | 内存、文件描述符 |
| QPS | 每秒处理的请求数 | CPU、带宽、业务逻辑 |
| 吞吐量 | 每秒传输的数据量 | 带宽、网卡性能 |
| 延迟 | 请求响应时间 | CPU、网络、业务处理 |
| 资源消耗 | CPU、内存使用率 | 连接数、业务复杂度 |
性能挑战演进
从C10K到C10M的挑战演进:
#mermaid-svg-sRhlJ1ueO8Pp6z83{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .error-icon{fill:#552222;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .marker.cross{stroke:#333333;}#mermaid-svg-sRhlJ1ueO8Pp6z83 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sRhlJ1ueO8Pp6z83 p{margin:0;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge{stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 text{fill:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth–1{stroke-width:17;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-0{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-0{stroke-width:14;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-1{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-1{stroke-width:11;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 text{fill:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-2{stroke-width:8;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-3{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-3{stroke-width:5;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-4{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-4{stroke-width:2;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-5{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-5{stroke-width:-1;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-6{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-6{stroke-width:-4;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-7{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-7{stroke-width:-7;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-8{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-8{stroke-width:-10;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-9{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-9{stroke-width:-13;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 text{fill:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .node-icon-10{font-size:40px;color:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge-depth-10{stroke-width:-16;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .lineWrapper line{stroke:black;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled circle,#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:lightgray;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .disabled text{fill:#efefef;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-root rect,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-root path,#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 .section-root text{fill:#ffffff;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .edge{fill:none;}#mermaid-svg-sRhlJ1ueO8Pp6z83 .eventWrapper{filter:brightness(120%);}#mermaid-svg-sRhlJ1ueO8Pp6z83 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
2000s
C10K问题
线程模型瓶颈
I/O多路复用解决
2010s
C100K挑战
系统资源瓶颈
系统调优解决
2015s
C1M挑战
内核协议栈瓶颈
内核优化解决
2020s
C10M挑战
硬件和架构瓶颈
内核旁路解决
并发性能挑战演进
挑战对比:
| C10K | 线程模型 | I/O多路复用 | ⭐⭐ |
| C100K | 系统资源 | 系统调优 | ⭐⭐⭐ |
| C1M | 内核协议栈 | 内核优化 | ⭐⭐⭐⭐ |
| C10M | 硬件架构 | 内核旁路 | ⭐⭐⭐⭐⭐ |
C10K实现
C10K问题
**C10K问题的核心:**传统的"一个连接一个线程"模型无法支持1万并发连接。
#mermaid-svg-aw5ZdH1oUDLXuBnP{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aw5ZdH1oUDLXuBnP .error-icon{fill:#552222;}#mermaid-svg-aw5ZdH1oUDLXuBnP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aw5ZdH1oUDLXuBnP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .marker.cross{stroke:#333333;}#mermaid-svg-aw5ZdH1oUDLXuBnP svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aw5ZdH1oUDLXuBnP p{margin:0;}#mermaid-svg-aw5ZdH1oUDLXuBnP .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster-label text{fill:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster-label span{color:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster-label span p{background-color:transparent;}#mermaid-svg-aw5ZdH1oUDLXuBnP .label text,#mermaid-svg-aw5ZdH1oUDLXuBnP span{fill:#333;color:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .node rect,#mermaid-svg-aw5ZdH1oUDLXuBnP .node circle,#mermaid-svg-aw5ZdH1oUDLXuBnP .node ellipse,#mermaid-svg-aw5ZdH1oUDLXuBnP .node polygon,#mermaid-svg-aw5ZdH1oUDLXuBnP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .rough-node .label text,#mermaid-svg-aw5ZdH1oUDLXuBnP .node .label text,#mermaid-svg-aw5ZdH1oUDLXuBnP .image-shape .label,#mermaid-svg-aw5ZdH1oUDLXuBnP .icon-shape .label{text-anchor:middle;}#mermaid-svg-aw5ZdH1oUDLXuBnP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .rough-node .label,#mermaid-svg-aw5ZdH1oUDLXuBnP .node .label,#mermaid-svg-aw5ZdH1oUDLXuBnP .image-shape .label,#mermaid-svg-aw5ZdH1oUDLXuBnP .icon-shape .label{text-align:center;}#mermaid-svg-aw5ZdH1oUDLXuBnP .node.clickable{cursor:pointer;}#mermaid-svg-aw5ZdH1oUDLXuBnP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .arrowheadPath{fill:#333333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aw5ZdH1oUDLXuBnP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aw5ZdH1oUDLXuBnP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aw5ZdH1oUDLXuBnP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster text{fill:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP .cluster span{color:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aw5ZdH1oUDLXuBnP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aw5ZdH1oUDLXuBnP rect.text{fill:none;stroke-width:0;}#mermaid-svg-aw5ZdH1oUDLXuBnP .icon-shape,#mermaid-svg-aw5ZdH1oUDLXuBnP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aw5ZdH1oUDLXuBnP .icon-shape p,#mermaid-svg-aw5ZdH1oUDLXuBnP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aw5ZdH1oUDLXuBnP .icon-shape rect,#mermaid-svg-aw5ZdH1oUDLXuBnP .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aw5ZdH1oUDLXuBnP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aw5ZdH1oUDLXuBnP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aw5ZdH1oUDLXuBnP :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
传统模型
一个连接一个线程
1万连接 = 1万线程
资源耗尽
内存不足每线程2-8MB
上下文切换开销大
文件描述符限制
传统模型的问题:
| 内存消耗 | 每线程2-8MB栈空间,1万线程需要20-80GB | 内存不足 |
| 上下文切换 | 大量线程导致频繁的上下文切换 | CPU浪费 |
| 文件描述符 | 系统默认限制通常为1024 | 连接数受限 |
| 调度开销 | 操作系统调度大量线程的开销 | 性能下降 |
解决方案
C10K问题的解决方案:I/O多路复用
#mermaid-svg-kV4VdpaksIV6uu47{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kV4VdpaksIV6uu47 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kV4VdpaksIV6uu47 .error-icon{fill:#552222;}#mermaid-svg-kV4VdpaksIV6uu47 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kV4VdpaksIV6uu47 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kV4VdpaksIV6uu47 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kV4VdpaksIV6uu47 .marker.cross{stroke:#333333;}#mermaid-svg-kV4VdpaksIV6uu47 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kV4VdpaksIV6uu47 p{margin:0;}#mermaid-svg-kV4VdpaksIV6uu47 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-kV4VdpaksIV6uu47 .cluster-label text{fill:#333;}#mermaid-svg-kV4VdpaksIV6uu47 .cluster-label span{color:#333;}#mermaid-svg-kV4VdpaksIV6uu47 .cluster-label span p{background-color:transparent;}#mermaid-svg-kV4VdpaksIV6uu47 .label text,#mermaid-svg-kV4VdpaksIV6uu47 span{fill:#333;color:#333;}#mermaid-svg-kV4VdpaksIV6uu47 .node rect,#mermaid-svg-kV4VdpaksIV6uu47 .node circle,#mermaid-svg-kV4VdpaksIV6uu47 .node ellipse,#mermaid-svg-kV4VdpaksIV6uu47 .node polygon,#mermaid-svg-kV4VdpaksIV6uu47 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kV4VdpaksIV6uu47 .rough-node .label text,#mermaid-svg-kV4VdpaksIV6uu47 .node .label text,#mermaid-svg-kV4VdpaksIV6uu47 .image-shape .label,#mermaid-svg-kV4VdpaksIV6uu47 .icon-shape .label{text-anchor:middle;}#mermaid-svg-kV4VdpaksIV6uu47 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kV4VdpaksIV6uu47 .rough-node .label,#mermaid-svg-kV4VdpaksIV6uu47 .node .label,#mermaid-svg-kV4VdpaksIV6uu47 .image-shape .label,#mermaid-svg-kV4VdpaksIV6uu47 .icon-shape .label{text-align:center;}#mermaid-svg-kV4VdpaksIV6uu47 .node.clickable{cursor:pointer;}#mermaid-svg-kV4VdpaksIV6uu47 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kV4VdpaksIV6uu47 .arrowheadPath{fill:#333333;}#mermaid-svg-kV4VdpaksIV6uu47 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kV4VdpaksIV6uu47 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kV4VdpaksIV6uu47 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kV4VdpaksIV6uu47 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kV4VdpaksIV6uu47 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kV4VdpaksIV6uu47 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kV4VdpaksIV6uu47 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kV4VdpaksIV6uu47 .cluster text{fill:#333;}#mermaid-svg-kV4VdpaksIV6uu47 .cluster span{color:#333;}#mermaid-svg-kV4VdpaksIV6uu47 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kV4VdpaksIV6uu47 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kV4VdpaksIV6uu47 rect.text{fill:none;stroke-width:0;}#mermaid-svg-kV4VdpaksIV6uu47 .icon-shape,#mermaid-svg-kV4VdpaksIV6uu47 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kV4VdpaksIV6uu47 .icon-shape p,#mermaid-svg-kV4VdpaksIV6uu47 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kV4VdpaksIV6uu47 .icon-shape rect,#mermaid-svg-kV4VdpaksIV6uu47 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kV4VdpaksIV6uu47 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kV4VdpaksIV6uu47 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kV4VdpaksIV6uu47 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
1万线程
少量线程
传统模型
资源耗尽
I/O多路复用
高效管理
epoll/kqueue
单线程管理多连接
事件驱动
解决方案对比:
| 传统模型 | N个连接 = N个线程 | 20-80GB | 差 | 已淘汰 |
| I/O多路复用 | 少量线程(1-4个) | 几十MB | 优秀 | 现代标准 |
| 异步I/O | 单线程 | 最小 | 优秀 | 高并发场景 |
技术要点
实现C10K的关键技术:
#mermaid-svg-s7hJNKuRzuFGOCab{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-s7hJNKuRzuFGOCab .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-s7hJNKuRzuFGOCab .error-icon{fill:#552222;}#mermaid-svg-s7hJNKuRzuFGOCab .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-s7hJNKuRzuFGOCab .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-s7hJNKuRzuFGOCab .marker{fill:#333333;stroke:#333333;}#mermaid-svg-s7hJNKuRzuFGOCab .marker.cross{stroke:#333333;}#mermaid-svg-s7hJNKuRzuFGOCab svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-s7hJNKuRzuFGOCab p{margin:0;}#mermaid-svg-s7hJNKuRzuFGOCab .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-s7hJNKuRzuFGOCab .cluster-label text{fill:#333;}#mermaid-svg-s7hJNKuRzuFGOCab .cluster-label span{color:#333;}#mermaid-svg-s7hJNKuRzuFGOCab .cluster-label span p{background-color:transparent;}#mermaid-svg-s7hJNKuRzuFGOCab .label text,#mermaid-svg-s7hJNKuRzuFGOCab span{fill:#333;color:#333;}#mermaid-svg-s7hJNKuRzuFGOCab .node rect,#mermaid-svg-s7hJNKuRzuFGOCab .node circle,#mermaid-svg-s7hJNKuRzuFGOCab .node ellipse,#mermaid-svg-s7hJNKuRzuFGOCab .node polygon,#mermaid-svg-s7hJNKuRzuFGOCab .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-s7hJNKuRzuFGOCab .rough-node .label text,#mermaid-svg-s7hJNKuRzuFGOCab .node .label text,#mermaid-svg-s7hJNKuRzuFGOCab .image-shape .label,#mermaid-svg-s7hJNKuRzuFGOCab .icon-shape .label{text-anchor:middle;}#mermaid-svg-s7hJNKuRzuFGOCab .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-s7hJNKuRzuFGOCab .rough-node .label,#mermaid-svg-s7hJNKuRzuFGOCab .node .label,#mermaid-svg-s7hJNKuRzuFGOCab .image-shape .label,#mermaid-svg-s7hJNKuRzuFGOCab .icon-shape .label{text-align:center;}#mermaid-svg-s7hJNKuRzuFGOCab .node.clickable{cursor:pointer;}#mermaid-svg-s7hJNKuRzuFGOCab .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-s7hJNKuRzuFGOCab .arrowheadPath{fill:#333333;}#mermaid-svg-s7hJNKuRzuFGOCab .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-s7hJNKuRzuFGOCab .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-s7hJNKuRzuFGOCab .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s7hJNKuRzuFGOCab .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-s7hJNKuRzuFGOCab .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s7hJNKuRzuFGOCab .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-s7hJNKuRzuFGOCab .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-s7hJNKuRzuFGOCab .cluster text{fill:#333;}#mermaid-svg-s7hJNKuRzuFGOCab .cluster span{color:#333;}#mermaid-svg-s7hJNKuRzuFGOCab div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-s7hJNKuRzuFGOCab .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-s7hJNKuRzuFGOCab rect.text{fill:none;stroke-width:0;}#mermaid-svg-s7hJNKuRzuFGOCab .icon-shape,#mermaid-svg-s7hJNKuRzuFGOCab .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s7hJNKuRzuFGOCab .icon-shape p,#mermaid-svg-s7hJNKuRzuFGOCab .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-s7hJNKuRzuFGOCab .icon-shape rect,#mermaid-svg-s7hJNKuRzuFGOCab .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s7hJNKuRzuFGOCab .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-s7hJNKuRzuFGOCab .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-s7hJNKuRzuFGOCab :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
epoll
非阻塞
事件循环
参数调整
C10K技术要点
I/O多路复用
非阻塞I/O
事件驱动
系统调优
高效事件通知
避免线程阻塞
单线程处理
资源限制
关键技术:
| epoll | Linux高效的I/O多路复用机制 | epoll_create, epoll_wait |
| 非阻塞I/O | 设置socket为非阻塞模式 | fcntl(fd, F_SETFL, O_NONBLOCK) |
| 事件驱动 | 基于事件的处理模型 | Reactor模式 |
| 系统调优 | 调整文件描述符限制等 | ulimit -n 65535 |
示例代码框架:
// epoll示例框架
int epfd = epoll_create1(0);
struct epoll_event events[MAX_EVENTS];
while (1) {
int nfds = epoll_wait(epfd, events, MAX_EVENTS, –1);
for (int i = 0; i < nfds; i++) {
if (events[i].events & EPOLLIN) {
// 处理读事件
handle_read(events[i].data.fd);
}
if (events[i].events & EPOLLOUT) {
// 处理写事件
handle_write(events[i].data.fd);
}
}
}
C100K实现
C100K挑战
C100K的主要挑战:
#mermaid-svg-mexrzwQmRVo0wBgt{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mexrzwQmRVo0wBgt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mexrzwQmRVo0wBgt .error-icon{fill:#552222;}#mermaid-svg-mexrzwQmRVo0wBgt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mexrzwQmRVo0wBgt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mexrzwQmRVo0wBgt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mexrzwQmRVo0wBgt .marker.cross{stroke:#333333;}#mermaid-svg-mexrzwQmRVo0wBgt svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mexrzwQmRVo0wBgt p{margin:0;}#mermaid-svg-mexrzwQmRVo0wBgt .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-mexrzwQmRVo0wBgt .cluster-label text{fill:#333;}#mermaid-svg-mexrzwQmRVo0wBgt .cluster-label span{color:#333;}#mermaid-svg-mexrzwQmRVo0wBgt .cluster-label span p{background-color:transparent;}#mermaid-svg-mexrzwQmRVo0wBgt .label text,#mermaid-svg-mexrzwQmRVo0wBgt span{fill:#333;color:#333;}#mermaid-svg-mexrzwQmRVo0wBgt .node rect,#mermaid-svg-mexrzwQmRVo0wBgt .node circle,#mermaid-svg-mexrzwQmRVo0wBgt .node ellipse,#mermaid-svg-mexrzwQmRVo0wBgt .node polygon,#mermaid-svg-mexrzwQmRVo0wBgt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mexrzwQmRVo0wBgt .rough-node .label text,#mermaid-svg-mexrzwQmRVo0wBgt .node .label text,#mermaid-svg-mexrzwQmRVo0wBgt .image-shape .label,#mermaid-svg-mexrzwQmRVo0wBgt .icon-shape .label{text-anchor:middle;}#mermaid-svg-mexrzwQmRVo0wBgt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mexrzwQmRVo0wBgt .rough-node .label,#mermaid-svg-mexrzwQmRVo0wBgt .node .label,#mermaid-svg-mexrzwQmRVo0wBgt .image-shape .label,#mermaid-svg-mexrzwQmRVo0wBgt .icon-shape .label{text-align:center;}#mermaid-svg-mexrzwQmRVo0wBgt .node.clickable{cursor:pointer;}#mermaid-svg-mexrzwQmRVo0wBgt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mexrzwQmRVo0wBgt .arrowheadPath{fill:#333333;}#mermaid-svg-mexrzwQmRVo0wBgt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mexrzwQmRVo0wBgt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mexrzwQmRVo0wBgt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mexrzwQmRVo0wBgt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mexrzwQmRVo0wBgt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mexrzwQmRVo0wBgt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mexrzwQmRVo0wBgt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mexrzwQmRVo0wBgt .cluster text{fill:#333;}#mermaid-svg-mexrzwQmRVo0wBgt .cluster span{color:#333;}#mermaid-svg-mexrzwQmRVo0wBgt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mexrzwQmRVo0wBgt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mexrzwQmRVo0wBgt rect.text{fill:none;stroke-width:0;}#mermaid-svg-mexrzwQmRVo0wBgt .icon-shape,#mermaid-svg-mexrzwQmRVo0wBgt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mexrzwQmRVo0wBgt .icon-shape p,#mermaid-svg-mexrzwQmRVo0wBgt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mexrzwQmRVo0wBgt .icon-shape rect,#mermaid-svg-mexrzwQmRVo0wBgt .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mexrzwQmRVo0wBgt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mexrzwQmRVo0wBgt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mexrzwQmRVo0wBgt :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
每连接4-20KB
10万连接
网络栈优化
中断处理
数据传输
C100K挑战
内存消耗
文件描述符
内核优化
CPU处理
带宽需求
4-10GB内存
需调高限制
协议栈调优
软中断优化
足够带宽
挑战详解:
| 内存消耗 | 每连接4-20KB,10万连接需4-10GB | 内存池、连接复用 |
| 文件描述符 | 系统默认限制通常为1024 | 调高ulimit -n |
| 内核协议栈 | 传统协议栈性能不足 | TCP参数调优 |
| CPU处理 | 中断和软中断成为瓶颈 | 中断绑定、RPS |
| 带宽 | 需要足够的网络带宽 | 升级网卡 |
关键技术
实现C100K的关键技术:
#mermaid-svg-m9u5ONhatCmBRdvP{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m9u5ONhatCmBRdvP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m9u5ONhatCmBRdvP .error-icon{fill:#552222;}#mermaid-svg-m9u5ONhatCmBRdvP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m9u5ONhatCmBRdvP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m9u5ONhatCmBRdvP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m9u5ONhatCmBRdvP .marker.cross{stroke:#333333;}#mermaid-svg-m9u5ONhatCmBRdvP svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m9u5ONhatCmBRdvP p{margin:0;}#mermaid-svg-m9u5ONhatCmBRdvP .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-m9u5ONhatCmBRdvP .cluster-label text{fill:#333;}#mermaid-svg-m9u5ONhatCmBRdvP .cluster-label span{color:#333;}#mermaid-svg-m9u5ONhatCmBRdvP .cluster-label span p{background-color:transparent;}#mermaid-svg-m9u5ONhatCmBRdvP .label text,#mermaid-svg-m9u5ONhatCmBRdvP span{fill:#333;color:#333;}#mermaid-svg-m9u5ONhatCmBRdvP .node rect,#mermaid-svg-m9u5ONhatCmBRdvP .node circle,#mermaid-svg-m9u5ONhatCmBRdvP .node ellipse,#mermaid-svg-m9u5ONhatCmBRdvP .node polygon,#mermaid-svg-m9u5ONhatCmBRdvP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-m9u5ONhatCmBRdvP .rough-node .label text,#mermaid-svg-m9u5ONhatCmBRdvP .node .label text,#mermaid-svg-m9u5ONhatCmBRdvP .image-shape .label,#mermaid-svg-m9u5ONhatCmBRdvP .icon-shape .label{text-anchor:middle;}#mermaid-svg-m9u5ONhatCmBRdvP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-m9u5ONhatCmBRdvP .rough-node .label,#mermaid-svg-m9u5ONhatCmBRdvP .node .label,#mermaid-svg-m9u5ONhatCmBRdvP .image-shape .label,#mermaid-svg-m9u5ONhatCmBRdvP .icon-shape .label{text-align:center;}#mermaid-svg-m9u5ONhatCmBRdvP .node.clickable{cursor:pointer;}#mermaid-svg-m9u5ONhatCmBRdvP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-m9u5ONhatCmBRdvP .arrowheadPath{fill:#333333;}#mermaid-svg-m9u5ONhatCmBRdvP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-m9u5ONhatCmBRdvP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-m9u5ONhatCmBRdvP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m9u5ONhatCmBRdvP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-m9u5ONhatCmBRdvP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m9u5ONhatCmBRdvP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-m9u5ONhatCmBRdvP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-m9u5ONhatCmBRdvP .cluster text{fill:#333;}#mermaid-svg-m9u5ONhatCmBRdvP .cluster span{color:#333;}#mermaid-svg-m9u5ONhatCmBRdvP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-m9u5ONhatCmBRdvP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-m9u5ONhatCmBRdvP rect.text{fill:none;stroke-width:0;}#mermaid-svg-m9u5ONhatCmBRdvP .icon-shape,#mermaid-svg-m9u5ONhatCmBRdvP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m9u5ONhatCmBRdvP .icon-shape p,#mermaid-svg-m9u5ONhatCmBRdvP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-m9u5ONhatCmBRdvP .icon-shape rect,#mermaid-svg-m9u5ONhatCmBRdvP .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m9u5ONhatCmBRdvP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-m9u5ONhatCmBRdvP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-m9u5ONhatCmBRdvP :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
内存池
参数调整
TCP优化
中断优化
C100K技术
内存优化
系统调优
网络优化
CPU优化
预分配内存
文件描述符等
缓冲区、快速打开
中断绑定
关键技术详解:
1. 内存优化
内存池技术:
// 内存池示例
struct connection_pool {
void *memory_pool;
size_t pool_size;
struct connection *free_list;
};
// 预分配连接内存
void init_connection_pool(struct connection_pool *pool, int max_connections) {
pool->pool_size = max_connections * sizeof(struct connection);
pool->memory_pool = malloc(pool->pool_size);
// 初始化空闲列表
}
内存优化策略:
| 内存池 | 预分配连接内存,避免运行时分配 | 减少碎片,提高性能 |
| 连接复用 | 复用连接对象,减少分配/释放 | 降低开销 |
| 紧凑布局 | 优化数据结构布局,减少内存占用 | 提高缓存命中率 |
2. 系统调优
关键系统参数:
# 文件描述符限制
ulimit -n 1000000
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
# TCP参数优化
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65535' >> /etc/sysctl.conf
echo 'net.ipv4.ip_local_port_range = 1024 65535' >> /etc/sysctl.conf
sysctl -p
系统参数说明:
| nofile | 文件描述符限制 | 1000000+ |
| somaxconn | 最大连接队列长度 | 65535 |
| tcp_max_syn_backlog | SYN队列长度 | 65535 |
| ip_local_port_range | 本地端口范围 | 1024-65535 |
3. 网络优化
TCP优化参数:
# TCP缓冲区优化
echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_rmem = 4096 87380 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_wmem = 4096 65536 16777216' >> /etc/sysctl.conf
# TCP快速打开
echo 'net.ipv4.tcp_fastopen = 3' >> /etc/sysctl.conf
# TCP连接复用
echo 'net.ipv4.tcp_tw_reuse = 1' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_fin_timeout = 30' >> /etc/sysctl.conf
系统优化
完整的系统优化清单:
| 文件描述符 | ulimit -n 1000000 | 支持大量连接 |
| TCP参数 | 调整缓冲区大小 | 提高网络性能 |
| 中断绑定 | 绑定网卡中断到特定CPU | 减少中断开销 |
| RPS/RFS | 启用接收包转向 | 多核负载均衡 |
| 大页内存 | 使用HugePage | 减少TLB Miss |
C10M实现
C10M挑战
C10M的极端挑战:
#mermaid-svg-RVDgex8pHXB2LWfd{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RVDgex8pHXB2LWfd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RVDgex8pHXB2LWfd .error-icon{fill:#552222;}#mermaid-svg-RVDgex8pHXB2LWfd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RVDgex8pHXB2LWfd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RVDgex8pHXB2LWfd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RVDgex8pHXB2LWfd .marker.cross{stroke:#333333;}#mermaid-svg-RVDgex8pHXB2LWfd svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RVDgex8pHXB2LWfd p{margin:0;}#mermaid-svg-RVDgex8pHXB2LWfd .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-RVDgex8pHXB2LWfd .cluster-label text{fill:#333;}#mermaid-svg-RVDgex8pHXB2LWfd .cluster-label span{color:#333;}#mermaid-svg-RVDgex8pHXB2LWfd .cluster-label span p{background-color:transparent;}#mermaid-svg-RVDgex8pHXB2LWfd .label text,#mermaid-svg-RVDgex8pHXB2LWfd span{fill:#333;color:#333;}#mermaid-svg-RVDgex8pHXB2LWfd .node rect,#mermaid-svg-RVDgex8pHXB2LWfd .node circle,#mermaid-svg-RVDgex8pHXB2LWfd .node ellipse,#mermaid-svg-RVDgex8pHXB2LWfd .node polygon,#mermaid-svg-RVDgex8pHXB2LWfd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RVDgex8pHXB2LWfd .rough-node .label text,#mermaid-svg-RVDgex8pHXB2LWfd .node .label text,#mermaid-svg-RVDgex8pHXB2LWfd .image-shape .label,#mermaid-svg-RVDgex8pHXB2LWfd .icon-shape .label{text-anchor:middle;}#mermaid-svg-RVDgex8pHXB2LWfd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RVDgex8pHXB2LWfd .rough-node .label,#mermaid-svg-RVDgex8pHXB2LWfd .node .label,#mermaid-svg-RVDgex8pHXB2LWfd .image-shape .label,#mermaid-svg-RVDgex8pHXB2LWfd .icon-shape .label{text-align:center;}#mermaid-svg-RVDgex8pHXB2LWfd .node.clickable{cursor:pointer;}#mermaid-svg-RVDgex8pHXB2LWfd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RVDgex8pHXB2LWfd .arrowheadPath{fill:#333333;}#mermaid-svg-RVDgex8pHXB2LWfd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RVDgex8pHXB2LWfd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RVDgex8pHXB2LWfd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RVDgex8pHXB2LWfd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RVDgex8pHXB2LWfd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RVDgex8pHXB2LWfd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RVDgex8pHXB2LWfd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RVDgex8pHXB2LWfd .cluster text{fill:#333;}#mermaid-svg-RVDgex8pHXB2LWfd .cluster span{color:#333;}#mermaid-svg-RVDgex8pHXB2LWfd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RVDgex8pHXB2LWfd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RVDgex8pHXB2LWfd rect.text{fill:none;stroke-width:0;}#mermaid-svg-RVDgex8pHXB2LWfd .icon-shape,#mermaid-svg-RVDgex8pHXB2LWfd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RVDgex8pHXB2LWfd .icon-shape p,#mermaid-svg-RVDgex8pHXB2LWfd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RVDgex8pHXB2LWfd .icon-shape rect,#mermaid-svg-RVDgex8pHXB2LWfd .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RVDgex8pHXB2LWfd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RVDgex8pHXB2LWfd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RVDgex8pHXB2LWfd :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
1000万连接
100万连接/秒
10 Gbit/s
1000万PPS
微秒级
C10M挑战
连接规模
处理能力
网络吞吐
数据包速率
处理延迟
极大规模
极高处理速度
极高带宽
极高包速率
极低延迟
C10M资源需求:
| 连接数 | 1000万 | 极大规模 |
| 处理速度 | 100万连接/秒 | 假设连接平均存活10秒 |
| 网络吞吐 | 10 Gbit/s | 需要万兆网卡 |
| 数据包速率 | 1000万 PPS | 每秒处理1000万个数据包 |
| 处理延迟 | 微秒级 | 极低延迟要求 |
| 硬件 | 8-16核CPU,64-256GB内存,10G/40G网卡 | 专业硬件 |
内核旁路技术
核心思路:控制面与数据面分离
#mermaid-svg-UIM9PqFvFBizuDoA{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UIM9PqFvFBizuDoA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UIM9PqFvFBizuDoA .error-icon{fill:#552222;}#mermaid-svg-UIM9PqFvFBizuDoA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UIM9PqFvFBizuDoA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UIM9PqFvFBizuDoA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UIM9PqFvFBizuDoA .marker.cross{stroke:#333333;}#mermaid-svg-UIM9PqFvFBizuDoA svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UIM9PqFvFBizuDoA p{margin:0;}#mermaid-svg-UIM9PqFvFBizuDoA .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UIM9PqFvFBizuDoA .cluster-label text{fill:#333;}#mermaid-svg-UIM9PqFvFBizuDoA .cluster-label span{color:#333;}#mermaid-svg-UIM9PqFvFBizuDoA .cluster-label span p{background-color:transparent;}#mermaid-svg-UIM9PqFvFBizuDoA .label text,#mermaid-svg-UIM9PqFvFBizuDoA span{fill:#333;color:#333;}#mermaid-svg-UIM9PqFvFBizuDoA .node rect,#mermaid-svg-UIM9PqFvFBizuDoA .node circle,#mermaid-svg-UIM9PqFvFBizuDoA .node ellipse,#mermaid-svg-UIM9PqFvFBizuDoA .node polygon,#mermaid-svg-UIM9PqFvFBizuDoA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UIM9PqFvFBizuDoA .rough-node .label text,#mermaid-svg-UIM9PqFvFBizuDoA .node .label text,#mermaid-svg-UIM9PqFvFBizuDoA .image-shape .label,#mermaid-svg-UIM9PqFvFBizuDoA .icon-shape .label{text-anchor:middle;}#mermaid-svg-UIM9PqFvFBizuDoA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UIM9PqFvFBizuDoA .rough-node .label,#mermaid-svg-UIM9PqFvFBizuDoA .node .label,#mermaid-svg-UIM9PqFvFBizuDoA .image-shape .label,#mermaid-svg-UIM9PqFvFBizuDoA .icon-shape .label{text-align:center;}#mermaid-svg-UIM9PqFvFBizuDoA .node.clickable{cursor:pointer;}#mermaid-svg-UIM9PqFvFBizuDoA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UIM9PqFvFBizuDoA .arrowheadPath{fill:#333333;}#mermaid-svg-UIM9PqFvFBizuDoA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UIM9PqFvFBizuDoA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UIM9PqFvFBizuDoA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UIM9PqFvFBizuDoA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UIM9PqFvFBizuDoA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UIM9PqFvFBizuDoA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UIM9PqFvFBizuDoA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UIM9PqFvFBizuDoA .cluster text{fill:#333;}#mermaid-svg-UIM9PqFvFBizuDoA .cluster span{color:#333;}#mermaid-svg-UIM9PqFvFBizuDoA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UIM9PqFvFBizuDoA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UIM9PqFvFBizuDoA rect.text{fill:none;stroke-width:0;}#mermaid-svg-UIM9PqFvFBizuDoA .icon-shape,#mermaid-svg-UIM9PqFvFBizuDoA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UIM9PqFvFBizuDoA .icon-shape p,#mermaid-svg-UIM9PqFvFBizuDoA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UIM9PqFvFBizuDoA .icon-shape rect,#mermaid-svg-UIM9PqFvFBizuDoA .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UIM9PqFvFBizuDoA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UIM9PqFvFBizuDoA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UIM9PqFvFBizuDoA :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
处理
处理
绕过
直接
系统架构
控制面Linux内核
数据面用户态应用
SSH、监控、配置低频操作
网络数据包高频转发
内核协议栈
用户态处理
内核旁路原理:
| 数据包接收 | 内核协议栈处理 | DMA直接到用户态 |
| 数据处理 | 内核处理 | 用户态直接处理 |
| 数据包发送 | 内核协议栈处理 | 用户态直接发送 |
| 中断处理 | 硬件中断 | 轮询模式 |
实现架构
C10M实现架构:
#mermaid-svg-NQdUDTjzuOcGG92E{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NQdUDTjzuOcGG92E .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NQdUDTjzuOcGG92E .error-icon{fill:#552222;}#mermaid-svg-NQdUDTjzuOcGG92E .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NQdUDTjzuOcGG92E .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NQdUDTjzuOcGG92E .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NQdUDTjzuOcGG92E .marker.cross{stroke:#333333;}#mermaid-svg-NQdUDTjzuOcGG92E svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NQdUDTjzuOcGG92E p{margin:0;}#mermaid-svg-NQdUDTjzuOcGG92E .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-NQdUDTjzuOcGG92E .cluster-label text{fill:#333;}#mermaid-svg-NQdUDTjzuOcGG92E .cluster-label span{color:#333;}#mermaid-svg-NQdUDTjzuOcGG92E .cluster-label span p{background-color:transparent;}#mermaid-svg-NQdUDTjzuOcGG92E .label text,#mermaid-svg-NQdUDTjzuOcGG92E span{fill:#333;color:#333;}#mermaid-svg-NQdUDTjzuOcGG92E .node rect,#mermaid-svg-NQdUDTjzuOcGG92E .node circle,#mermaid-svg-NQdUDTjzuOcGG92E .node ellipse,#mermaid-svg-NQdUDTjzuOcGG92E .node polygon,#mermaid-svg-NQdUDTjzuOcGG92E .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NQdUDTjzuOcGG92E .rough-node .label text,#mermaid-svg-NQdUDTjzuOcGG92E .node .label text,#mermaid-svg-NQdUDTjzuOcGG92E .image-shape .label,#mermaid-svg-NQdUDTjzuOcGG92E .icon-shape .label{text-anchor:middle;}#mermaid-svg-NQdUDTjzuOcGG92E .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NQdUDTjzuOcGG92E .rough-node .label,#mermaid-svg-NQdUDTjzuOcGG92E .node .label,#mermaid-svg-NQdUDTjzuOcGG92E .image-shape .label,#mermaid-svg-NQdUDTjzuOcGG92E .icon-shape .label{text-align:center;}#mermaid-svg-NQdUDTjzuOcGG92E .node.clickable{cursor:pointer;}#mermaid-svg-NQdUDTjzuOcGG92E .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NQdUDTjzuOcGG92E .arrowheadPath{fill:#333333;}#mermaid-svg-NQdUDTjzuOcGG92E .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NQdUDTjzuOcGG92E .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NQdUDTjzuOcGG92E .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NQdUDTjzuOcGG92E .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NQdUDTjzuOcGG92E .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NQdUDTjzuOcGG92E .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NQdUDTjzuOcGG92E .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NQdUDTjzuOcGG92E .cluster text{fill:#333;}#mermaid-svg-NQdUDTjzuOcGG92E .cluster span{color:#333;}#mermaid-svg-NQdUDTjzuOcGG92E div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NQdUDTjzuOcGG92E .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NQdUDTjzuOcGG92E rect.text{fill:none;stroke-width:0;}#mermaid-svg-NQdUDTjzuOcGG92E .icon-shape,#mermaid-svg-NQdUDTjzuOcGG92E .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NQdUDTjzuOcGG92E .icon-shape p,#mermaid-svg-NQdUDTjzuOcGG92E .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NQdUDTjzuOcGG92E .icon-shape rect,#mermaid-svg-NQdUDTjzuOcGG92E .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NQdUDTjzuOcGG92E .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NQdUDTjzuOcGG92E .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NQdUDTjzuOcGG92E :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
DMA
轮询
处理
发送
DMA
控制
不参与数据转发
绑定
绑定
绑定
网卡
用户态内存池
应用线程
用户态协议栈
Linux内核
配置、监控
CPU核心1
CPU核心2
CPU核心N
架构特点:
| DMA直接传输 | 数据包通过DMA直接到达用户态内存 |
| 轮询模式 | 用主动轮询替代中断,避免中断风暴 |
| 用户态协议栈 | 在用户态实现TCP/IP协议栈 |
| CPU绑定 | 每个线程绑定到特定CPU核心 |
| 大页内存 | 使用2M/1G大页减少TLB Miss |
| 无锁设计 | 每个CPU核心独立数据结构,避免锁竞争 |
内核旁路技术对比
主要内核旁路技术:
| DPDK | 用户态轮询驱动,完全绕过内核 | PPS性能极高,控制力强 | 需要专用硬件和驱动,开发复杂 | 10-100倍 |
| XDP | 在内核网络栈最早阶段处理 | 保留部分内核功能,开发门槛相对较低 | 性能上限低于DPDK | 5-50倍 |
| netmap | 将网卡环形缓冲区映射到用户态 | 实现简单,对应用透明 | 性能提升幅度有限 | 2-10倍 |
| PF_RING | 零拷贝数据包捕获 | 性能提升明显 | 需要专用驱动 | 5-20倍 |
DPDK架构:
#mermaid-svg-hOIIPePOlLLwUz1T{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hOIIPePOlLLwUz1T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hOIIPePOlLLwUz1T .error-icon{fill:#552222;}#mermaid-svg-hOIIPePOlLLwUz1T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hOIIPePOlLLwUz1T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hOIIPePOlLLwUz1T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hOIIPePOlLLwUz1T .marker.cross{stroke:#333333;}#mermaid-svg-hOIIPePOlLLwUz1T svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hOIIPePOlLLwUz1T p{margin:0;}#mermaid-svg-hOIIPePOlLLwUz1T .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-hOIIPePOlLLwUz1T .cluster-label text{fill:#333;}#mermaid-svg-hOIIPePOlLLwUz1T .cluster-label span{color:#333;}#mermaid-svg-hOIIPePOlLLwUz1T .cluster-label span p{background-color:transparent;}#mermaid-svg-hOIIPePOlLLwUz1T .label text,#mermaid-svg-hOIIPePOlLLwUz1T span{fill:#333;color:#333;}#mermaid-svg-hOIIPePOlLLwUz1T .node rect,#mermaid-svg-hOIIPePOlLLwUz1T .node circle,#mermaid-svg-hOIIPePOlLLwUz1T .node ellipse,#mermaid-svg-hOIIPePOlLLwUz1T .node polygon,#mermaid-svg-hOIIPePOlLLwUz1T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hOIIPePOlLLwUz1T .rough-node .label text,#mermaid-svg-hOIIPePOlLLwUz1T .node .label text,#mermaid-svg-hOIIPePOlLLwUz1T .image-shape .label,#mermaid-svg-hOIIPePOlLLwUz1T .icon-shape .label{text-anchor:middle;}#mermaid-svg-hOIIPePOlLLwUz1T .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hOIIPePOlLLwUz1T .rough-node .label,#mermaid-svg-hOIIPePOlLLwUz1T .node .label,#mermaid-svg-hOIIPePOlLLwUz1T .image-shape .label,#mermaid-svg-hOIIPePOlLLwUz1T .icon-shape .label{text-align:center;}#mermaid-svg-hOIIPePOlLLwUz1T .node.clickable{cursor:pointer;}#mermaid-svg-hOIIPePOlLLwUz1T .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hOIIPePOlLLwUz1T .arrowheadPath{fill:#333333;}#mermaid-svg-hOIIPePOlLLwUz1T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hOIIPePOlLLwUz1T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hOIIPePOlLLwUz1T .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hOIIPePOlLLwUz1T .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hOIIPePOlLLwUz1T .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hOIIPePOlLLwUz1T .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hOIIPePOlLLwUz1T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hOIIPePOlLLwUz1T .cluster text{fill:#333;}#mermaid-svg-hOIIPePOlLLwUz1T .cluster span{color:#333;}#mermaid-svg-hOIIPePOlLLwUz1T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hOIIPePOlLLwUz1T .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hOIIPePOlLLwUz1T rect.text{fill:none;stroke-width:0;}#mermaid-svg-hOIIPePOlLLwUz1T .icon-shape,#mermaid-svg-hOIIPePOlLLwUz1T .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hOIIPePOlLLwUz1T .icon-shape p,#mermaid-svg-hOIIPePOlLLwUz1T .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hOIIPePOlLLwUz1T .icon-shape rect,#mermaid-svg-hOIIPePOlLLwUz1T .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hOIIPePOlLLwUz1T .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hOIIPePOlLLwUz1T .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hOIIPePOlLLwUz1T :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
DMA
轮询
数据包
处理
发送
DMA
不参与
网卡硬件
DPDK内存池
PMD驱动
用户态应用
用户态协议栈
Linux内核
DPDK关键特性:
| PMD驱动 | Poll Mode Driver,轮询模式驱动 |
| 内存池 | 预分配的大页内存池 |
| 无锁队列 | 使用无锁队列进行线程间通信 |
| CPU亲和性 | 线程绑定到特定CPU核心 |
| NUMA感知 | 在NUMA系统中优化内存访问 |
典型后端服务性能
接入层/网关
接入层服务性能特点:
#mermaid-svg-5ywxa3ivvCNKcicy{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5ywxa3ivvCNKcicy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5ywxa3ivvCNKcicy .error-icon{fill:#552222;}#mermaid-svg-5ywxa3ivvCNKcicy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5ywxa3ivvCNKcicy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5ywxa3ivvCNKcicy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5ywxa3ivvCNKcicy .marker.cross{stroke:#333333;}#mermaid-svg-5ywxa3ivvCNKcicy svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5ywxa3ivvCNKcicy p{margin:0;}#mermaid-svg-5ywxa3ivvCNKcicy .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-5ywxa3ivvCNKcicy .cluster-label text{fill:#333;}#mermaid-svg-5ywxa3ivvCNKcicy .cluster-label span{color:#333;}#mermaid-svg-5ywxa3ivvCNKcicy .cluster-label span p{background-color:transparent;}#mermaid-svg-5ywxa3ivvCNKcicy .label text,#mermaid-svg-5ywxa3ivvCNKcicy span{fill:#333;color:#333;}#mermaid-svg-5ywxa3ivvCNKcicy .node rect,#mermaid-svg-5ywxa3ivvCNKcicy .node circle,#mermaid-svg-5ywxa3ivvCNKcicy .node ellipse,#mermaid-svg-5ywxa3ivvCNKcicy .node polygon,#mermaid-svg-5ywxa3ivvCNKcicy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5ywxa3ivvCNKcicy .rough-node .label text,#mermaid-svg-5ywxa3ivvCNKcicy .node .label text,#mermaid-svg-5ywxa3ivvCNKcicy .image-shape .label,#mermaid-svg-5ywxa3ivvCNKcicy .icon-shape .label{text-anchor:middle;}#mermaid-svg-5ywxa3ivvCNKcicy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5ywxa3ivvCNKcicy .rough-node .label,#mermaid-svg-5ywxa3ivvCNKcicy .node .label,#mermaid-svg-5ywxa3ivvCNKcicy .image-shape .label,#mermaid-svg-5ywxa3ivvCNKcicy .icon-shape .label{text-align:center;}#mermaid-svg-5ywxa3ivvCNKcicy .node.clickable{cursor:pointer;}#mermaid-svg-5ywxa3ivvCNKcicy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5ywxa3ivvCNKcicy .arrowheadPath{fill:#333333;}#mermaid-svg-5ywxa3ivvCNKcicy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5ywxa3ivvCNKcicy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5ywxa3ivvCNKcicy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ywxa3ivvCNKcicy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5ywxa3ivvCNKcicy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ywxa3ivvCNKcicy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5ywxa3ivvCNKcicy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5ywxa3ivvCNKcicy .cluster text{fill:#333;}#mermaid-svg-5ywxa3ivvCNKcicy .cluster span{color:#333;}#mermaid-svg-5ywxa3ivvCNKcicy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5ywxa3ivvCNKcicy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5ywxa3ivvCNKcicy rect.text{fill:none;stroke-width:0;}#mermaid-svg-5ywxa3ivvCNKcicy .icon-shape,#mermaid-svg-5ywxa3ivvCNKcicy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5ywxa3ivvCNKcicy .icon-shape p,#mermaid-svg-5ywxa3ivvCNKcicy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5ywxa3ivvCNKcicy .icon-shape rect,#mermaid-svg-5ywxa3ivvCNKcicy .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5ywxa3ivvCNKcicy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5ywxa3ivvCNKcicy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5ywxa3ivvCNKcicy :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
特点
特点
特点
性能
性能
性能
接入层服务
Nginx/OpenResty
Netty TCP服务
自研网关
连接多逻辑轻
长连接高并发
定制化高性能
5万-10万 QPS
10万-30万并发连接
可定制性能
接入层性能参考:
| Nginx | 5万-10万 | 10万-30万 | 4-8核,8-16GB | 静态文件、反向代理 |
| OpenResty | 5万-10万 | 10万-30万 | 4-8核,8-16GB | Lua脚本、动态处理 |
| Netty | – | 10万-30万 | 4-8核,8-16GB | 长连接、自定义协议 |
| Envoy | 5万-10万 | 10万-30万 | 4-8核,8-16GB | 服务网格、可观测性 |
业务微服务
业务微服务性能特点:
#mermaid-svg-qERbMOmTe7Gkh2dP{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qERbMOmTe7Gkh2dP .error-icon{fill:#552222;}#mermaid-svg-qERbMOmTe7Gkh2dP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qERbMOmTe7Gkh2dP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qERbMOmTe7Gkh2dP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qERbMOmTe7Gkh2dP .marker.cross{stroke:#333333;}#mermaid-svg-qERbMOmTe7Gkh2dP svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qERbMOmTe7Gkh2dP p{margin:0;}#mermaid-svg-qERbMOmTe7Gkh2dP .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster-label text{fill:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster-label span{color:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster-label span p{background-color:transparent;}#mermaid-svg-qERbMOmTe7Gkh2dP .label text,#mermaid-svg-qERbMOmTe7Gkh2dP span{fill:#333;color:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP .node rect,#mermaid-svg-qERbMOmTe7Gkh2dP .node circle,#mermaid-svg-qERbMOmTe7Gkh2dP .node ellipse,#mermaid-svg-qERbMOmTe7Gkh2dP .node polygon,#mermaid-svg-qERbMOmTe7Gkh2dP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qERbMOmTe7Gkh2dP .rough-node .label text,#mermaid-svg-qERbMOmTe7Gkh2dP .node .label text,#mermaid-svg-qERbMOmTe7Gkh2dP .image-shape .label,#mermaid-svg-qERbMOmTe7Gkh2dP .icon-shape .label{text-anchor:middle;}#mermaid-svg-qERbMOmTe7Gkh2dP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qERbMOmTe7Gkh2dP .rough-node .label,#mermaid-svg-qERbMOmTe7Gkh2dP .node .label,#mermaid-svg-qERbMOmTe7Gkh2dP .image-shape .label,#mermaid-svg-qERbMOmTe7Gkh2dP .icon-shape .label{text-align:center;}#mermaid-svg-qERbMOmTe7Gkh2dP .node.clickable{cursor:pointer;}#mermaid-svg-qERbMOmTe7Gkh2dP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qERbMOmTe7Gkh2dP .arrowheadPath{fill:#333333;}#mermaid-svg-qERbMOmTe7Gkh2dP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qERbMOmTe7Gkh2dP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qERbMOmTe7Gkh2dP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qERbMOmTe7Gkh2dP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qERbMOmTe7Gkh2dP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qERbMOmTe7Gkh2dP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster text{fill:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP .cluster span{color:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qERbMOmTe7Gkh2dP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qERbMOmTe7Gkh2dP rect.text{fill:none;stroke-width:0;}#mermaid-svg-qERbMOmTe7Gkh2dP .icon-shape,#mermaid-svg-qERbMOmTe7Gkh2dP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qERbMOmTe7Gkh2dP .icon-shape p,#mermaid-svg-qERbMOmTe7Gkh2dP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qERbMOmTe7Gkh2dP .icon-shape rect,#mermaid-svg-qERbMOmTe7Gkh2dP .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qERbMOmTe7Gkh2dP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qERbMOmTe7Gkh2dP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qERbMOmTe7Gkh2dP :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
特点
特点
性能
性能
业务微服务
简单CRUD
复杂业务
数据库查询缓存访问
多服务调用复杂计算
数千-2万 QPS
几百-几千 QPS
瓶颈
数据库
外部服务
业务逻辑
业务服务性能参考:
| 简单CRUD | 数千-2万 | 数千-2万 | 数据库 | 连接池、缓存 |
| 复杂业务 | 几百-几千 | 几百-几千 | 业务逻辑、外部服务 | 异步处理、缓存 |
| 计算密集型 | 几百-几千 | 几百-几千 | CPU | 算法优化、并行计算 |
| I/O密集型 | 数千-1万 | 数千-1万 | I/O | 异步I/O、连接池 |
数据库与缓存
数据库与缓存性能:
#mermaid-svg-gLhq5QmAurYDJ03V{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gLhq5QmAurYDJ03V .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gLhq5QmAurYDJ03V .error-icon{fill:#552222;}#mermaid-svg-gLhq5QmAurYDJ03V .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gLhq5QmAurYDJ03V .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gLhq5QmAurYDJ03V .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gLhq5QmAurYDJ03V .marker.cross{stroke:#333333;}#mermaid-svg-gLhq5QmAurYDJ03V svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gLhq5QmAurYDJ03V p{margin:0;}#mermaid-svg-gLhq5QmAurYDJ03V .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-gLhq5QmAurYDJ03V .cluster-label text{fill:#333;}#mermaid-svg-gLhq5QmAurYDJ03V .cluster-label span{color:#333;}#mermaid-svg-gLhq5QmAurYDJ03V .cluster-label span p{background-color:transparent;}#mermaid-svg-gLhq5QmAurYDJ03V .label text,#mermaid-svg-gLhq5QmAurYDJ03V span{fill:#333;color:#333;}#mermaid-svg-gLhq5QmAurYDJ03V .node rect,#mermaid-svg-gLhq5QmAurYDJ03V .node circle,#mermaid-svg-gLhq5QmAurYDJ03V .node ellipse,#mermaid-svg-gLhq5QmAurYDJ03V .node polygon,#mermaid-svg-gLhq5QmAurYDJ03V .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gLhq5QmAurYDJ03V .rough-node .label text,#mermaid-svg-gLhq5QmAurYDJ03V .node .label text,#mermaid-svg-gLhq5QmAurYDJ03V .image-shape .label,#mermaid-svg-gLhq5QmAurYDJ03V .icon-shape .label{text-anchor:middle;}#mermaid-svg-gLhq5QmAurYDJ03V .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gLhq5QmAurYDJ03V .rough-node .label,#mermaid-svg-gLhq5QmAurYDJ03V .node .label,#mermaid-svg-gLhq5QmAurYDJ03V .image-shape .label,#mermaid-svg-gLhq5QmAurYDJ03V .icon-shape .label{text-align:center;}#mermaid-svg-gLhq5QmAurYDJ03V .node.clickable{cursor:pointer;}#mermaid-svg-gLhq5QmAurYDJ03V .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gLhq5QmAurYDJ03V .arrowheadPath{fill:#333333;}#mermaid-svg-gLhq5QmAurYDJ03V .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gLhq5QmAurYDJ03V .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gLhq5QmAurYDJ03V .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gLhq5QmAurYDJ03V .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gLhq5QmAurYDJ03V .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gLhq5QmAurYDJ03V .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gLhq5QmAurYDJ03V .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gLhq5QmAurYDJ03V .cluster text{fill:#333;}#mermaid-svg-gLhq5QmAurYDJ03V .cluster span{color:#333;}#mermaid-svg-gLhq5QmAurYDJ03V div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gLhq5QmAurYDJ03V .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gLhq5QmAurYDJ03V rect.text{fill:none;stroke-width:0;}#mermaid-svg-gLhq5QmAurYDJ03V .icon-shape,#mermaid-svg-gLhq5QmAurYDJ03V .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gLhq5QmAurYDJ03V .icon-shape p,#mermaid-svg-gLhq5QmAurYDJ03V .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gLhq5QmAurYDJ03V .icon-shape rect,#mermaid-svg-gLhq5QmAurYDJ03V .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gLhq5QmAurYDJ03V .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gLhq5QmAurYDJ03V .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gLhq5QmAurYDJ03V :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
读
写
读
写
数据存储
Redis缓存
MySQL数据库
10万+ QPS
几万 QPS
几千 QPS
几千 QPS
数据存储性能参考:
| Redis | 10万+ | 几万 | 数万 | 内存、网络 | 集群、持久化优化 |
| MySQL | 几千 | 几千 | 数千 | 磁盘I/O、锁 | 读写分离、分库分表 |
| MongoDB | 数千-几万 | 数千-几万 | 数千 | 磁盘I/O | 分片、索引优化 |
| PostgreSQL | 几千 | 几千 | 数千 | 磁盘I/O、锁 | 连接池、查询优化 |
硬件配置与性能
高性能配置
示例:i7-12700K + 16GB + 百兆宽带
#mermaid-svg-f4VvUbm1kDIh3L3e{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-f4VvUbm1kDIh3L3e .error-icon{fill:#552222;}#mermaid-svg-f4VvUbm1kDIh3L3e .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-f4VvUbm1kDIh3L3e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-f4VvUbm1kDIh3L3e .marker{fill:#333333;stroke:#333333;}#mermaid-svg-f4VvUbm1kDIh3L3e .marker.cross{stroke:#333333;}#mermaid-svg-f4VvUbm1kDIh3L3e svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-f4VvUbm1kDIh3L3e p{margin:0;}#mermaid-svg-f4VvUbm1kDIh3L3e .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster-label text{fill:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster-label span{color:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster-label span p{background-color:transparent;}#mermaid-svg-f4VvUbm1kDIh3L3e .label text,#mermaid-svg-f4VvUbm1kDIh3L3e span{fill:#333;color:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e .node rect,#mermaid-svg-f4VvUbm1kDIh3L3e .node circle,#mermaid-svg-f4VvUbm1kDIh3L3e .node ellipse,#mermaid-svg-f4VvUbm1kDIh3L3e .node polygon,#mermaid-svg-f4VvUbm1kDIh3L3e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-f4VvUbm1kDIh3L3e .rough-node .label text,#mermaid-svg-f4VvUbm1kDIh3L3e .node .label text,#mermaid-svg-f4VvUbm1kDIh3L3e .image-shape .label,#mermaid-svg-f4VvUbm1kDIh3L3e .icon-shape .label{text-anchor:middle;}#mermaid-svg-f4VvUbm1kDIh3L3e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-f4VvUbm1kDIh3L3e .rough-node .label,#mermaid-svg-f4VvUbm1kDIh3L3e .node .label,#mermaid-svg-f4VvUbm1kDIh3L3e .image-shape .label,#mermaid-svg-f4VvUbm1kDIh3L3e .icon-shape .label{text-align:center;}#mermaid-svg-f4VvUbm1kDIh3L3e .node.clickable{cursor:pointer;}#mermaid-svg-f4VvUbm1kDIh3L3e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-f4VvUbm1kDIh3L3e .arrowheadPath{fill:#333333;}#mermaid-svg-f4VvUbm1kDIh3L3e .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-f4VvUbm1kDIh3L3e .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-f4VvUbm1kDIh3L3e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f4VvUbm1kDIh3L3e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-f4VvUbm1kDIh3L3e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f4VvUbm1kDIh3L3e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster text{fill:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e .cluster span{color:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-f4VvUbm1kDIh3L3e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-f4VvUbm1kDIh3L3e rect.text{fill:none;stroke-width:0;}#mermaid-svg-f4VvUbm1kDIh3L3e .icon-shape,#mermaid-svg-f4VvUbm1kDIh3L3e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-f4VvUbm1kDIh3L3e .icon-shape p,#mermaid-svg-f4VvUbm1kDIh3L3e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-f4VvUbm1kDIh3L3e .icon-shape rect,#mermaid-svg-f4VvUbm1kDIh3L3e .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-f4VvUbm1kDIh3L3e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-f4VvUbm1kDIh3L3e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-f4VvUbm1kDIh3L3e :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
性能
性能
性能
硬件配置
CPU: i7-12700K12核20线程
内存: 16GB
带宽: 100Mbps
极高足以支撑数十万并发
足够约10万连接
瓶颈约1.25万QPS
并发能力
C10K: 轻松
C50K-C80K: 合理目标
C100K: 理论上限
性能预估:
| 纯连接型服务 | C50K-C80K | CPU、网络栈 | 合理目标区间 |
| HTTP/RPC服务 | C1K-C3K | 带宽、后端服务 | 受带宽限制 |
| C100K | 理论上限 | CPU满载 | 需要深度调优 |
瓶颈分析:
| CPU | 极高(12核20线程) | 非瓶颈 |
| 内存 | 足够(16GB) | 非瓶颈 |
| 带宽 | 极低(100Mbps) | 主要瓶颈 |
中等配置
示例:2核4GB服务器
#mermaid-svg-65PqwONSfvDmSglk{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-65PqwONSfvDmSglk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-65PqwONSfvDmSglk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-65PqwONSfvDmSglk .error-icon{fill:#552222;}#mermaid-svg-65PqwONSfvDmSglk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-65PqwONSfvDmSglk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-65PqwONSfvDmSglk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-65PqwONSfvDmSglk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-65PqwONSfvDmSglk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-65PqwONSfvDmSglk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-65PqwONSfvDmSglk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-65PqwONSfvDmSglk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-65PqwONSfvDmSglk .marker.cross{stroke:#333333;}#mermaid-svg-65PqwONSfvDmSglk svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-65PqwONSfvDmSglk p{margin:0;}#mermaid-svg-65PqwONSfvDmSglk .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-65PqwONSfvDmSglk .cluster-label text{fill:#333;}#mermaid-svg-65PqwONSfvDmSglk .cluster-label span{color:#333;}#mermaid-svg-65PqwONSfvDmSglk .cluster-label span p{background-color:transparent;}#mermaid-svg-65PqwONSfvDmSglk .label text,#mermaid-svg-65PqwONSfvDmSglk span{fill:#333;color:#333;}#mermaid-svg-65PqwONSfvDmSglk .node rect,#mermaid-svg-65PqwONSfvDmSglk .node circle,#mermaid-svg-65PqwONSfvDmSglk .node ellipse,#mermaid-svg-65PqwONSfvDmSglk .node polygon,#mermaid-svg-65PqwONSfvDmSglk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-65PqwONSfvDmSglk .rough-node .label text,#mermaid-svg-65PqwONSfvDmSglk .node .label text,#mermaid-svg-65PqwONSfvDmSglk .image-shape .label,#mermaid-svg-65PqwONSfvDmSglk .icon-shape .label{text-anchor:middle;}#mermaid-svg-65PqwONSfvDmSglk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-65PqwONSfvDmSglk .rough-node .label,#mermaid-svg-65PqwONSfvDmSglk .node .label,#mermaid-svg-65PqwONSfvDmSglk .image-shape .label,#mermaid-svg-65PqwONSfvDmSglk .icon-shape .label{text-align:center;}#mermaid-svg-65PqwONSfvDmSglk .node.clickable{cursor:pointer;}#mermaid-svg-65PqwONSfvDmSglk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-65PqwONSfvDmSglk .arrowheadPath{fill:#333333;}#mermaid-svg-65PqwONSfvDmSglk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-65PqwONSfvDmSglk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-65PqwONSfvDmSglk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-65PqwONSfvDmSglk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-65PqwONSfvDmSglk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-65PqwONSfvDmSglk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-65PqwONSfvDmSglk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-65PqwONSfvDmSglk .cluster text{fill:#333;}#mermaid-svg-65PqwONSfvDmSglk .cluster span{color:#333;}#mermaid-svg-65PqwONSfvDmSglk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-65PqwONSfvDmSglk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-65PqwONSfvDmSglk rect.text{fill:none;stroke-width:0;}#mermaid-svg-65PqwONSfvDmSglk .icon-shape,#mermaid-svg-65PqwONSfvDmSglk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-65PqwONSfvDmSglk .icon-shape p,#mermaid-svg-65PqwONSfvDmSglk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-65PqwONSfvDmSglk .icon-shape rect,#mermaid-svg-65PqwONSfvDmSglk .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-65PqwONSfvDmSglk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-65PqwONSfvDmSglk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-65PqwONSfvDmSglk :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
瓶颈
性能
性能
瓶颈
2核4GB服务器
Web/API服务
纯连接服务
带宽1-5M
C1K-C3K合理目标
C10K可以做到
带宽后端服务
性能预估:
| Web/API服务 | C1K-C3K | 带宽、后端服务 | 5M带宽限制 |
| 纯连接服务 | C10K | 带宽、后端服务 | 可以做到 |
| C100K | 不现实 | 带宽、CPU | 超出能力 |
资源分析:
| CPU | 2核 | 足够处理连接,但带宽是瓶颈 |
| 内存 | 4GB | 足够支持C10K连接 |
| 带宽 | 1-5M | 主要瓶颈,限制实际性能 |
低配置
低配置服务器建议:
| 1核1GB | C100-C500 | 个人博客、小型应用 | 带宽通常1-2M |
| 2核2GB | C500-C1K | 小型网站、API服务 | 带宽通常2-5M |
| 2核4GB | C1K-C3K | 中型应用 | 带宽通常5-10M |
关键技术详解
I/O多路复用
I/O多路复用技术对比:
渲染错误: Mermaid 渲染失败: Parse error on line 8: …ws] B –>|O(n)| G[性能较差] C – ———————^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'
I/O多路复用对比:
| select | O(n) | 1024 | 差 | 所有平台 |
| poll | O(n) | 无限制 | 差 | 所有平台 |
| epoll | O(1) | 无限制 | 优秀 | Linux |
| kqueue | O(1) | 无限制 | 优秀 | BSD/macOS |
| IOCP | O(1) | 无限制 | 优秀 | Windows |
epoll优势:
| 高效 | O(1)复杂度,不受连接数影响 |
| 边缘触发 | 支持ET模式,减少系统调用 |
| 无连接数限制 | 不受FD_SETSIZE限制 |
| 内核优化 | 内核维护就绪列表,高效通知 |
异步非阻塞
异步非阻塞模型:
#mermaid-svg-k075kbOfB33G8YqK{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k075kbOfB33G8YqK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k075kbOfB33G8YqK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k075kbOfB33G8YqK .error-icon{fill:#552222;}#mermaid-svg-k075kbOfB33G8YqK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k075kbOfB33G8YqK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k075kbOfB33G8YqK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k075kbOfB33G8YqK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k075kbOfB33G8YqK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k075kbOfB33G8YqK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k075kbOfB33G8YqK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k075kbOfB33G8YqK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k075kbOfB33G8YqK .marker.cross{stroke:#333333;}#mermaid-svg-k075kbOfB33G8YqK svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k075kbOfB33G8YqK p{margin:0;}#mermaid-svg-k075kbOfB33G8YqK .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-k075kbOfB33G8YqK .cluster-label text{fill:#333;}#mermaid-svg-k075kbOfB33G8YqK .cluster-label span{color:#333;}#mermaid-svg-k075kbOfB33G8YqK .cluster-label span p{background-color:transparent;}#mermaid-svg-k075kbOfB33G8YqK .label text,#mermaid-svg-k075kbOfB33G8YqK span{fill:#333;color:#333;}#mermaid-svg-k075kbOfB33G8YqK .node rect,#mermaid-svg-k075kbOfB33G8YqK .node circle,#mermaid-svg-k075kbOfB33G8YqK .node ellipse,#mermaid-svg-k075kbOfB33G8YqK .node polygon,#mermaid-svg-k075kbOfB33G8YqK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-k075kbOfB33G8YqK .rough-node .label text,#mermaid-svg-k075kbOfB33G8YqK .node .label text,#mermaid-svg-k075kbOfB33G8YqK .image-shape .label,#mermaid-svg-k075kbOfB33G8YqK .icon-shape .label{text-anchor:middle;}#mermaid-svg-k075kbOfB33G8YqK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-k075kbOfB33G8YqK .rough-node .label,#mermaid-svg-k075kbOfB33G8YqK .node .label,#mermaid-svg-k075kbOfB33G8YqK .image-shape .label,#mermaid-svg-k075kbOfB33G8YqK .icon-shape .label{text-align:center;}#mermaid-svg-k075kbOfB33G8YqK .node.clickable{cursor:pointer;}#mermaid-svg-k075kbOfB33G8YqK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-k075kbOfB33G8YqK .arrowheadPath{fill:#333333;}#mermaid-svg-k075kbOfB33G8YqK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-k075kbOfB33G8YqK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-k075kbOfB33G8YqK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k075kbOfB33G8YqK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-k075kbOfB33G8YqK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k075kbOfB33G8YqK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-k075kbOfB33G8YqK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-k075kbOfB33G8YqK .cluster text{fill:#333;}#mermaid-svg-k075kbOfB33G8YqK .cluster span{color:#333;}#mermaid-svg-k075kbOfB33G8YqK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-k075kbOfB33G8YqK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-k075kbOfB33G8YqK rect.text{fill:none;stroke-width:0;}#mermaid-svg-k075kbOfB33G8YqK .icon-shape,#mermaid-svg-k075kbOfB33G8YqK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-k075kbOfB33G8YqK .icon-shape p,#mermaid-svg-k075kbOfB33G8YqK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-k075kbOfB33G8YqK .icon-shape rect,#mermaid-svg-k075kbOfB33G8YqK .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-k075kbOfB33G8YqK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-k075kbOfB33G8YqK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-k075kbOfB33G8YqK :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
epoll
异步回调
异步非阻塞模型
事件循环
非阻塞I/O
回调处理
高效事件通知
不阻塞主线程
耗时操作
异步处理
线程池
消息队列
异步非阻塞优势:
| 高并发 | 单线程处理大量连接 |
| 低延迟 | 无线程切换开销 |
| 资源高效 | 内存占用小 |
| 扩展性好 | 易于扩展到多核 |
零拷贝技术
零拷贝技术原理:
#mermaid-svg-wBjMGunPbEErTZBw{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wBjMGunPbEErTZBw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wBjMGunPbEErTZBw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wBjMGunPbEErTZBw .error-icon{fill:#552222;}#mermaid-svg-wBjMGunPbEErTZBw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wBjMGunPbEErTZBw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wBjMGunPbEErTZBw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wBjMGunPbEErTZBw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wBjMGunPbEErTZBw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wBjMGunPbEErTZBw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wBjMGunPbEErTZBw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wBjMGunPbEErTZBw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wBjMGunPbEErTZBw .marker.cross{stroke:#333333;}#mermaid-svg-wBjMGunPbEErTZBw svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wBjMGunPbEErTZBw p{margin:0;}#mermaid-svg-wBjMGunPbEErTZBw .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-wBjMGunPbEErTZBw .cluster-label text{fill:#333;}#mermaid-svg-wBjMGunPbEErTZBw .cluster-label span{color:#333;}#mermaid-svg-wBjMGunPbEErTZBw .cluster-label span p{background-color:transparent;}#mermaid-svg-wBjMGunPbEErTZBw .label text,#mermaid-svg-wBjMGunPbEErTZBw span{fill:#333;color:#333;}#mermaid-svg-wBjMGunPbEErTZBw .node rect,#mermaid-svg-wBjMGunPbEErTZBw .node circle,#mermaid-svg-wBjMGunPbEErTZBw .node ellipse,#mermaid-svg-wBjMGunPbEErTZBw .node polygon,#mermaid-svg-wBjMGunPbEErTZBw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wBjMGunPbEErTZBw .rough-node .label text,#mermaid-svg-wBjMGunPbEErTZBw .node .label text,#mermaid-svg-wBjMGunPbEErTZBw .image-shape .label,#mermaid-svg-wBjMGunPbEErTZBw .icon-shape .label{text-anchor:middle;}#mermaid-svg-wBjMGunPbEErTZBw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wBjMGunPbEErTZBw .rough-node .label,#mermaid-svg-wBjMGunPbEErTZBw .node .label,#mermaid-svg-wBjMGunPbEErTZBw .image-shape .label,#mermaid-svg-wBjMGunPbEErTZBw .icon-shape .label{text-align:center;}#mermaid-svg-wBjMGunPbEErTZBw .node.clickable{cursor:pointer;}#mermaid-svg-wBjMGunPbEErTZBw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wBjMGunPbEErTZBw .arrowheadPath{fill:#333333;}#mermaid-svg-wBjMGunPbEErTZBw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wBjMGunPbEErTZBw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wBjMGunPbEErTZBw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wBjMGunPbEErTZBw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wBjMGunPbEErTZBw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wBjMGunPbEErTZBw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wBjMGunPbEErTZBw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wBjMGunPbEErTZBw .cluster text{fill:#333;}#mermaid-svg-wBjMGunPbEErTZBw .cluster span{color:#333;}#mermaid-svg-wBjMGunPbEErTZBw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wBjMGunPbEErTZBw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wBjMGunPbEErTZBw rect.text{fill:none;stroke-width:0;}#mermaid-svg-wBjMGunPbEErTZBw .icon-shape,#mermaid-svg-wBjMGunPbEErTZBw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wBjMGunPbEErTZBw .icon-shape p,#mermaid-svg-wBjMGunPbEErTZBw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wBjMGunPbEErTZBw .icon-shape rect,#mermaid-svg-wBjMGunPbEErTZBw .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wBjMGunPbEErTZBw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wBjMGunPbEErTZBw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wBjMGunPbEErTZBw :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
传统方式
数据拷贝
内核空间
用户空间
应用处理
用户空间
内核空间
网卡
零拷贝
直接传输
DMA
用户空间
应用处理
DMA
网卡
零拷贝技术:
| sendfile | 内核直接传输文件数据 | 2-3倍 |
| splice | 内核管道传输 | 2-3倍 |
| mmap | 内存映射文件 | 1.5-2倍 |
| DPDK零拷贝 | 用户态直接访问 | 10-100倍 |
内核旁路技术
内核旁路技术详解:
DPDK技术
DPDK架构:
#mermaid-svg-h4mgnqoc69KOTqca{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-h4mgnqoc69KOTqca .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-h4mgnqoc69KOTqca .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-h4mgnqoc69KOTqca .error-icon{fill:#552222;}#mermaid-svg-h4mgnqoc69KOTqca .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-h4mgnqoc69KOTqca .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-h4mgnqoc69KOTqca .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-h4mgnqoc69KOTqca .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-h4mgnqoc69KOTqca .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-h4mgnqoc69KOTqca .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-h4mgnqoc69KOTqca .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-h4mgnqoc69KOTqca .marker{fill:#333333;stroke:#333333;}#mermaid-svg-h4mgnqoc69KOTqca .marker.cross{stroke:#333333;}#mermaid-svg-h4mgnqoc69KOTqca svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-h4mgnqoc69KOTqca p{margin:0;}#mermaid-svg-h4mgnqoc69KOTqca .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-h4mgnqoc69KOTqca .cluster-label text{fill:#333;}#mermaid-svg-h4mgnqoc69KOTqca .cluster-label span{color:#333;}#mermaid-svg-h4mgnqoc69KOTqca .cluster-label span p{background-color:transparent;}#mermaid-svg-h4mgnqoc69KOTqca .label text,#mermaid-svg-h4mgnqoc69KOTqca span{fill:#333;color:#333;}#mermaid-svg-h4mgnqoc69KOTqca .node rect,#mermaid-svg-h4mgnqoc69KOTqca .node circle,#mermaid-svg-h4mgnqoc69KOTqca .node ellipse,#mermaid-svg-h4mgnqoc69KOTqca .node polygon,#mermaid-svg-h4mgnqoc69KOTqca .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-h4mgnqoc69KOTqca .rough-node .label text,#mermaid-svg-h4mgnqoc69KOTqca .node .label text,#mermaid-svg-h4mgnqoc69KOTqca .image-shape .label,#mermaid-svg-h4mgnqoc69KOTqca .icon-shape .label{text-anchor:middle;}#mermaid-svg-h4mgnqoc69KOTqca .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-h4mgnqoc69KOTqca .rough-node .label,#mermaid-svg-h4mgnqoc69KOTqca .node .label,#mermaid-svg-h4mgnqoc69KOTqca .image-shape .label,#mermaid-svg-h4mgnqoc69KOTqca .icon-shape .label{text-align:center;}#mermaid-svg-h4mgnqoc69KOTqca .node.clickable{cursor:pointer;}#mermaid-svg-h4mgnqoc69KOTqca .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-h4mgnqoc69KOTqca .arrowheadPath{fill:#333333;}#mermaid-svg-h4mgnqoc69KOTqca .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-h4mgnqoc69KOTqca .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-h4mgnqoc69KOTqca .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h4mgnqoc69KOTqca .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-h4mgnqoc69KOTqca .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h4mgnqoc69KOTqca .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-h4mgnqoc69KOTqca .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-h4mgnqoc69KOTqca .cluster text{fill:#333;}#mermaid-svg-h4mgnqoc69KOTqca .cluster span{color:#333;}#mermaid-svg-h4mgnqoc69KOTqca div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-h4mgnqoc69KOTqca .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-h4mgnqoc69KOTqca rect.text{fill:none;stroke-width:0;}#mermaid-svg-h4mgnqoc69KOTqca .icon-shape,#mermaid-svg-h4mgnqoc69KOTqca .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h4mgnqoc69KOTqca .icon-shape p,#mermaid-svg-h4mgnqoc69KOTqca .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-h4mgnqoc69KOTqca .icon-shape rect,#mermaid-svg-h4mgnqoc69KOTqca .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h4mgnqoc69KOTqca .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-h4mgnqoc69KOTqca .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-h4mgnqoc69KOTqca :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
DMA
轮询
数据包
处理
发送
不参与数据转发
绑定
绑定
绑定
网卡
DPDK内存池大页内存
PMD驱动
用户态应用
用户态协议栈
Linux内核
CPU核心1
CPU核心2
CPU核心N
DPDK关键特性:
| 用户态驱动 | PMD驱动在用户态运行 | 避免内核开销 |
| 轮询模式 | 主动轮询替代中断 | 避免中断风暴 |
| 大页内存 | 使用2M/1G大页 | 减少TLB Miss |
| CPU绑定 | 线程绑定到CPU核心 | 提高缓存命中率 |
| 无锁队列 | 使用无锁数据结构 | 避免锁竞争 |
XDP技术
XDP架构:
#mermaid-svg-098cRXUDF5cGtUP4{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-098cRXUDF5cGtUP4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-098cRXUDF5cGtUP4 .error-icon{fill:#552222;}#mermaid-svg-098cRXUDF5cGtUP4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-098cRXUDF5cGtUP4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-098cRXUDF5cGtUP4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-098cRXUDF5cGtUP4 .marker.cross{stroke:#333333;}#mermaid-svg-098cRXUDF5cGtUP4 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-098cRXUDF5cGtUP4 p{margin:0;}#mermaid-svg-098cRXUDF5cGtUP4 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-098cRXUDF5cGtUP4 .cluster-label text{fill:#333;}#mermaid-svg-098cRXUDF5cGtUP4 .cluster-label span{color:#333;}#mermaid-svg-098cRXUDF5cGtUP4 .cluster-label span p{background-color:transparent;}#mermaid-svg-098cRXUDF5cGtUP4 .label text,#mermaid-svg-098cRXUDF5cGtUP4 span{fill:#333;color:#333;}#mermaid-svg-098cRXUDF5cGtUP4 .node rect,#mermaid-svg-098cRXUDF5cGtUP4 .node circle,#mermaid-svg-098cRXUDF5cGtUP4 .node ellipse,#mermaid-svg-098cRXUDF5cGtUP4 .node polygon,#mermaid-svg-098cRXUDF5cGtUP4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-098cRXUDF5cGtUP4 .rough-node .label text,#mermaid-svg-098cRXUDF5cGtUP4 .node .label text,#mermaid-svg-098cRXUDF5cGtUP4 .image-shape .label,#mermaid-svg-098cRXUDF5cGtUP4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-098cRXUDF5cGtUP4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-098cRXUDF5cGtUP4 .rough-node .label,#mermaid-svg-098cRXUDF5cGtUP4 .node .label,#mermaid-svg-098cRXUDF5cGtUP4 .image-shape .label,#mermaid-svg-098cRXUDF5cGtUP4 .icon-shape .label{text-align:center;}#mermaid-svg-098cRXUDF5cGtUP4 .node.clickable{cursor:pointer;}#mermaid-svg-098cRXUDF5cGtUP4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-098cRXUDF5cGtUP4 .arrowheadPath{fill:#333333;}#mermaid-svg-098cRXUDF5cGtUP4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-098cRXUDF5cGtUP4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-098cRXUDF5cGtUP4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-098cRXUDF5cGtUP4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-098cRXUDF5cGtUP4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-098cRXUDF5cGtUP4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-098cRXUDF5cGtUP4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-098cRXUDF5cGtUP4 .cluster text{fill:#333;}#mermaid-svg-098cRXUDF5cGtUP4 .cluster span{color:#333;}#mermaid-svg-098cRXUDF5cGtUP4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-098cRXUDF5cGtUP4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-098cRXUDF5cGtUP4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-098cRXUDF5cGtUP4 .icon-shape,#mermaid-svg-098cRXUDF5cGtUP4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-098cRXUDF5cGtUP4 .icon-shape p,#mermaid-svg-098cRXUDF5cGtUP4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-098cRXUDF5cGtUP4 .icon-shape rect,#mermaid-svg-098cRXUDF5cGtUP4 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-098cRXUDF5cGtUP4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-098cRXUDF5cGtUP4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-098cRXUDF5cGtUP4 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
数据包
XDP Hook
处理
丢弃
转发
重定向
网卡
驱动层
XDP程序eBPF
决策
丢弃数据包
内核协议栈
用户态应用
XDP优势:
| 早期处理 | 在网络栈最早阶段处理 |
| 高性能 | 避免完整协议栈处理 |
| 灵活性 | 可编程,支持复杂逻辑 |
| 安全性 | 在内核中运行,有安全保障 |
实现路线图
从C10K到C10M的实现路线:
#mermaid-svg-BLIuBEH53XHwvhus{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BLIuBEH53XHwvhus .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BLIuBEH53XHwvhus .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BLIuBEH53XHwvhus .error-icon{fill:#552222;}#mermaid-svg-BLIuBEH53XHwvhus .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BLIuBEH53XHwvhus .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BLIuBEH53XHwvhus .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BLIuBEH53XHwvhus .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BLIuBEH53XHwvhus .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BLIuBEH53XHwvhus .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BLIuBEH53XHwvhus .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BLIuBEH53XHwvhus .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BLIuBEH53XHwvhus .marker.cross{stroke:#333333;}#mermaid-svg-BLIuBEH53XHwvhus svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BLIuBEH53XHwvhus p{margin:0;}#mermaid-svg-BLIuBEH53XHwvhus .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-BLIuBEH53XHwvhus .cluster-label text{fill:#333;}#mermaid-svg-BLIuBEH53XHwvhus .cluster-label span{color:#333;}#mermaid-svg-BLIuBEH53XHwvhus .cluster-label span p{background-color:transparent;}#mermaid-svg-BLIuBEH53XHwvhus .label text,#mermaid-svg-BLIuBEH53XHwvhus span{fill:#333;color:#333;}#mermaid-svg-BLIuBEH53XHwvhus .node rect,#mermaid-svg-BLIuBEH53XHwvhus .node circle,#mermaid-svg-BLIuBEH53XHwvhus .node ellipse,#mermaid-svg-BLIuBEH53XHwvhus .node polygon,#mermaid-svg-BLIuBEH53XHwvhus .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BLIuBEH53XHwvhus .rough-node .label text,#mermaid-svg-BLIuBEH53XHwvhus .node .label text,#mermaid-svg-BLIuBEH53XHwvhus .image-shape .label,#mermaid-svg-BLIuBEH53XHwvhus .icon-shape .label{text-anchor:middle;}#mermaid-svg-BLIuBEH53XHwvhus .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BLIuBEH53XHwvhus .rough-node .label,#mermaid-svg-BLIuBEH53XHwvhus .node .label,#mermaid-svg-BLIuBEH53XHwvhus .image-shape .label,#mermaid-svg-BLIuBEH53XHwvhus .icon-shape .label{text-align:center;}#mermaid-svg-BLIuBEH53XHwvhus .node.clickable{cursor:pointer;}#mermaid-svg-BLIuBEH53XHwvhus .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BLIuBEH53XHwvhus .arrowheadPath{fill:#333333;}#mermaid-svg-BLIuBEH53XHwvhus .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BLIuBEH53XHwvhus .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BLIuBEH53XHwvhus .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BLIuBEH53XHwvhus .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BLIuBEH53XHwvhus .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BLIuBEH53XHwvhus .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BLIuBEH53XHwvhus .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BLIuBEH53XHwvhus .cluster text{fill:#333;}#mermaid-svg-BLIuBEH53XHwvhus .cluster span{color:#333;}#mermaid-svg-BLIuBEH53XHwvhus div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BLIuBEH53XHwvhus .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BLIuBEH53XHwvhus rect.text{fill:none;stroke-width:0;}#mermaid-svg-BLIuBEH53XHwvhus .icon-shape,#mermaid-svg-BLIuBEH53XHwvhus .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BLIuBEH53XHwvhus .icon-shape p,#mermaid-svg-BLIuBEH53XHwvhus .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BLIuBEH53XHwvhus .icon-shape rect,#mermaid-svg-BLIuBEH53XHwvhus .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BLIuBEH53XHwvhus .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BLIuBEH53XHwvhus .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BLIuBEH53XHwvhus :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Nginx/Netty
系统调优
内核优化
DPDK/XDP
应用层优化
几万到几十万并发
几十万并发
百万级并发
千万级并发
异步非阻塞
连接池
业务优化
epoll优化
系统参数
协议栈优化
中断优化
零拷贝
内存优化
内核旁路
专用硬件
实现阶段:
| 阶段1 | C10K | I/O多路复用、异步非阻塞 | ⭐⭐ |
| 阶段2 | C100K | 系统调优、内存优化 | ⭐⭐⭐ |
| 阶段3 | C1M | 内核优化、协议栈优化 | ⭐⭐⭐⭐ |
| 阶段4 | C10M | 内核旁路、专用硬件 | ⭐⭐⭐⭐⭐ |
最佳实践
性能优化建议
优化策略:
#mermaid-svg-mkl1L7ZIFq1Gn7RR{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .error-icon{fill:#552222;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .marker.cross{stroke:#333333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR p{margin:0;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster-label text{fill:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster-label span{color:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster-label span p{background-color:transparent;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .label text,#mermaid-svg-mkl1L7ZIFq1Gn7RR span{fill:#333;color:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .node rect,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node circle,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node ellipse,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node polygon,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .rough-node .label text,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node .label text,#mermaid-svg-mkl1L7ZIFq1Gn7RR .image-shape .label,#mermaid-svg-mkl1L7ZIFq1Gn7RR .icon-shape .label{text-anchor:middle;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .rough-node .label,#mermaid-svg-mkl1L7ZIFq1Gn7RR .node .label,#mermaid-svg-mkl1L7ZIFq1Gn7RR .image-shape .label,#mermaid-svg-mkl1L7ZIFq1Gn7RR .icon-shape .label{text-align:center;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .node.clickable{cursor:pointer;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .arrowheadPath{fill:#333333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-mkl1L7ZIFq1Gn7RR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mkl1L7ZIFq1Gn7RR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster text{fill:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .cluster span{color:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-mkl1L7ZIFq1Gn7RR rect.text{fill:none;stroke-width:0;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .icon-shape,#mermaid-svg-mkl1L7ZIFq1Gn7RR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .icon-shape p,#mermaid-svg-mkl1L7ZIFq1Gn7RR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .icon-shape rect,#mermaid-svg-mkl1L7ZIFq1Gn7RR .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-mkl1L7ZIFq1Gn7RR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-mkl1L7ZIFq1Gn7RR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-mkl1L7ZIFq1Gn7RR :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
性能优化
架构优化
代码优化
系统优化
硬件优化
缓存
异步处理
消息队列
算法优化
数据结构
连接池
系统参数
内核优化
CPU
内存
网络
优化建议:
| 架构优化 | 引入缓存、异步处理、消息队列 | 10-100倍提升 |
| 代码优化 | 算法优化、连接池、异步I/O | 2-10倍提升 |
| 系统优化 | 参数调优、内核优化 | 2-5倍提升 |
| 硬件优化 | 升级CPU、内存、网卡 | 2-10倍提升 |
常见问题与解决方案
常见问题:
| 连接数受限 | 文件描述符限制 | 调高ulimit -n |
| 内存不足 | 连接内存占用大 | 使用内存池、连接复用 |
| CPU占用高 | 中断处理、上下文切换 | 中断绑定、减少线程数 |
| 带宽不足 | 网络带宽限制 | 升级网卡、优化数据传输 |
| 延迟高 | 协议栈处理慢 | 使用零拷贝、内核旁路 |
总结
核心要点
并发性能实现总结:
#mermaid-svg-PicmFLgCCAWkI26M{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PicmFLgCCAWkI26M .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PicmFLgCCAWkI26M .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PicmFLgCCAWkI26M .error-icon{fill:#552222;}#mermaid-svg-PicmFLgCCAWkI26M .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PicmFLgCCAWkI26M .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PicmFLgCCAWkI26M .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PicmFLgCCAWkI26M .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PicmFLgCCAWkI26M .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PicmFLgCCAWkI26M .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PicmFLgCCAWkI26M .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PicmFLgCCAWkI26M .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PicmFLgCCAWkI26M .marker.cross{stroke:#333333;}#mermaid-svg-PicmFLgCCAWkI26M svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PicmFLgCCAWkI26M p{margin:0;}#mermaid-svg-PicmFLgCCAWkI26M .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-PicmFLgCCAWkI26M .cluster-label text{fill:#333;}#mermaid-svg-PicmFLgCCAWkI26M .cluster-label span{color:#333;}#mermaid-svg-PicmFLgCCAWkI26M .cluster-label span p{background-color:transparent;}#mermaid-svg-PicmFLgCCAWkI26M .label text,#mermaid-svg-PicmFLgCCAWkI26M span{fill:#333;color:#333;}#mermaid-svg-PicmFLgCCAWkI26M .node rect,#mermaid-svg-PicmFLgCCAWkI26M .node circle,#mermaid-svg-PicmFLgCCAWkI26M .node ellipse,#mermaid-svg-PicmFLgCCAWkI26M .node polygon,#mermaid-svg-PicmFLgCCAWkI26M .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PicmFLgCCAWkI26M .rough-node .label text,#mermaid-svg-PicmFLgCCAWkI26M .node .label text,#mermaid-svg-PicmFLgCCAWkI26M .image-shape .label,#mermaid-svg-PicmFLgCCAWkI26M .icon-shape .label{text-anchor:middle;}#mermaid-svg-PicmFLgCCAWkI26M .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PicmFLgCCAWkI26M .rough-node .label,#mermaid-svg-PicmFLgCCAWkI26M .node .label,#mermaid-svg-PicmFLgCCAWkI26M .image-shape .label,#mermaid-svg-PicmFLgCCAWkI26M .icon-shape .label{text-align:center;}#mermaid-svg-PicmFLgCCAWkI26M .node.clickable{cursor:pointer;}#mermaid-svg-PicmFLgCCAWkI26M .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PicmFLgCCAWkI26M .arrowheadPath{fill:#333333;}#mermaid-svg-PicmFLgCCAWkI26M .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PicmFLgCCAWkI26M .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PicmFLgCCAWkI26M .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PicmFLgCCAWkI26M .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PicmFLgCCAWkI26M .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PicmFLgCCAWkI26M .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PicmFLgCCAWkI26M .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PicmFLgCCAWkI26M .cluster text{fill:#333;}#mermaid-svg-PicmFLgCCAWkI26M .cluster span{color:#333;}#mermaid-svg-PicmFLgCCAWkI26M div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PicmFLgCCAWkI26M .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PicmFLgCCAWkI26M rect.text{fill:none;stroke-width:0;}#mermaid-svg-PicmFLgCCAWkI26M .icon-shape,#mermaid-svg-PicmFLgCCAWkI26M .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PicmFLgCCAWkI26M .icon-shape p,#mermaid-svg-PicmFLgCCAWkI26M .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PicmFLgCCAWkI26M .icon-shape rect,#mermaid-svg-PicmFLgCCAWkI26M .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PicmFLgCCAWkI26M .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PicmFLgCCAWkI26M .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PicmFLgCCAWkI26M :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
I/O多路复用
系统调优
内核优化
内核旁路
并发性能实现
C10K基础
C100K优化
C1M深度优化
C10M内核旁路
epoll
参数优化
协议栈优化
DPDK/XDP
关键技术总结
实现高并发的关键技术:
| I/O多路复用 | C10K+ | 解决线程模型瓶颈 |
| 异步非阻塞 | C10K+ | 提高资源利用率 |
| 系统调优 | C100K+ | 突破系统限制 |
| 内核优化 | C1M+ | 优化协议栈性能 |
| 内核旁路 | C10M | 绕过内核瓶颈 |
性能目标建议
不同场景的合理目标:
| Web服务 | C10K-C100K | I/O多路复用、系统调优 |
| API网关 | C100K-C1M | 高性能框架、系统优化 |
| IM/游戏 | C100K-C1M | 长连接、内存优化 |
| CDN/代理 | C1M-C10M | 内核旁路、专用硬件 |
重要提醒:
⚠️ 性能优化注意事项:
- 并发连接数不等于QPS,需要区分
- 带宽往往是实际瓶颈,而非CPU或内存
- 业务逻辑复杂度严重影响性能
- 数据库通常是最终瓶颈
- 从C10K到C10M,技术难度呈指数级增长
参考资源:
- C10K问题
- DPDK项目
- XDP文档
- Nginx性能调优
网硕互联帮助中心


评论前必须登录!
注册