OPPO云VPC网络实践
1 OPPO 云网络现状
随着OPPO业务的快速发展,OPPO云规模增长迅速。大规模虚拟实例的弹性伸缩、低延时需求对网络提出了诸多挑战。原有基于VLAN搭建的私有网络无法解决这些问题,给网络运维和业务的快速上线带来了挑战。
梳理存在的主要问题如下:
1)网络缺乏集中的控制系统,业务开通以手工配置为主,自动开通能力几乎没有,为后期维护、升级埋下隐患。
2)虚拟网络和物理网络耦合紧密,没有做到业务分离。虚拟网络的MAC或者路由会传递到物理设备上,对物理设备的二、三层表项的容量提出了很高的要求。虚拟实例大规模扩容后可能会使硬件设备上的路由表项耗尽,导致业务无法使用。
3)虚拟网络缺乏安全策略,已有的安全策略不能很好的管控虚拟网络之间的互访互通,网络访问控制机制不健全。
4)虚拟网卡带宽无法支持高性能业务。网络的虚拟网卡只支持veth/tap设备,网络带宽不高,满足不了网络数据密集型业务的需求。
5)虚拟网络系统没有实现控制和转发分离,控制面故障或者升级会影响业务。
2 虚拟网络选型
分析上述问题的根本原因之后,决定选择目前业界主流的SDN网络技术来解决上述网络隔离和运维自动化能力不足的问题,选择智能网卡OFFLOAD功能来实现虚拟实例的网络加速,选用虚拟私有云(VPC)技术来治理不同用户的业务网络、提高系统的健壮性、安全性。
SDN的数据面采用开源的OVS来实现,主要原因是OVS已经在数据中心中大规模应用,其转发性能、稳定性和安全性已经得到实践证明,其维护成本也相对降低。
VPC控制器、VPC网络接口(CNI)插件、VPC网关、VPC负载均衡(Load Balance)决定采用自研的方式实现,虽然社区已经有类似的方案(Neutron/OpenDaylight),但是这些项目都比臃肿,侧重于电信业务场景,维护成本较高,不能直接应用于数据中心互联网业务场景,并且和已有的平台系统,集成开发工作也比较多。而自研也有很多优点,比如新功能开发快速不在依赖社区、定制开发方便、轻量化、性能高、稳定性强。
3 VPC网络方案
整个VPC网络系统架构如下图所示。

图1 VPC网络架构
VPC控制台提供统一业务入口和便捷的界面操作,业务操作可视化,关键数据存于数据库中,便于维护和使用。
VPC SERVER是整个系统的中心,对云平台提供高效,简洁的业务接口。是整个系统的消息转发枢纽。
FlowEngine是位于计算节点的OVS控制器,它采用规则推理的方式计算流表,指示OVS如何转发业务报文。FlowEngine与VPC Server一起称作网络的中央中枢。
VPC CNI Agent负责计算节点网卡资源的管理和分配,同时对云平台提供了创建、删除等业务接口。它采用智能网卡虚拟化(SR-IOV)技术实现虚拟实例的网络加速。
VPC网关分为东西向的分布式网关和南北向的集中网关,提供不同子网的通信,解决了集中网关的单点故障问题。南北向的集中网关支持VXLAN隧道,实现虚拟网络和物理网络的互通,并且支持横向扩展和DPDK加速技术。
VPC LB实现四层负载均衡,对外提供业务的高可用方案。
3.1 VPC网络类型
当前VPC网络支持租户网络、公共网络和弹性IP网络。租户网络中虚拟实例之间可以互相访问,只能通过VPC网关访问外部网络,虚拟实例的IP地址不会发布出去,因而不能被外部主机访问。只有绑定上弹性IP才可以对外直接提供服务,这种网络特别适合于开发测试环境向生产环境的切换,有利于业务的快速发布。
租户网络也可以借助LB网关,发布虚拟IP(VIP)路由,对外提供业务。
公共网络类似于传统的VLAN网络,它的网段会被VPC网关发布到上联设备上,直接可以和IDC网络互通。方便部署基础虚拟云平台的监控服务以及公共服务。

