本节摘要:NFVI 是 NFV 的地基,它把通用服务器的计算、存储、网络资源虚拟化成统一资源池,VNF 跑在这个池子上。本节讲清三大资源域各自的特点、虚拟化层怎么做资源抽象屏蔽硬件异构性、以及虚拟机 vs 容器两种载体的选型取舍。
阅读完本节,你应当能够:
NFV 要让网络功能跑在通用服务器上,但通用服务器长什么样?一台 x86 服务器有 CPU、内存、硬盘、网卡,这些是散的资源。如果要在这台服务器上同时跑一个 vFirewall、一个 vRouter、一个 vLB,怎么分配 CPU 给它们?怎么让它们各自有独立的内存空间?怎么让它们的网络流量互不干扰?
这就是 NFVI 要解决的问题。它通过虚拟化层(hypervisor 或容器运行时),把一台或多台物理服务器的资源,抽象成可以灵活分配的虚拟资源池。VNF 从这个池子里按需申请资源,用完归还。多个 VNF 共享同一批物理硬件,但彼此隔离互不干扰。
理解 NFVI 的关键在于明白:它不只是"装个虚拟机那么简单"。电信级 NFVI 对可靠性(99.999% 可用)、性能(低延迟高吞吐)、隔离性(VNF 互不影响)的要求,远超普通企业云。这也是为什么 NFVI 的搭建和运维是个专门的工程领域。
NFVI 把资源分成三个域:
计算域:服务器的 CPU 和内存。虚拟化层把物理 CPU 切成虚拟 CPU(vCPU),把物理内存切成虚拟内存块,分配给各个 VNF。关键技术包括 CPU 虚拟化(基于硬件辅助的 Intel VT-x / AMD-V)、内存虚拟化(影子页表、EPT)。计算域要关注的是 CPU 亲和性(把 VNF 的 vCPU 绑定到特定物理核,减少缓存抖动)和 NUMA 感知(跨 NUMA 节点访问内存会慢)。
存储域:包括本地磁盘和分布式存储。VNF 的镜像、配置数据、运行时状态都需要存储。关键技术包括块存储(给 VNF 当虚拟硬盘,如 Ceph RBD)、对象存储(存 VNF 镜像,如 Ceph RGW)、文件存储(共享配置,如 NFS)。电信场景对存储的 IOPS 和延迟敏感(比如 vEPC 的用户数据库要快速读写),往往用 SSD 或 NVMe。
网络域:这是 NFVI 最复杂的部分。VNF 之间要通信、VNF 要和外部网络通信,所有流量都要经过虚拟网络。关键技术包括虚拟交换机(OVS,Open vSwitch,在服务器内部转发 VNF 间的流量)、虚拟网络接口(给 VNF 分配虚拟网卡)、Overlay 网络(VXLAN、GRE,在物理网络之上构建虚拟网络)。网络域的性能直接决定 VNF 的吞吐量,是性能优化的重点。
| 资源域 | 关键资源 | 关键技术 | NFV 特有考量 |
|---|---|---|---|
| 计算 | CPU、内存 | VT-x、EPT、CPU亲和性 | 绑核减少抖动 |
| 存储 | 磁盘、SSD | 块/对象/文件存储 | 高 IOPS、低延迟 |
| 网络 | 网卡、带宽 | OVS、VXLAN、虚拟网卡 | 高吞吐、低延迟 |
虚拟化层(Virtualization Layer,VL)是 NFVI 的核心。它向上提供统一的虚拟资源接口,向下适配各种物理硬件。这种"中间层"的设计带来了硬件无关性——VNF 不用关心跑在什么硬件上。
资源抽象的工作方式:
虚拟化层拦截 VNF 对资源的请求,转换成对物理硬件的实际操作。比如 VNF 要"写一个数据块到虚拟磁盘",虚拟化层把这个请求转换成"写到物理 SSD 的某个位置"。VNF 看到的是一块连续的虚拟磁盘,实际数据可能分散在多个物理磁盘上。
这种抽象的代价是性能开销(虚拟化层转发请求需要时间,叫"虚拟化税"),收益是灵活性(VNF 可以自由迁移、按需分配资源)。下一节会专门讲怎么降低这个性能开销。
VNF 跑在什么载体上?有两种主流选择:虚拟机(VM)和容器(Container)。它们的差异直接影响 NFVI 的设计和 VNF 的性能。
| 维度 | 虚拟机(VM) | 容器(Container) |
|---|---|---|
| 隔离机制 | hypervisor 硬件级隔离 | namespace 内核级隔离 |
| 资源占用 | 大(每个 VM 含完整 guest OS) | 小(共享宿主机内核) |
| 启动速度 | 分钟级 | 秒级 |
| 性能开销 | 较大(经 hypervisor) | 较小(直接用宿主机内核) |
| 安全隔离 | 强(硬件级) | 相对弱(共享内核) |
| 运维方式 | 传统虚拟化管理 | Kubernetes 编排 |
虚拟机的优势是隔离性强——每个 VM 有自己的内核,一个 VM 被攻破不影响其他。劣势是资源占用大、启动慢。早期 NFV(第一代 VNF)几乎都用虚拟机,因为隔离性好、与传统网络设备的管理模式接近。
容器的优势是轻量——共享宿主机内核,资源占用小、启动快、密度高。劣势是隔离性相对弱(共享内核意味着容器逃逸漏洞会影响宿主机和其他容器)。新一代 NFV(CNF)用容器,更贴合云原生理念。
💡 关键直觉:虚拟机和容器不是非此即彼。实际部署里,对隔离性要求高的 VNF(如多租户共享平台的 vFirewall)用虚拟机更稳;对启动速度和密度要求高的 VNF(如边缘场景的轻量功能)用容器更优。很多 NFVI 平台同时支持两者——OpenStack 管 VM,Kubernetes 管容器,NFVO 统一编排。
NFVI 的管理(VIM 角色)最常用的两个开源平台:
OpenStack 是传统的 VIM,主要管虚拟机。它提供计算(Nova)、网络(Neutron)、存储(Cinder)等服务的统一管理,是第一代 NFV 的基础设施标准。OpenStack 成熟稳定,但偏重虚拟机,对容器的原生支持弱。
Kubernetes(K8s) 是容器编排的事实标准,正在成为云原生 NFV 的新 VIM。它管的是容器(Pod),提供调度、扩缩容、滚动更新、服务发现等能力。随着 CNF 成为主流,K8s 在 NFVI 里的地位越来越重要。
两者的关系是互补而非替代:
ETSI Release 4 已经把容器基础设施管理纳入架构,定义了 CISM(Container Infrastructure Service Management)等新组件,让 NFVO 能同时编排 OpenStack 上的 VM 和 K8s 上的容器。
电信级 NFVI 要求 99.999% 可用(即每年停机不超过 5 分钟)。这对基础设施设计提出高要求:
VIM 调度 VNF 时要考虑:
这些调度策略对 VNF 的实际性能影响很大。同样的 VNF,调度得好性能可能差出 30%-50%。
实际部署中,混合使用两种载体的策略:
| VNF 类型 | 推荐载体 | 原因 |
|---|---|---|
| 多租户隔离的安全功能 | 虚拟机 | 隔离性要求高 |
| 核心网功能(vEPC) | 虚拟机 | 稳定性、传统兼容 |
| 边缘轻量功能 | 容器 | 密度高、启动快 |
| 新部署的云原生服务 | 容器 | 贴合 DevOps |
⚠️ 常见坑:有些团队为了"云原生"盲目把所有 VNF 都改造成容器,结果发现某些功能(特别是需要内核级隔离或特殊硬件访问的)在容器里跑不稳定。载体选择要按 VNF 特性来,不要为了追潮流一刀切。
下一节专门讲性能——虚拟化带来的吞吐量损失怎么用 DPDK、SR-IOV、SmartNIC 来弥补。
讲完理想分层的资源池,必须补上三个让架构师失眠的现实约束。约束一,大二层网络的规模天花板:VNF 迁移要求二层可达,但二层网络的广播域规模有物理上限,超大规模数据中心实际靠 Underlay 路由加 Overlay 隧道撑起"伪大二层"——设计时要在迁移自由度和网络复杂度之间选边。约束二,NUMA 与网卡亲和性:高性能 VNF 的虚拟机必须与直通网卡同 NUMA 节点,跨节点的内存访问能让转发性能腰斩;这把"随便调度"的自由度砍掉一大块,调度器必须懂拓扑。约束三,资源碎片化:虚拟化层的内存页巨页分配、CPU 绑核策略会在长期运行中产生碎片,导致"总量够用却分配不出来"的假性资源枯竭,运维需要定期整理或重启迁移。三个约束共同说明一件事:NFVI 不是"装个虚拟化软件"那么简单,它是把数据中心当一台超级计算机来调优的工程——第 2 节的性能优化会接着展开这些话题。
资源池化之后,调度质量的瓶颈从"有没有资源"变成"了不了解负载"。每个 VNF 上线前应该提供一份资源画像,包含四类信息:稳态需求(常规负载下的 CPU、内存、网卡带宽的均值与九十五分位)、峰值需求(洪峰时的资源上限与可持续时间)、敏感性矩阵(哪类资源紧张最先影响指标——转发类 VNF 对网卡队列敏感、信令类对 CPU 抖动敏感)、噪声容忍度(同宿主机邻居负载的干扰承受边界,决定能否与其他 VNF 混部)。画像的价值贯穿全生命周期:容量规划拿它算供给、调度器拿它做放置决策、弹性伸缩拿它定阈值。没有画像的 VNF 只能靠超额供给兜底,资源利用率长期在两三成徘徊——这是很多 NFV 项目"虚拟化了但没省钱"的直接原因。画像从哪来:厂商声明值打底,上线后用监控数据持续修正,一个季度后画像的预测精度就是运维团队的核心资产之一。
再补一段混部策略的实战权衡。同宿主机上混跑多个 VNF 能把利用率从三成拉到六成,但代价是干扰风险——时延敏感的用户面与 CPU 密集的深度包检测共置,前者的抖动会立刻恶化。成熟的做法是给宿主机打"负载性格标签":时延敏感型独占或仅与同类混部、吞吐型可自由混部、批处理型填缝利用碎片资源;调度器按标签放置,比按瞬时负载调度的稳定性高一个量级。混部不是要不要的问题,是怎么分级的问题。