1.云计算

根据官方提供的资料“云计算就是指通过互联网,以按需服务的形式提供计算资源。这样企业就无需自行采购、配置或管理资源,而且只需要为实际使用的资源付费。”很好理解。总结一句话就是说:云服务商有多种资源,根据客户需求,把相应资源租给客户使用。这就是云计算。

云计算也包含了很多种:

如果把云服务商的所有资源比做成一个资源池,如图1所示

在这里插入图片描述

图1

1.1 公有云

公有云就是将资源池所有的资源都放在一起,一起来给客户使用。但是客户和客户之间和无法感知的。可以理解为服务运行在外部(云服务厂商的公有池子)。

1.2 私有云

私有云就是将资源池分成多部分,也可以看成有多个资源池,每个客户都对应不同的资源池。资源池中所有的设施都只为这个客户提供服务,云服务商只负责提供技术支持等服务。私有云对客户而言可操控性更强。可以理解为服务运行在内部(云服务厂商提供给客户私有的池子)。
在这里插入图片描述

图2

下面这张图可以更明显的说明公有云和私有云的区别:

在这里插入图片描述

图3

1.3 混合云

顾名思义,混合云融合了至少一个公有云和一个私有云。那么为什么会有混合云的出现呢?最本质的原因一定是钱!也就是成本控制,其次就是有一些客户部分服务数据要严格保密但是有些可以公开,同时混合云的容灾和业务连续性更强。可以理解为以下三点:

成本控制: 组织可以使用混合云模型来优化成本。一些工作负载可能更经济地在私有云中运行,而其他工作负载则可以通过按需访问的方式利用公有云的弹性计算资源。

合规性和数据隐私: 某些行业或组织可能面临法规和合规性要求,要求敏感数据留存在特定的地理位置或基础设施中。混合云允许企业在私有云中处理这些敏感数据,同时利用公有云的灵活性。

容灾和业务连续性: 混合云模型可以提供更强大的容灾和业务连续性解决方案。通过将关键工作负载在本地和云之间分布,组织可以更好地应对可能发生的故障或灾难。

所有的私有云和混合云都是根据客户需求衍生出来的。可以看到产品一定离不开需求。未来的趋势一定是混合云。

1.4 托管云

托管云实际上就是:云服务+托管服务。主要表现在云计算中基础设施、网络、存储、计算、安全的运维。目前,市面上很多云服务都具有托管功能。

2.云计算的交付模式

下面说一下云计算的三种交付模型:基础设施即服务(Iaas)、平台即服务(Paas)、软件即服务(Saas)

Iaas

​ 基础设施即服务,用户可以控制操作系统、网络、存储等,是对于硬件和底层系统的管理是由云服务提供商负责的。。也就是说用户可以控制底层的基础设施。 IaaS 适用于那些需要更高级别的灵活性和控制的场景,允许用户在虚拟环境中创建、配置和管理自己的应用程序。

Paas

​ 平台即服务,提供了一个应用程序开发和运行的平台,包括开发工具、数据库、中间件等。它隐藏了底层的基础设施,使开发者能够专注于应用程序的设计和开发。

Saas

​ 用户直接使用云服务商提供的软件,其他什么都不用干。

3.虚拟化与云网络

​ Iaas基础架构可以看做:计算机虚拟化、网络虚拟化、存储*三部分组成。这也是云计算整体服务底层的架构。

3.1 计算机虚拟化

​ 计算机虚拟化包括:CPU虚拟化、内存虚拟化、io虚拟化。实现CPU虚拟化和内存虚拟化的工具就是KVM

3.1.1 什么是kvm?

​ KVM 全称是基于内核的虚拟机(Kernel-based Virtual Machine),它是 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor也叫Virtual Machine Monitor(VMM)虚拟机监控器。

3.1.2 为什么会出现KVM?

传统的虚拟化技术已经很成熟,但是在性能上和物理机差距很大。说白了,kvm就是为了提高虚拟机的性能!

3.1.3 kvm虚拟化CPU和内存

kvm虚拟化CPU和内存

3.2 I/O虚拟化

​ IOMMU(I/O Memory Management Unit)是一个内存管理单元,主要针对外设访问系统内存市进行内存管理。

IOMMU的两个基础功能:地址重映射和 中断重映射。

​ overlay:Overlay方案便是从事服务器虚拟化技术的IT厂商主推的大二层网络解决方案。其原理就是通过用隧道封装的方式,将源主机发出的原始二层报文封装后,再在现有网络中进行透传,到达目的地之后再解封为原始报文,转发给目标主机,从而实现主机之间的二层通信。报文的封装/解封装都是在服务器内部的虚拟交换机vSwitch上进行,外部网络只对封装后的报文进行普通的二层交换和三层转发即可,所以网络技术控制权就都回到了IT厂商手里。典型技术实现包括VXLAN、NVGRE、STT等。

