尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NFV网络功能虚拟化:从架构原理到VNF落地的性能优化指南

NFV网络功能虚拟化:从架构原理到VNF落地的性能优化指南 1. 什么是NFV把网络设备从“专用硬件”里解放出来先抛一个场景。你所在的公司要上一个新业务网络侧需要加两台防火墙、一台负载均衡、一台DPI设备。传统做法是什么联系几家设备厂商询价、比货、下订单、等货期短则一两周长则一两个月。设备到了之后还要上架、连线、调试业务上线节奏被硬件供应链死死卡住。算账的时候更扎心一台专用硬件防火墙动辄几十万三年一换扩容还要再买一台。这还只是防火墙路由器、交换机、AC、BRAS、DPI、CGN每个网元都是这么一套流程。这就是传统电信网络和传统企业网络的现状网络功能被绑定在专用硬件上买什么功能就要买什么盒子。NFVNetwork Functions Virtualization网络功能虚拟化要解决的核心问题就是把这个绑定关系拆开。网络功能还是那个网络功能但不再跑在专用ASIC和专用机框上而是以软件的形式跑在通用的x86服务器、虚拟化平台或者容器环境里。一台标准服务器上可以同时跑防火墙、负载均衡、DPI、BRAS想扩容就加资源想升级就换软件版本。这套思路是2012年由欧洲电信标准协会ETSI正式提出的最初是为了解决电信运营商在网络建设中的成本压力和创新速度问题。但在后续的落地过程中NFV几乎渗透到了所有需要网络能力的场景——云计算数据中心、企业园区网、边缘计算节点、SD-WAN接入点甚至普通企业里的一台“软路由软交换机”本质上都是NFV思想的产物。所以理解NFV不只是理解一个电信概念而是理解整个网络行业过去十年最重要的一次架构演进。这篇内容适合谁如果你是刚转行做网络或云计算的工程师需要快速建立起对NFV的整体认知如果你是运维或架构师正纠结“要不要用虚拟化方案替换现有物理设备”或者你只是好奇“为什么现在大家都在说网络软件化”这篇文章都值得读完。我会尽量把NFV的技术架构、落地细节、性能调优的坑和选型经验都讲透而且是站在实际操作的角度来讲不是把官网概念抄一遍。2. NFV和SDN别搞混一对经常被绑定的“兄弟”很多初学者一接触NFV就会连带看到另一个词SDNSoftware Defined Networking软件定义网络。在很多文章里NFV和SDN常常一起出现导致不少人以为它们是一个东西。我在面试里问过不少候选人“NFV和SDN的差别”能说清楚的人确实不多。这里先把这两个概念掰开。SDN的核心思想是控制面与转发面分离。传统交换机路由器里控制面跑路由协议、算转发表的地方和转发面根据转发表快速转发报文的地方是紧密耦合在同一个设备里的。SDN把控制面抽出来集中到一个控制器上底层交换机只保留转发能力通过OpenFlow等南向协议接收控制器的指令。你可以把SDN理解成“把设备的脑子集中管理手还是各干各的”。NFV的核心思想是网络功能与专用硬件的解耦。它不是要把控制面和转发面分开而是要把防火墙、负载均衡、DPI这类功能从专用硬件上搬到通用平台上来。NFV本身不关心你怎么转发报文不关心控制器和转发器是不是分离它只关心一件事这个网络功能能不能以软件形态跑起来。为什么这两个概念总被一起提因为在真实的网络改造项目里它们往往是配合使用的。NFV提供了灵活的基础设施和虚拟网络功能VNFSDN提供了灵活的转发路径控制和网络切片能力。比如一个典型的云数据中心计算资源池由NFV技术承载横跨整个数据中心的网络则由SDN控制器统一调度。你可以用NFV不用SDN也可以用SDN不用NFV但组合使用效果最好——这也是厂商把二者打包宣传的根本原因。从技术标准来源看NFV由ETSI主导成立了一个专门的NFV ISG行业规范组来制定相关规范SDN则更多起源于学术界斯坦福的Clean Slate项目和ONF开放网络基金会。二者在标准化组织、参考架构、术语体系上是完全独立的两条线。记住一个最简单的心法SDN解决“网络怎么走”的问题NFV解决“网络功能跑在哪里”的问题。3. NFV的参考架构ETSI框架下的三大板块理解了基本思想接下来看NFV的体系架构。ETSI定义的NFV架构可以说是整个领域的“宪法”所有厂商产品、所有方案设计基本都在这个框架之内。它由三大板块构成NFVINFV基础设施、VNF虚拟网络功能、MANO管理与编排。一个典型的NFV系统就是这三块的协同工作。3.1 NFVI整个体系的“地基”NFVI是NFV系统里最底层、最物理的部分提供计算、存储、网络这三类资源。具体来说计算资源就是通用服务器上的CPU和内存存储资源包括本地磁盘、SAN存储和分布式存储网络资源则包括虚拟交换机、物理网卡、智能网卡和上层网络连接。NFVI之上需要一个虚拟化层来把物理资源切分和池化这层通常由hypervisor如KVM、VMware ESXi或者容器运行时来承担。在实际部署中NFVI的管理通常还会接入一个VIMVirtualized Infrastructure Manager也就是虚拟化基础设施管理器负责对NFVI资源进行统一的调度和分配。你如果接触过OpenStack那么OpenStack在NFV架构里扮演的就是VIM的角色。这里要特别注意一个细节NFVI不是简单的“一台跑着虚拟机的服务器”。NFV对于转发性能、时延、可靠性都有严苛要求所以NFVI在设计上要预留很多性能手段——CPU独占CPU Pinning、大页内存、NUMA亲和性、DPDK用户态转发、SR-IOV直通等。这些手段在云计算场景里是可选项但在NFV场景里几乎都是必选项。后面讲到性能优化的时候我会展开说。3.2 VNF跑在虚拟机里的网元VNFVirtualised Network Function是NFV架构里的“业务主角”也就是防火墙、负载均衡、BRAS、EPC、IMS这些网络功能在软件化之后的形态。每一个VNF都是一个独立的软件实体可以跑在一个或多个VM虚拟机上也可以跑在容器里。VNF对外表现出的功能和传统物理网元保持高度一致但对内实现完全变了——它运行在虚拟化环境里底层资源共享生命周期由上层编排器动态管理。VNF的软件结构通常被描述为“VNF由多个VNFCVNF Component组成”。打个比方一个VNF相当于一台“整体设备”VNFC则是设备里不同的单板或进程——有的负责控制面处理有的负责转发面处理通过内部接口通信。这个拆分方式让VNF具备了弹性扩缩容的能力控制面实例负载高了多开一个VM转发面实例吞吐不够了横向扩容一个VNFC组。VNF的交付形态也值得说一下。传统设备厂商交付的是一台硬件盒子NFV时代交付的是VNF包VNF Package里面包含软件镜像、VM规格模板、VNFDVNF描述符以及部署参数。VNFD是核心它用标准化格式描述这个VNF需要多少CPU、多少内存、需要几个VM、各VM之间的关系、启动顺序、放通哪些安全组规则等。上层编排器读取VNFD后就能自动在NFVI上完成部署。3.3 MANONFV的“指挥中枢”MANO是整个NFV架构里最能体现智能化水平的部分也是很多初学NFV的人最容易忽略的部分。没有MANONFV充其量只是“把网络设备搬进了虚拟机”而有了MANONFV才真正实现了自动化运维和业务编排。MANO分三层NFVONFV Orchestrator最顶层的编排器负责整个网络服务Network Service的生命周期管理。比如你要部署一条“防火墙负载均衡”组成的业务链NFVO负责把这两个VNF按照正确的顺序编排成一条端到端的网络服务并监控整条链路的健康状况。VNFMVNF Manager负责单个VNF的生命周期管理包括VNF的实例化、扩缩容、配置下发、终止等操作。NFVO管全局VNFM管单个VNF。VIM前面提到过负责NFVI资源的管理与调度。MANO体系里VIM被正式纳入了编排链条NFVO/VNFM通过标准接口向VIM下发资源需求VIM完成虚拟机或容器的创建销毁。这三层之间的关系可以用一个创业公司来类比NFVO是CEO定战略、管整体业务VNFM是各个部门的经理管自己部门的产品VIM是行政部门负责给每个部门分配办公位、电脑、网络权限。部门经理提出需求行政去落实CEO决定整个公司怎么运转。4. 实操细节VNF落地的关键环节与性能调优概念讲清楚之后最重要的部分是VNF真正落地时的性能和稳定性问题。这是NFV实践中口碑两极分化的核心区方案宣传的时候“一切皆可虚拟化”实际一跑压力测试发现转发性能掉了一个数量级。这类问题我在项目里见过太多次了。下面把这几个关键环节的控制点一个个捋清楚。4.1 性能杀手一中断风暴与内核协议栈传统物理设备转发报文是专用硬件一条流水线干完的事报文进来直接查表转发中间几乎不经过CPU。云服务器里跑虚拟交换机每个报文都要经过物理网卡→CPU中断→内核协议栈→虚拟交换机→虚拟机内部协议栈每一跳都是性能损耗。所以要解决性能问题第一件事是调整虚拟网卡的I/O路径。这里需要重点掌握的技术是DPDKData Plane Development Kit数据平面开发套件。DPDK的核心思路是把数据报文的收发从内核协议栈绕出去在用户态用轮询模式直接操作网卡处理完的业务报文再通过大页内存映射直接递给虚拟机用户态应用。这样处理一条报文可以省掉两次内核态/用户态切换和N次内存拷贝。实际部署DPDK时要注意大页内存配置。普通Linux页面大小是4KBDPDK要求至少设置2MB或1GB的大页。为什么因为用户态程序要用mmap映射物理内存页越大TLB转译后备缓冲器命中率越高随机访问内存时的性能越稳定。我见过不止一次配置文件里写了DPDK参数但系统忘了开hugepage结果性能只能到预期的六成。4.2 性能杀手二CPU调度和NUMA问题VNF跑在虚拟机里CPU资源是共享的。如果hypervisor调度器把虚拟机的vCPU在物理核之间来回迁移那么VNF的实时转发线程就会被频繁打断延迟抖动会非常难看。对于需要稳定时延的VNF标准做法是CPU Pinning也就是把某个vCPU绑死在某个物理核心上。配合上isolcpus内核参数把这些核心从Linux调度器中隔离出来不让其他进程蘸染这些核心。NUMA非均匀内存访问也是一个绕不开的坑。现代x86服务器是NUMA架构CPU访问本地内存和远程内存的时延差异很大。如果虚拟机创建时没有做NUMA亲和性绑定——vCPU在Node 0内存却分配在Node 1——那么每次内存访问都要走跨Node互联总线性能损失可以达到30%以上。正确操作是给VNF绑定的CPU和分配给虚拟机的大页内存在同一个NUMA Node内最好连网卡的PCIe插槽也在同一个Node上形成“CPU-CPU-内存-网卡”的全链路本地化。4.3 实践方案一条完整的VNF性能优化配置链综合来看落地一个转发类VNF比如虚拟防火墙、虚拟负载均衡时我在项目中验证过的稳定配置链大致是这个顺序BIOS层关闭CPU节能模式如Intel的C-states关闭hyper-threading必须明确告知对两个vCPU绑在同一物理核心双线程上性能可能反而下降开启VT-d以支持SR-IOV。内核层加上isolcpus2,3,4,5,6,7内核参数把这几个核隔离出来给VNF用设置nr_hugepages2048每个大小为2MB。hypervisor层把vCPU绑定到前面隔离出来的物理核把虚拟机内存绑定到与网卡相同NUMA Node。虚拟化层接入DPDK vhost-user接口对OpenStack场景就是结合Open vSwitch的DPDK datapath或者直接把物理网卡SR-IOV VF直通给虚拟机。SR-IOV是把一块物理网卡虚拟出多个VF虚拟功能每个VF可以独立直通给一台虚拟机实现接近物理设备的性能但代价是虚拟机无法热迁移——这一点在规划高可用方案时务必提前考虑。VNF内部转发类进程绑定到特定的vCPU配置线程亲和性使用轮询模式如果你用的VNF支持关闭VNF内部无关的服务。这一套做完虚拟化防火墙的转发吞吐量基本可以接近物理设备的70%到85%对于绝大多数业务场景足够用了。但每一层都要仔细检查少配任何一个都可能导致性能雪崩。4.4 高可用设计VNF不是“单机软件”跑在VM里的VNF和跑在物理机里的网络设备在高可用层面最大的不同是物理设备坏了就坏了是确定性事件而VNF遇到的问题更多是“资源竞争”和“平台级故障”。所以VNF的高可用设计要从两个维度同时做。第一个维度是VNF自身的HA机制。传统的双机热备、主备切换在VNF里依然适用主备两个VNF实例跑在不同的物理宿主机上通过心跳检测故障并切换。关键配置点是主备VNF所在宿主机最好属于不同故障域不同机架、不同电源否则物理机故障会“一锅端”。第二个维度是依赖NFVI平台的HA能力。虚拟化平台本身要支持宿主机故障时VM的自动迁移和重启支持磁盘的冗余设计支持网络的冗余链路。这个层面做好了VNF实例即使损坏也能快速恢复——虽然业务会有短暂中断但比传统设备送修快得多。值得单独提醒的点虚拟机的热迁移Live Migration在网络功能场景下并不是一个“默认安全”的功能因为热迁移会导致VNF的转发面短暂中断而且对SR-IOV直通、DPDK绑定的VNF根本不支持。所以如果你使用了高性能加速方案请提前关闭自动热迁移否则一个VMware平白无故发作迁移整个VNF的转发性能可能瞬间掉到零。5. 常见故障与排查实录那些藏在细节里的坑NFV项目上线以后运维工程师面对的不再是“一台台设备”而是“一套套软件系统”。问题形态也变了不再只是链路断了、板卡坏了而更多是性能劣化、资源不足、编排失败、会话异常。我把实际运维中最常遇到的几类问题整理成一个速查表便于排查时直接对照。症状可能原因排查思路VNF转发性能只有预期的一半未配置DPDK大页内存查看 /proc/meminfo 的HugePages_Total跑dpdk-testpmd验证吞吐VNF时延抖动严重CPU Pinning丢失或未隔离核心检查vCPU的affinitytaskset或virsh vcpuinfo确认isolcpus生效流量跨NUMA Node转发性能骤降虚拟机内存未绑定在网卡所在NUMA检查虚拟机内存绑定的NUMA Node用numactl --hardware对比业务流量中断但VNF状态正常SR-IOV VF所在物理网卡故障或网络链路bundle失效检查VF的link状态检查宿主机的物理网卡状态VNF自动漂移后连接全部断开虚拟机热迁移导致DPDK/直通失效或迁移后IP/MAC冲突看vCenter或OpenStack的迁移记录强制关闭自动迁移NFVO编排任务卡住VNF创建不成功NFVI资源不足或VNFD参数与NFVI不匹配查看VIM的资源使用率核对VNFD里的CPU、内存、存储要求主备VNF切换后新主VNF不接流量ARP表或路由表未刷新或vIP绑定在旧实例上检查接入网交换机上的ARP表项确认keepalived/VRRP状态容器化VNF磁盘写满导致OOM重启日志文件未做轮转清理查看磁盘使用率配置logrotate并设置日志大小上限有几个经验想单独拿出来强调。第一个是关于“VNF状态正常但业务中断”这类问题的虚拟化环境里虚机的状态和业务状态不是一回事。vSphere上看VM是running不代表里面的防火墙进程就还活着。所以监控方案里一定要加“应用级健康检查”除了ICMP心跳还要探测业务端口必要时在VNF里部署agent。很多团队把监控停留在宿主机层面结果虚机卡死了都没发现这是NFV运维里最容易被忽视的盲区。第二个是关于“性能调优的顺序”。我见过不少工程师一上来就改DPDK、调NUMA结果性能没有明显改观最后发现是虚机的磁盘I/O模式不对vCPU配额不够。所以遇到性能问题先看资源配额和CPU是否被打满再看CPU亲和性再看内存和NUMA最后才动网卡加速方案。自底向上的排查顺序反而更高效。第三个是关于“编排器自身的高可用”。NFVO/VNFM是整个NFV系统的大脑如果这个大脑挂了所有VNF都无法自动恢复。部署时务必给MANO组件也配置多副本和负载均衡并且将MANO的数据库和配置文件做定时备份。很多项目把精力全放在VNF的高可用上却把编排器做成单点结果编排器一宕整个自动化体系瘫痪。6. NFV能带来什么除了省钱还有操作模式的改变聊了这么多技术细节最后回到价值层面。为什么这么多企业愿意忍受性能损耗和运维复杂度也要把网络功能虚拟化最直观的价值是成本。NFV把网络功能从专用硬件上剥离出来意味着不用再按“盒子”采购网络设备只需要按“资源”采购计算、存储和网络容量。CAPEX资本支出方面一台通用服务器可以承载多个VNF硬件采购量大幅下降OPEX运营支出方面不再需要为不同设备厂商维护多套NMS网络管理系统故障处理、版本升级、性能扩容的自动化程度都提升了。第二重价值是部署速度。传统模式下开通一条新业务链路从采购到发布可能需要数月NFV模式下只要资源池有余量一条“防火墙负载均衡DPI”业务链的编排开通可以在小时内完成。这个速度对于云计算、边缘计算、5G行业应用这类业务来说不是“体验改善”而是“能不能做”的关键前提。第三重价值是弹性和演进能力。物理设备的容量是固定的买了1G的吞吐只能用1GVNF的容量可以在资源池范围内灵活扩缩。传统设备升级软件需要逐台上线存在版本兼容风险VNF软件升级从开发到分发到部署的流程全面云原生化了灰度发布、快速回滚都成为可能。这套能力在业务流量波动大的场景下优势尤其明显。我一向认为NFV带来的更深层改变是“网络运维模式”的变化。以前网络工程师和系统工程师是两条线网络工程师管盒子系统工程师管服务器。NFV把这两条线折叠到一起运维人员需要同时掌握网络和计算虚拟化的技能。所以作为一个网络从业者尽早补齐虚拟化、容器、自动化方面的知识是给自己拓宽职业边界的具体做法。7. 什么时候还不适合用NFVNFV不是万能药有些场景下“物理机反而更优”。我在项目评审里经常遇到把NFV奉为圭臬的同事这里要冷静泼几盆冷水。第一类不适合的场景是对时延或性能极度敏感的核心转发节点。比如骨干网的核心路由器、超大规模数据中心间互联网关、实时交易系统的关键转发链路这些场景下物理硬件仍然有决定性优势。虽然DPDK和SmartNIC把虚拟化的性能差距拉近了但“接近”不等于“等同”对于绝大部分要求99.999%可用性和微秒级时延的网络物理设备依然是不二之选。第二类不适合的场景是“规模小到不值得”的存量环境。如果你只有一个分支办公室、一台防火墙、几台交换机把防火墙换成VNF意味着要额外购置服务器和虚拟化平台运维复杂度反而上升。虚拟化的效率来自规模化复用单点环境享受不到NFV的弹性红利只承担额外的复杂度。第三类要警惕的是“金丝雀”风险。如果企业本身没有自动化编排和流程化的发布体系直接上NFV可能不仅不能提升效率还会把虚拟环境的复杂度叠加上去。我始终认为NFV的前提是自动化如果连基础的脚本化和配置管理都没有建立先做好这些基本功再谈虚拟化而不是反着来。从我这些年实操的经验看NFV对大多数企业的价值主要体现在存量业务的整合和新增业务的敏捷交付上。它是一个“让网络工程往软件工程靠拢”的大方向但每个具体的选型决策都应该是场景驱动的而不是概念驱动的。技术选型时把业务时延要求、运维团队技能、自动化基础这三个条件摆清楚答案自然就出来了。
返回列表