图2 VPC业务网络架构
3.2 租户隔离的隧道VXLAN
VPC网络的类型为VXLAN隧道,每个子网分配唯一的VXLAN隧道ID,同安全组技术一起使用保证不同用户网络的完全隔离,解决了业务上云的安全风险。
OVS的数据面转发由本地控制器来控制,控制器故障不会影响其他节点的通信和已有隧道业务流的转发。
采用智能网卡的VXLAN卸载功能,不会因为VXLAN的性能损耗影响业务转发,同时节省了主机的CPU资源。
3.3 VPC隧道封装说明
3.3.1 VXLAN隧道隔离
VPC网络支持虚拟机和容器位于同一个二层网络,从网络角度看,他们都在同一个VPC子网内。不同节点虚拟实例互访,需要借助VXLAN隧道完成。同子网虚拟实例通信,报文的VXLAN ID是本子网的ID,异子网虚拟实例通信,报文的VXLAN ID是目的子网的ID。
虚拟实例访问VPC外部网络需要借助VPC网关,VPC网关采用软件实现,通过DPDK和高速网卡加速,运行在X86服务器上即可。当前也支持第三方VPC网关,VPC网关可以通过HTTP API或者BGP-EVPN接口与VPC SERVER交互VXLAN的路由信息。

图3 VXLAN隧道转发示意
3.3.2 VPC 负载均衡
VPC负载均衡采用全NAT方式实现,报文封装在VXLAN报文中进行转发。路由和隧道信息由VPC SERVER同步给LB控制器,LB控制器负责将路由信息更新到对应的网元。