​ SDN:软件定义网络(Software Define Network,SDN)技术是对传统网络架构的一次重构,其核心思想是通过控制面(Control Plane)与数据面(Data Plane)的分离,将网络的管理权限交给控制层的控制器软件,在通过OpenFlow协议通道,统一下达指令给数据转发层设备,从而实现网络控制与数据转发的充分解耦,一举破除传统网络设备的封闭性。

https://developer.huawei.com/consumer/cn/forum/topic/0211128259827674019

3.2.1 openflow协议

​ openflow协议并非类似于tcp、udp等协议。openflow协议而是一种控制层面的协议。传统的流量传输需要查询路由表,也就是说路由器的控制层面和数据层面没有分开。但是,SDN所使用的openflow协议可以理解为将路由表全部结合到一起放在SDN控制器中,流量的传输通过查询SND控制器的流表即可,这整个的查询过程就叫做openflows协议。

https://chentingz.github.io/2019/12/30/%E3%80%8COpenFlow%E3%80%8D%E5%8D%8F%E8%AE%AE%E5%85%A5%E9%97%A8/#0x02-openflow%E7%AE%80%E4%BB%8B

3.2.2 vhost-net协议

最经典的vhost-net图
在这里插入图片描述

图4

vhost-net执行的流程
在这里插入图片描述

图5

参考链接:https://cloud.tencent.com/developer/article/2030947

3.2.3 vhost-user协议

在这里插入图片描述

图6

vhost-user实际上就是将vhost-net的virtqueue通过dpdk提取到了物理机的用户态,同时通过dpdk调用底层kvm和网卡接口,跳过了之前的linux内核部分。也就真正意义上实现了零拷贝(慢路径不算)。所以目前主流云计算网络都是基于dpdk+ovs绕过内核。但是存在的缺陷:

a.ovs轮询模式非常占用cpu

b.dpdk虽然NAPI模式,但是大部分都是在轮询运行,依然对资源的消耗很大。

对dpdk的优化有

1)增加内核启动参数:isolcpus=2,3,4,5,6,7,8使处理器上的ID为上述的逻辑和不能陪操作系统调度。

2)可以修改编译时候的参数:修改编译参数来使能“extended tag”, 具体就是修改“config/common_linux”里如下的两项参数。 Extended Flag(8位宽) 被打开后, (在一些老的系统上, 默认不打开) 只有5位会被有效使用,支持32路并发, 完全Enable后, 8位同时使用, 能最大支持256个并发请求, 在40Gbit/s或者更高速端口会体现出性能差异。 修改PCIe Extended Tag可能涉及BIOS的配置与升级。CONFIG_RTE_PCI_CONFIG=y CONFIG_RTE_PCI_EXTENDED_TAG=“on”

3)收发队列的长度收队列长度dpdk默认是128发包队列长度,dpdk默认是512。有512个描述符。 当处理更高速率的网卡设备时, 或者发现有丢包的时候, 就应该考虑更长的发包队列,

4)收发包可释放描述符数量阈值( rx_free_thresh)每读出一个包, 与之对应的收包描述符就是可以释放的了, 可以配置好用来后续收包过程。 由收发包过程知道, 需要更新表示收包队列尾部索引的寄存器来通知硬件。 实际上, DPDK驱动程序并没有每次收包都更新收包队列尾部索引寄存器, 而是在可释放的收包描述符数量达到一个阈值(rx_free_thresh) 的时候才真正更新收包队列尾部索引寄存器。 这个可释放收包描述符数量阈值在驱动程序里面的默认值一般都是32。

5)**发包描述符释放阈值(tx_free_thresh)**只有当可以用来重新配置的发包描述符数量少于阈值的时候, 才会启动描述符和Mbuf的释放动作, 而不是每次看到有发包完成就释放相应的发包描述符和Mbuf。

调试过这些参数,性能会有所提升。但是时延和吞吐性能是成反比的,这种情况需要根据具体业务二舍去了。

4.总结

云计算真正发展起来主要还是依赖过剩的硬件资源和SDN(Software Define Network)大二层网络的到来。过剩的硬件资源包括CPU、内存、网卡等,最近技术也支持集成式GPU也可以通过类似网卡的SR-IOV技术进行虚拟化,但是笔者并没用过。今天主要讨论的是基于SND控制器大二层网络的云网络技术的发展。

