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采用时间…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
