OPPO VPC 实践探索

2024-04-03 10:04
文章标签 实践 探索 vpc oppo

本文主要是介绍OPPO VPC 实践探索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01 概述

一年前(20年6月),OPPO云网络技术底座开始支持VPC方案,解决了用户担心的云上安全和虚拟实例的性能问题。我们称这个版本为VPC1.0,其采用了先进的智能网卡加速和VXLAN隧道隔离技术,实现了VPC从无到有的突破。

然而由于业务快速增加,短短的一年时间不到,云上VPC环境中的虚拟实例就达到百万级别。这史无前例的实例规模迅速给VPC的故障定位和运维带来巨大压力和成本开销。

经过团队调研业界趋势和当前版本功能,发现1.0版本存在下面问题:

(1) 网络控制器数量逐渐增多,一些相同的配置需要在每个控制器上都配置一遍,每天都有业务上线,经常重复配置,效率低、运维成本高。每个集群使用的IP地址单独管理,缺乏统一的IP地址管理机制,业务开通效率低而且容易出错造成业务故障。

(2) 控制器对于运行的虚拟路由器状态无感知,无法高效的获取系统运行的状态。

(3) 基于pyDatalog的控制器完全计算一次大规模的网络拓扑耗时较长,性能低,导致虚拟路由器无法及时转发超低延时的报文,最终带来业务受损。

(4) 虚拟网络缺乏南北向流量的安全策略防护,已有的东西向安全组策略不能高效的管控虚拟网络之间的互访互通,网络访问控制机制不健全,效率低。

(5) VPC无法跨集群互访、不能同裸金属一起实现VPC隔离组网,需要依赖物理网关打通,这种方式需要频繁更改物理交换机的配置甚至搬迁机器,运维成本较高。

02 VPC 2.0系统需求

分析上述问题的根本原因之后,提出下面的解决方案,具体解决如表1所示。

VPC支持南北向的安全防护功能,VPC支持跨集群互访,VPC支持裸金属组网,控制器OVS流表生成算法重构,增强观测性和日志告警闭环处理。

增加一个VPC的超级控制器vnCenter(Virtual Network Center), 用于给控制器分发统一的配置、实现业务编排及统一的IP地址管理。

问题描述

解决方案

统一的IP地址管理机制, 每个控制器需要重复相同的配置操作

集中到超级控制器vnCenter上处理,由vnCenter自动分发给其他VPC集群

无法快速查询虚拟路由器状态,运维效率低

增强控制器可观测性,增强运维能力

控制器更新流表慢

自研控制器

缺乏南北向安全防护

VPC网关支持ACL功能

VPC无法跨集群互访

实现VPC跨集群互访

VPC不支持裸金属

用硬件网关实现裸金属的VPC隔离

表1  问题与解决方案对照

03 VPC 2.0方案

VPC2.0主要组件系统如图1所示。

图片

图1   VPC系统组件图

Cloud控制台提供统一业务入口和便捷的界面操作,业务操作可视化,关键数据存于数据库中,便于维护和使用。

vnCenter用于给控制器VPC Server分发统一的配置、实现业务编排及统一的IP地址管理。

VPC Server 是整个系统的中心,对云平台提供高效,简洁的业务接口。是整个系统的消息转发枢纽,通常称为控制器。

HostController是位于计算节点的OVS (OVS, Open vSwitch)控制器,它指导OVS如何转发业务报文。HostControllerVPC Server一起称作VPC网络的中枢,承担网络转发的重要职责。

VPC CNI Agent负责计算节点网卡资源的管理和分配,同时对云平台提供了创建、删除等业务接口。它采用智能网卡虚拟化(SR-IOV)技术为虚拟实例分配高速网卡,实现虚拟实例的网络加速。

VPC网关分为东西向的分布式网关和南北向的集中网关。分布式网关提供不同子网的通信功能,解决了集中网关的单点故障问题。南北向的集中网关支持VXLAN隧道,实现虚拟网络和物理网络的互通,并且支持横向扩展和DPDK加速技术。网关还支持ACL功能,集中网关可以是自研产品,也可以是第三方支持EVPN-VXLAN协议的硬件设备。

3.1 控制器

3.1.1 增强业务运维能力和可观测性

