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采用时间…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...