0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用 ebpf 能力加速ServiceMesh如何降低并消除网络时延带来的影响

openEuler 来源:openEuler 作者:openEuler 2021-12-21 14:42 次阅读

服务网格的前世今生早期的微服务架构上存在着服务发现、负载均衡、授权认证等各种各样的难题与挑战。起初微服务践行者们大多自己实现这么一套分布式通信系统来应对这些挑战,但这无疑造成了业务功能的冗余,解决此问题的方法就是将共有的分布式系统通信代码提取出来设计成一套框架,以框架库的方式供程序调用。但这个看似完美的方法却存在着几个致命的弱点:

框架大部分对业务来说是侵入式修改,需要开发者学习如何使用框架

框架无法做到跨语言使用

处理复杂项目框架库版本的依赖兼容问题非常棘手,框架库的升级经常导致业务的被迫升级。

随着微服务架构的发展,以 Linkeerd/Envoy/NginxMesh 为代表的 sidecar 代理模式应运而生,这就是第一代的 serviceMesh。它作为一个基础设施层,与业务进程完全解耦,和业务一起部署,接管业务件之间的通信,将网络数据收发单独抽象出一层,在这层集中处理了服务发现、负载均衡、授权认证等分布式系统所需要的功能,实现网络拓扑中请求的可靠传输,较为完美的解决了微服务框架库中的问题。

但在软件开发领域没有万能的银弹。ServiceMesh 带来了这么多便利的同时,也不可避免的存在着一些问题。传统方式下,客户端到服务端的消息仅需进出一次内核协议栈即可完成消息传递,但在 sidecar 模式中,一般选择使用内核的 iptables 能力劫持业务流量,这就造成了业务数据需要多次进出内核协议栈,导致业务时延增大,吞吐量变低。

openEuler 21.03 版本下进行 sidecar(envoy)模式基准测试发现,with-envoy 与 non-envoy 模式下,时延有大幅增加

利用 ebpf 能力加速 ServiceMesh有没有什么方法可以在享受 ServiceMesh 提供便利服务的基础上同时降低并消除网络时延带来的影响呢?在这里就不得不说下 ebpf 技术,ebpf 是在 kernel 中的一项革命性技术,旨在提供不修改内核代码或加载内核模块的基础上更加安全有效的扩展内核的能力。使用 ebpf 能力短接内核网络协议栈来降低网络时延,提升 ServiceMesh 的使用体验,这是目前业界通用的做法。

为了实现短接内核网络协议栈的目标,我们需要使用到 ebpf 提供的两种能力,分别是:sockops 与 socket redirection,openEuler 使用的 kernel 版本为 5.10,已经支持了 ebpf 的这两种能力。

sockops 提供了在 tcp socket 创建连接时将 socket 使用 key(一般是四元组)标识后保存在 sockmap 数据结构中的能力

socket redirection 在传输 tcp 数据时支持使用 key 去 sockmap 中引用 socket,命中后可直接将数据转发到此 socket 中

对于未在 sockmap 中找到的 socket,正常将数据包通过内核网络协议栈发送出去

将这些能力结合在一起,就可以在不经过内核网络协议栈的前提下直接将数据包转发到对应的 socket 上,完成数据的一次传输,降低在内核网络协议栈上的时间消耗。

在 tcp socket 建立连接的过程中,实际上有两次连接建立的过程,我们通常称之为正向连接与反向连接。因正反向连接在建连过程中均需要通过 iptables 信息来获取实际的 ip 地址与端口号,openEuler 在 iptables 的工作原理上新增 helper 函数,将获取对端信息的能力下沉到内核中,可以在 ebpf 函数中主动获取到 iptables 转换过的地址。这样我们可以建立一个辅助 map 用于存放正反向连接的对应关系并在 socket redirection 转发时先从辅助 map 中寻找到对端的连接信息,成功找到对端的连接信息后再进行 socket 转发动作。原理如下图

通过 sockops 能力的加速,我们在 openEuler21.03 上实测的结果如下:

测试环境:openEuler-21.03 / 5.10.0-4.17.0.28.oe1.x86_64

组网:fortio-envoy-envoy80

qps 提升约为 18%,平均时延提升 15%

下一步的工作:彻底消除 ServiceMesh 性能损耗从 openEuler21.03 实际测试中可以看出,sockmap 对于 ServiceMesh 可以进行加速,但是加速的结果与不使用 ServiceMesh 相比仍然有较大差距。仔细分析,sockmap 并没有消耗 socket buff 之间的数据拷贝,也没有消耗 app/envoy 之间通信时的上下文切换,那问题可能仍然出在 ServiceMesh 架构上。有没有一种方法,既有 ServiceMesh 易管理、易部署的能力,又能消除其带来的性能劣化影响?目前 openEuler sig-high-performance-network 正在尝试这方面的工作,已经有了初步进展。

原文标题:openEuler结合ebpf提升ServiceMesh服务体验的探索

文章出处:【微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6509

    浏览量

    87557
  • 代码
    +关注

    关注

    30

    文章

    4553

    浏览量

    66665
  • openEuler
    +关注

    关注

    2

    文章

    289

    浏览量

    5660