图4 负载均衡转发示意
从上图可以清楚的看出报文的交互方案,LB网元会保持业务的会话session,支持轮巡、最小负载优先等调度算法。支持一致性哈希算法,无缝迁移业务功能。
LB网元采用DPDK和高速网卡实现,报文转发速率(PPS)可以达到800万以上 ,会话数目可以达到10万以上,时延小于1ms。满足互联网及IOT场景高并发业务要求。
3.4 VPC性能指标
VPC虚拟实例透传VF网卡后,转发性能可以到 25000Gbit/s。PktGen测试报文转发速率(PPS) 可以达到2400万,带宽可以达到25Gbps。带宽和PPS都可以达到虚拟的tap设备的两倍以上,同时降低了网络转发的CPU使用率。
VPC租户隔离的特性很好的解决多个租户内百万虚拟实例的快速互访问题。单实例和LB性能的提高了解决了现网中百万节点数据计算的带宽瓶颈。大大提高了系统的业务承载能力。VPC网络技术赋能AI和大数据计算平台。
4 收益与展望
上线运行后,VPC架构简化了网络架构,提高了网络的安全性、提高了系统的业务承载能力及运维效率,为用户带去良好的体验并得到客户的一致赞赏。
VPC版本仍在不断迭代中,即将发布的新功能有VPC统一管理容器、虚拟机、逻辑等多种类型的计算实例,数据面的高可用,OVS流表计算引擎高可用,100G最新智能网卡等。
转载 OPPO云VPC网络实践
相关文章:
OPPO云VPC网络实践
1 OPPO 云网络现状 随着OPPO业务的快速发展,OPPO云规模增长迅速。大规模虚拟实例的弹性伸缩、低延时需求对网络提出了诸多挑战。原有基于VLAN搭建的私有网络无法解决这些问题,给网络运维和业务的快速上线带来了挑战。 梳理存在的主要问题如下…...
力扣(数组)找到所有数组中消失的数字
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 示例 1: 输入:nums [4,3,2,7,8,2,3,1] 输出:[5,6]示例 2&am…...
每日面经分享(Spring Boot: part3 Service层)
SpringBoot Service层的作用 a. 封装业务逻辑:Service层负责封装应用程序的业务逻辑。Service层是控制器(Controller)和数据访问对象(DAO)之间的中间层,负责处理业务规则和业务流程。通过将业务逻辑封装在S…...
k8s的pod访问service的方式
背景 在k8s中容器访问某个service服务时有两种方式,一种是把每个要访问的service的ip注入到客户端pod的环境变量中,另一种是客户端pod先通过DNS服务器查找对应service的ip地址,然后在通过这个service ip地址访问对应的service服务 pod客户端…...
shell脚本发布docker-nginx vue2 项目示例
docker、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 nginx安装在docker容器里面,参见:https://blog.csdn.net/HSJ0170/article/details/128631155 姊妹篇(宿主机nginx,非docker-nginx)&am…...
【THM】Nmap Basic Port Scans(基本端口扫描)-初级渗透测试
介绍 本房间是Nmap系列的第二个房间(网络安全简介模块的一部分)。 1.Nmap实时主机发现 2.Nmap基本端口扫描 3.Nmap高级端口扫描 4.Nmap后端口扫描 在之前的房间里,我们专注于发现在线系统。到目前为止,我们已经介绍了Nmap扫描的三个步骤: 枚举目标发现活动主机反向-…...
Groovy结合Java在生产中的落地实战
Groovy简介 Groovy是用于Java虚拟机的一种敏捷的动态语言,是一种成熟的面向对象编程语言,又是一种纯粹的脚本语言。Groovy运行在JVM环境上,在语法上兼具java 语言和脚本语言特点,大大简化了语法。同时又具有闭包和动态语言中的其…...
达梦数据库 创建外部表 [-7082]:外部表数据错误.
1:定义 外部表,是指不存在于数据库中的表。通过向达梦提供描述外部表的元数据,可以把一 个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来 进行访问。 外部表的数据存储在操作系统中࿰…...
XUbuntu22.04之激活Linux最新Typora版本(二百二十五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
JavaScript简介
目录 概要: 说明: 学习JS的原因: JS可以干什么: 了解JavaScript: 前言: JavaScript的历史: JavaScript与ECMAScript: 如何运行JavaScript以及JavaScrip的特点: …...
使用PaddleX实现的智慧农业病虫检测项目
目录 1. 数据集解压 2.检查数据集的图片是否均可读取 3. 查看数据集的类别信息...
算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)
算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…...
【IP组播】PIM-SM的RP、RPF校验
目录 一:PIM-SM的RP 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM和静态RP 4.配置动态RP 5.配置Anycast RP 二: RPF校验 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-DM 4.RPF校…...
前端代码规范-命名规范
命名规则 camelCase(小驼峰式命名法 —— 首字母小写)PascalCase(大驼峰式命名法 —— 首字母大写)kebab-case(短横线连接式)Snake(下划线连接式) 项目名称 项目名 全部采用小写方…...
移动端APP测试常见面试题精析
现在面试测试职位,要求非常全面,那么APP测试一般需要哪些技术呢?下面总结了APP测试常见面试题: 1.Android四大组件? Activity:描述UI,并且处理用户与机器屏幕的交互。应用程序中,一个Activity就相当于手…...
报错[Vue warn]: $listeners is readonly. $attrs is readonly.怎么解决?
代码也没有逻辑错误,但是报错 [Vue warn]: $listeners is readonly. $attrs is readonly. 情况1:多处声明了new Vue,解决方案:删除一个,用全局变量引用同一个Vue 情况2:import Vue from Vue;第二个Vue首字…...
android 14 apexd分析(1)apexd bootstrap
Apex的由来,我们都知道普通的apk我们可以通过应用商店playstore等进行更新,apex的引入是google希望也能通过playstore更新bin文件.so etc配置文件等类型文件. 这些文件的安装实际通过apexd来进行,现在我们来解析一下apexd, apexd的启动分为两个阶段,bootstrap和普通apexd启…...
C++ 中的 vector 的模拟实现【代码纯享】
文章目录 C 中的 vector 模拟实现1. vector 的基本概念2. vector 的基本操作3. vector 的模拟实现4.代码纯享5. 总结 C 中的 vector 模拟实现 在 C 中,vector 是一个非常重要的容器,它提供了动态数组的功能。在本篇博客中,我们将尝试模拟实现…...
UE4 方块排序动画
【动画效果】 入动画: 出动画: 【分析】 入动画:方块动画排序方式为Z字形,堆砌方向为X和Y轴向 出动画:方块动画排序方式为随机 【关键蓝图】 1.构建方块砌体 2.入/出动画...
网络与并发编程(一)
并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial):一个CPU上,按顺序完成多个任务并行(parallelism):指的是任务数小于等于cpu核数,即任务真的是一起执行的并发(concurrency):一个CPU采用时间…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
