云计算百科
云计算领域专业知识百科平台

服务器并发性能详解:从C10K到C10M

服务器并发性能详解:从C10K到C10M

文档时间: 2026-01-27

目录

  • 并发性能概述
    • 什么是C10K/C100K/C10M
    • 并发性能指标
    • 性能挑战演进
  • C10K实现
    • C10K问题
    • 解决方案
    • 技术要点
  • C100K实现
    • C100K挑战
    • 关键技术
    • 系统优化
  • C10M实现
    • C10M挑战
    • 内核旁路技术
    • 实现架构
  • 典型后端服务性能
    • 接入层/网关
    • 业务微服务
    • 数据库与缓存
  • 硬件配置与性能
    • 高性能配置
    • 中等配置
    • 低配置
  • 关键技术详解
    • I/O多路复用
    • 异步非阻塞
    • 零拷贝技术
    • 内核旁路技术
  • 实现路线图
  • 最佳实践
  • 总结

  • 并发性能速查表

    快速对比不同并发级别:

    并发级别连接数可行性核心挑战内存需求带宽需求技术难度
    C10K 1万 ✅ 轻松实现 线程模型优化 几十MB ⭐⭐
    C100K 10万 ⚠️ 需优化 系统调优、内存管理 4-10GB ⭐⭐⭐
    C1M 100万 ⚠️ 需深度优化 内核优化、协议栈优化 40-100GB ⭐⭐⭐⭐
    C10M 1000万 ⚠️ 需内核旁路 内核旁路、专用硬件 400GB+ 极高 ⭐⭐⭐⭐⭐

    典型服务性能参考:

    服务类型典型QPS并发连接硬件要求备注
    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万并发连接

    可定制性能

    接入层性能参考:

    服务典型QPS并发连接硬件要求特点
    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

    瓶颈

    数据库

    外部服务

    业务逻辑

    业务服务性能参考:

    服务类型典型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

    数据存储性能参考:

    存储读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性能调优
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 服务器并发性能详解:从C10K到C10M
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!