原文标题:openEuler结合ebpf提升ServiceMesh服务体验的探索

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    eBPF动手实践系列三:基于原生libbpf库的eBPF编程改进方案简析

    在上一篇文章《eBPF动手实践系列二:构建基于纯C语言的eBPF项目》中,我们初步实现了脱离内核源码进行纯C语言eBPF项目的构建。libbpf库在早期和内核源码结合的比较紧密,如今的libbpf库更加成熟,已经完全脱离内核源码
    的头像 发表于 03-19 14:19 208次阅读
    <b class='flag-5'>eBPF</b>动手实践系列三:基于原生libbpf库的<b class='flag-5'>eBPF</b>编程改进方案简析

    基于原生libbpf库的eBPF编程改进方案

    为了简化 eBPF程序的开发流程,降低开发者在使用 libbpf 库时的入门难度,libbpf-bootstrap 框架应运而生。基于libbpf-bootstrap框架的编程方案是目前网络上看到的最主流编程方案。
    发表于 03-19 14:19 139次阅读
    基于原生libbpf库的<b class='flag-5'>eBPF</b>编程改进方案

    如何利用桥式电路消除温度对电阻应变片的影响?

    如何利用桥式电路消除温度对电阻应变片的影响? 桥式电路是一种常见的测量电阻应变片的电路结构,可以通过电压差的方式来准确测量电阻应变片的应变量。然而,在实际应用中,由于温度的影响,电阻应变片的阻值
    的头像 发表于 02-04 17:32 578次阅读

    怎么消除电阻分压(没有电压跟随器)带来的误差

    怎么消除电阻分压(没有电压跟随器)带来的误差  消除电阻分压带来的误差是一个重要的问题,特别是在需要准确测量电压的应用中。电阻分压是一种常见的电路结构,它可以将一个较高的电压
    的头像 发表于 12-20 15:35 455次阅读

    AD9361时响应特性不固定如何优化?

    利用AD9361进行扩频信号的收发自闭环实验,测试发现,AD9361工作在AGC模式下,接收链路时随接收信号功率变化(时变化量超过0.1ns)。后调成MGC模式,手动控制接收链路为固定增益,时
    发表于 12-12 07:36

    ebpf的快速开发工具--libbpf-bootstrap

    )和libbpf的程序。eBPF是一种可以在Linux内核中运行的程序,提供了强大的网络过滤、系统调用监控和性能分析等功能。libbpf是一个库,用于加载和管理eBPF程序和map。 libbpf-bootstrap提供了一些样
    的头像 发表于 09-25 09:04 360次阅读
    <b class='flag-5'>ebpf</b>的快速开发工具--libbpf-bootstrap

    如何降低网络安全漏洞被利用的风险

    面对层出不穷的网络安全事件,如何降低漏洞被利用的风险,是网络安全厂商和客户比较头痛的事情。日前,国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相
    的头像 发表于 09-13 15:37 636次阅读

    基于UG1393实现专用加速

    C/C++加速器开发 1.设定性能基线确立目标 2.按加载计算-存储模式 3.对代码进行分区 4.识别要加速的函数 5.将计算块划分为小函数 6.识别FPGA器件并行化需求 7.识别要最优化的循环
    发表于 09-11 23:38

    基于ebpf的性能工具-bpftrace脚本语法

    bpftrace 通过高度抽象的封装来使用 eBPF,大多数功能只需要寥寥几笔就可以运行起来,可以很快让我们搞清楚 eBPF 是什么样的,而暂时不关心 eBPF 复杂的内部机理。由于
    的头像 发表于 09-04 16:04 540次阅读
    基于<b class='flag-5'>ebpf</b>的性能工具-bpftrace脚本语法

    基于ebpf的性能工具-bpftrace

    在前面我已经分享了关于ebpf入门的文章: 基于ubuntu22.04-深入浅出 eBPF 。 这篇文章介绍一个基于ebpf技术的强大工具--bpftrace。 在现代计算机系统中,了解系统的内部
    的头像 发表于 09-04 16:02 334次阅读
    基于<b class='flag-5'>ebpf</b>的性能工具-bpftrace

    如何利用网络解码矩阵实现高清视频播放?

    编解码参数,如分辨率、帧率、码率等,以保证视频质量和降低网络拥塞。 网络传输优化:选择合适的网络传输协议,如RTMP、HLS等,以优化视频传输的稳定性和效率。 硬件
    的头像 发表于 09-04 11:29 350次阅读
    如何<b class='flag-5'>利用</b><b class='flag-5'>网络</b>解码矩阵实现高清视频播放?

    eBPF的前世今生?eBPF在使用中遇到的问题有哪些?

    在介绍eBPF (Extended Berkeley Packet Filter)之前,我们先来了解一下它的前身-BPF (Berkeley Packet Filter)伯克利数据包过滤器。
    的头像 发表于 08-12 15:10 1118次阅读
    <b class='flag-5'>eBPF</b>的前世今生?<b class='flag-5'>eBPF</b>在使用中遇到的问题有哪些?

    基于 FPGA 的目标检测网络加速电路设计

    激活函数相比,当 ReLU6 函数的输入值大于等于 6 时 输出值恒为 6,可以使模型更快地收敛。同时网络采用大小为 2×2,步长也为 2 的最大池化 层(Max pooling)来降低运算量防止
    发表于 06-20 19:45

    eBPF,何以称得上是革命性的内核技术?

    。它提供了一种通用执行引擎,可以基于系统或程序事件高效安全地执行特定代码,就像在实时 (JIT) 编译器和验证引擎的帮助下进行本机编译一样。 如今,eBPF 被广泛用于各种场景:在现代数据中心和云原生环境中提供高性能网络和负载平衡,以低成本提取细粒度的安全可观测性数据,帮
    的头像 发表于 05-08 08:26 398次阅读
    <b class='flag-5'>eBPF</b>,何以称得上是革命性的内核技术?

    什么是eBPFeBPF为何备受追捧?

    用云杉网络 VP 向阳的话来说:“ eBPF 最重要(没有之一)的特点是安全性” 。他表示,以往必须编写内核模块才能做到的工作现在基本都能做到。
    的头像 发表于 05-06 11:41 1816次阅读