控制器支持子网IP地址资源的状态自动更新。若即将没有地址,则触发子网扩容IP告警。运维人员收到告警后,安排扩容,关闭告警。

观测性增强包括计算节点和网关的状态跟踪。控制器不断监控系统计算节点的消息,如果没有及时收到消息,则显示其状态为Inactive状态, 如一直有消息更新,则显示其为Active状态。再结合VPC网关,计算节点IP可以迅速构建出一幅业务的网络拓扑,便于故障排查和问题定位。除此之外,还可以支持VPC网关的状态查看。

控制器业务日志入库,定期搜索异常日志,触发告警,运维人员收到告警后,处理潜在风险,关闭告警。

3.1.2 OVS流表计算优化

原有的OVS流表计算引擎是一个单线程的Python程序,无法并行计算流表。网络规模大时,计算时间太长,容易引起业务短暂中断。为此我们采用Go语言,重新设计了一套OVS流表的生成算法,自主开发了HostController程序。其支持流表的并行计算,简化了业务逻辑,提高了流表计算效率。满足原有业务低时延的要求。按需模式经过优化后的首包时延可以降为原来的十分之一。

3.1.3 增强VPC网关接入能力

虽然自研VPC软件网关具有弹性和性能兼顾的综合优势,但其单台转发容量受制于CPU的主频和网卡的数目。在大数据和AI计算业务场景下,并不具备优势。因而我们开发了采用第三方硬件设备充当VPC网关的功能。

采用第三方硬件网关除了可以增加系统的吞吐量外,还可以借助硬件网关的VXLAN隔离能力,将裸金属纳入VPC逻辑范围内,实现虚拟机、容器、裸金属统一组网。如图2所示展示了VPC混合组网的场景。

图片

图2 VPC混合组网

VPCServer引入GoBGP后具备了和通用硬件设备交换EVPN-VXLAN路由的能力,从而可以实现裸金属和虚拟实例的隔离访问的功能。

对于一般的互联网数据中心(IDC,Internet Data Center)物理区,其和VPC网络之间是路由互通模式,可以在网关应用特定的防火墙隔离。

3.1.4 增强VPC网关安全能力

基于OVS实现的安全组功能可以很好地实现东西向的安全访问,但对南北向的安全防控,却有点力不从心。为此我们开发了网关的安全访问控制控制(ACL)功能。其基于五元组的方式实现防火墙级的安全保障。VPC控制台支持ACL的配置和查看,并且支持复制功能,高效实用,有利于业务维护。

如图1所示,VPC控制台可以针对每个VPC配置单独的ACL策略,并自动同步到VPC网关上,用于实现防火墙的功能。

自研VPC网关的ACL功能采用用户态DPDK技术实现加速,并不会因为添加了ACL而带来转发性能的明显下降。

3.2 vnCenter 业务编排能力

3.2.1 统一编排所有控制器

图片

图3  vnCenter统一管控VPC控制

如图3,对于一些通用的配置可以通过vnCenter操作,实现一次配置所有集群生效,高效实现配置的同步。

例如常见的租户信息,用户信息以及用户和VPC的关系,这些都是全局统一的,一次配置可以实现多个集群/可用区都可以使用,不需要每个集群单独配置。

vnCenter上可以查看所有VPC的可用子网信息,通过vnCenter上可以实现VPC网络地址的统一管理和分配,避免地址的冲突。

3.2.2 多集群业务编排能力

图片

图4   DCI互通业务编排

vnCenter可以在多个集群之间实现VPC互通业务,并不需要专用的硬件设备。可以很好的支持业务的备份和集群多活功能。如图3所示。VPCServer在收到vnCenter的集群间业务编排后,开始进行网络拓扑的更新,并指导HostController完成集群间的VPC互通。

04 收益与展望

新版本VPC上线后,提高了网络的稳定性、改进了系统业务承载能力及运维效率,为用户带来良好的体验并得到客户的一致赞赏。

尤其是新上线的控制器HostController,裸金属,ACL功能使VPC的应用场景进一步扩大,推动更多的业务迁移到VPC环境运行。给用户带来更多业务收益。VPC后续版本将向支持高性能和eBPF方向演进。

原文连接: OPPO VPC 实践探索

这篇关于OPPO VPC 实践探索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/872613

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