什么是SND控制器?

软件定义网络,顾名思义建立在软件基础上。学过网络技术的都应该知道,网络分为两个层面:控制面和数据面。控制面通知数据面以什么样的形式和规则进行传输,数据面负责整体数据的传输。传统的网络控制面和数据面是耦合的。简单来讲:一张网卡干两个活,即负责调控数据转发策略,也要进行数据转发。如果我们只操作一张网卡那并没什么思考的,但是如果我们有多张网卡,每张网卡的业务逻辑都不一样,那么转发策略就都不同。想要修改网卡的转发策略只能一个网卡一个网卡的修改,重复工作+浪费时间。这就是传统网络最大的问题。所以SND网络应运而生,SND网路将网卡中的控制面提取出来用软件实现,使网卡只负责转发,控制面统一使用SDN调配。极大简化了传统网络实现和运维的工作量,同时使网络更加白盒化。
在这里插入图片描述

图7

所以说,目前各大云计算厂商都会有一套自己完整的SND控制器,承载着业务和基础设施。有了SDN集群化管理,才会使得云计算的飞速发展。SDN催化着网络技术的飞速发展,同时网络虚拟技术也逐渐成熟。

网络虚拟化

网络虚拟化离不开网卡的虚拟化。最初网卡的虚拟化是纯软件来实现的,也称为全虚拟化,但是全虚拟化的性能很低,主要的原因是客户虚拟机产生的IO请求需要经过KVM内核(可以理解为linux内核),在传到qemu线程中,这就使得传输路径较多,虚拟机存在频繁的entry和exit操作。所以,半虚拟化的出现就是为了解决这个问题。半虚拟化通过前后端的协商使得传输阶段省去了kvm内核和qemu线程阶段,同时增加了环形队列。这个环形队列实际存储的是消息通知描述符(eventfd),同时环形队列可以批量存储后将存储的消息批量发送到硬件中。避免了频繁的IO操作也节省了部分的性能开销(虽然吞吐会有所增加,但是如果环形队列每次存储消息过多会增大传输时延。所以并不是环形队列越大越好)。但是,半虚拟化需要在客户机中安装相应的virtio-net、virtio-blk等驱动,在兼容性上存在缺陷。

同时,为了解决性能问题,另一种方案也被提出----网卡直通。网卡直通,实际上就是将物理机上的物理网卡的控制权交给了虚拟机,这就是vfio技术。虽然在性能上有所提升,但是一个客户机对应一张网卡,资源上浪费了很多。

SR-IOV技术解决了这个问题,sriov可以将物理网卡(并非所有的硬件网卡都支持sriov技术)虚拟出多个VF(一般256VF个最多)然后将VF通过vfio技术直通到虚拟机中,在性能上和物理网卡直通相差无几。但是不支持虚拟机的热迁移。(之前的调研mellanox在qemu基础上,通过failover技术支持了这个热迁移,但是实践的时候并没成功。)

为了解决热迁移问题,近几年产生了vdpa技术。主流的vdpa技术是通过dpdk来实现的,所以也叫作dpdk-vdpa。目前支持dpdk-vdpa的网卡有intel和NVIDIA-mellanox智能网卡两种。以mellanox网卡为例,实际上是再vhost-user协议基础上来实现的vdpa技术。通过vdpa技术,将vf包装成virtio类型网卡传输到虚拟机中,这样虚拟机不用安装相应驱动,同时也支持了热迁移。智能网卡,并没有将业务全部卸载到网卡上,ovs和dpdk-vdpa线程依然运行在主机上,并且资源消耗也不容忽略。所以mellanox开发了DPU(data processing unit),将ovs和dpdk在dpu网卡中运行,这就做到了主机资源最大程度的释放。但是DPU技术目前来看并不成熟。市面上有多重DPU卡,他们的技术方案和实施环境都差异极大。类似NVIDIA的BF2卡,以一种vfe技术代替了智能网卡的vdpa,实际上实现的效果是一样的,但是在开发过程中坑很多,并且性能不经过专家调试根本达不到POC性能。同时国内代表,华为的SP680的DPU在2024年初可能会推出。小编测试过SP680和CX6卡。他们的性能在X86和ARM架构的环境上表现的天差地别。

上述总结起来如图2所示
在这里插入图片描述

图8

未来一定是面向全卸载功能,DPU在云计算和大模型等领域的应用是必然的。但是DPU技术相关的积累较少,国内除了阿里华为等大规模使用其他云服务厂商并没有真正的把DPU业务完美落地。真正需要攻关的依然是DPU的落地方案以及在热迁移上的兼容性。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