eBPF 如何塑造 Linux 和平台工程的未来

当Docker 于 2013 年突然出现时,Linux 容器似乎一夜成名。但容器(以及微服务和Kubernetes)的演变实际上是基于 Linux 操作系统中的内核原语而进行的,历时数十年。

Docker 使用这些原语(即 cgroups 和命名空间)作为构建块来创建一种轻量级、易于使用的软件打包格式。

Google 和其他公司已经使用 Linux 容器多年,但 Docker 让主流开发人员可以轻松访问它们。

这就是我们今天看到的 eBPF,另一种诞生于 Linux 内核原语的技术。

如今,每个主要的网络、可观察性和安全供应商都在声称提供“eBPF 驱动”的产品。

Cilium、Tetragon 和 Falco 等 eBPF 工具正在企业架构和云服务提供商产品中根深蒂固。

据其一位创建者称,这只是基于 eBPF 的突破的开始。

InfoWorld 采访了 eBPF 的联合创始人兼 Linux 内核的当前 eBPF 联合维护者 Daniel Borkmann,以了解有关该技术的起源、eBPF 为何成为编程和定制 Linux 内核的标准方法以及这对 Linux 和平台工程的未来意味着什么的更多信息。

从 Solaris 学生到 Linux 内核维护者

Daniel Borkmann 的 eBPF 之路始于对 Solaris 内部结构的探索,当时他所在大学的计算机科学课程仍在教授 Solaris。然而,一个主要障碍是缺乏源代码,无法看到“魔法发生的地方”。

Borkmann 发现操作系统课程中的理论非常有趣,但真正让他恍然大悟的是他深夜研究 Linux 内核源代码、Git 日志和邮件列表。他开始编写与内核交互的低级用户应用程序。

很快,Borkmann 就开始研究数据包过滤器、tcpdump 和 libpcap,以及数据包来来回回穿越不同层时网络堆栈的工作原理。他在业余时间编写了一个更高效的 tcpdump 克隆,并开始向 Linux 网络堆栈发送小代码改进。

在开始攻读硕士学位时,他最终获得​​了第一份有偿工作,为德国莱比锡的一家本地初创公司开发 Linux 内核代码。

2010 年,Borkmann 以“完全菜鸟”(他的话)的身份向 Linux 内核提交了他的第一个补丁,以扩展 netpoll,允许每个接口执行多个 rx_hooks,并意外引入了一个可能导致内核死锁的错误,该错误很快被另一位贡献者发现并修复。

但他迷上了 Linux 内核开发。他知道,Linux 内核开发是一个令人着迷的环境,这是他的使命。

Borkmann 搬到苏黎世,完成他的硕士论文,论文主题是为内核开发可组合网络堆栈。从 FreeBSD 的 netgraph 中汲取灵感,他的实验是尝试将网络块卸载到 FPGA 上,并构建可组合的数据包处理图。但在此过程中,他有时发现学术论文太枯燥,对现实世界的长期影响太小,他意识到全职为 Linux 内核做出贡献会更有回报。

他发现了一位名叫 Thomas Graf 的 Linux 贡献者(最终两人都成为 Cilium 的共同创建者),他的电子邮件带有瑞士域名 (.ch),于是自发地联系了他——并被邀请加入 Red Hat 的 Linux 内核网络团队。

如今,Borkmann 是全球 1% 的 Linux 内核贡献者之一。

重新思考 Linux 操作系统中的网络

eBPF 的起源故事实际上始于 2011 年,当时软件定义网络 (SDN) 正在蓬勃发展,Linux 的采用率也在激增。Linux 子系统需要跟上微服务架构和分布式应用程序的新范式,这些应用程序跨 Linux 机器集群运行,而不是在单个服务器和主机操作系统上运行。

Borkmann 在网络堆栈中从事内核开发的工作使他处于满足 SDN 和云原生网络要求的最前线。

Linux 需要更新的抽象,因为它的许多构建块都是 10 多年前设计的 — cgroups(CPU、内存处理)、命名空间(net、mount、pid)、SELinux、seccomp、Netfilter、Netlink、AppArmor、Auditd、Perf 等。

Borkmann 看到 netfilter 的 nftables 等技术被推为“下一代”Linux 网络,以及当时最先进的 SDN 项目 Open vSwitch (OVS)。他相信有更好的方法。

Linux 内核已经为跟上更高的网络速度而付出了巨大的努力,但并没有为编写新的自定义功能提供足够的灵活性。另一个限制是“绝不破坏用户空间”的规定。也就是说,Linux 内核必须继续支持在云原生应用程序出现之前开发的所有软件。不幸的是,这种“遗留包袱”将一些网络创新从内核转移到了用户空间。

简而言之,新的云操作模式带来了更多的自动化、流失和规模,以及更苛刻的网络性能要求。但 Linux 内核中的独立子系统没有在内核中推送、聚合和处理所有这些新云上下文的惯例。

在 Linux 编程中,数据包处理(解析、操作、过滤和转发)是“什么是可能的”的零基础关注点。这是内核开发人员在网络数据包通过堆栈时路由、控制和检查网络数据包的机制。数据包处理之于内核的网络堆栈,就如同化油器之于发动机,通量电容器之于 Doc 的 DeLorean。

应用程序开发人员大多在用户空间中编写应用程序,使用抽象来保护应用程序免受需要对内核进行的系统调用的影响。因此,当应用程序需要与硬件交互时(写入屏幕、写入文件、发送网络数据包),它必须向内核寻求帮助。用户空间无法直接执行此操作(出于各种原因,例如系统安全性)。内核提供用户空间应用程序与硬件之间的通用接口,并协调同时运行的多个用户空间进程。

在从虚拟化到容器的演进过程中,许多不同的数据包过滤方法争夺 Linux 内核的一席之地:iptables、nftables、OVS、Linux 流量控制 (TC) 等等。eBPF 凭借其表现力和验证程序的安全性(同时以原生性能执行程序)而成为首选方法。换句话说,eBPF 允许用户以这些替代方案无法实现的方式对内核进行编程,并且不会冒内核崩溃的风险。

更“可编程”的 Linux 内核

虽然 Borkmann 最初被 eBPF 为网络带来的灵活性和性能所吸引,但很明显,这项新技术的好处远远超出了网络范围。

一旦 eBPF 引入了这种可以立即构建和部署的基础功能,它就解决了一个巨大的问题。

您可以编写嵌入 eBPF 的编排程序,并部署它,无论底层内核版本是什么。而且,您不必向大型供应商支付大量资金来获得核心内核 ABI 稳定性,现在您只需使用 eBPF,而不需要模块来扩展内核以适应许多不同的用例。

eBPF 变成了一种通用汇编语言,允许用户在 Linux 内核中 加载并安全运行自定义程序,这是一种在运行时向操作系统添加各种功能的方法。它具有严格的类型,具有稳定的指令集,并且其扩展是向后兼容的。

将 eBPF 视为一种新型软件,它弥补了典型的单片内核和微内核之间的差距。它是来自可信用户空间的内核的安全扩展。eBPF 的优点在于它与常规内核代码一样快,因为 eBPF 不是沙盒,但验证程序可以完全理解该程序,以确定它在可信环境中运行是否安全,然后将其 JIT [即时编译] 为本机代码。

eBPF 不仅安全、快速,而且运行速度与本机速度相同。它还非常灵活,允许不同的用户以不同的方式使用它。“eBPF 的强大之处在于,只有当您作为用户有该用例或需要以某种方式处理某些事情时,您才可以从用户的角度启用代码。

它不会惩罚其他人。它不像内核中硬编码的东西,会让关键路径越来越慢——性能会受到千刀万剐的惩罚。

Cilium 的 Graf 表示:“在 eBPF 之前,大多数用户使用的是企业 Linux 发行版,或者只是运行设备上安装的任何内核版本。eBPF 从根本上改变了这种情况,因为有了运行时,任何想法都可以在几天内(而不是几年内)变成 eBPF 程序并在运行时加载。这意味着我们可以更好地重建一切。我们必须决定先重建什么。”

内核工程成为主流

和 Google Borg 以及其他诞生于超大规模企业的技术一样,eBPF 最初仅被少数拥有内核开发技能的软件工程公司采用。很少有开发人员具备进行内核工程和编写 eBPF 程序所需的低级 C 编程技能。

但如今,这少数专家编写的程序影响着数百万用户。eBPF 驱动的程序是负责网络、安全和可观察性的平台工程团队最令人兴奋的领域,许多使用这些程序的人不需要了解实现这些程序的底层 eBPF 抽象。

正如 Borkmann 在最近的 eBPF 研讨会主题演讲中指出的那样,“可以将其视为一场来自云原生的无声平台革命”。

以下是 eBPF 领域中众多应用程序的概览:

Cilium最初是基于 eBPF 的容器网络接口(CNI) 实现,用于在容器工作负载之间提供第 3 层和第 4 层连接,但后来逐渐发展成为大多数云服务提供商 Kubernetes 产品的实际网络层。

除其他功能外,Cilium 还为 Kubernetes pod 和外部服务之间的流量实现分布式负载平衡,并且能够完全取代 kube-proxy,使用 eBPF 中的高效哈希表实现几乎无限的扩展。

它还支持高级功能,如第 3 层到第 7 层策略实施、集成入口和出口网关、带宽管理、与 Envoy 结合的服务网格以及深度网络可见性。

Tetragon是另一个提供安全可观察性和运行时强制执行的 eBPF 程序。通过利用 eBPF 的低开销,Tetragon 允许平台团队将网络流和其他内核事件与 Kubernetes 对象(标签、pod、命名空间)绑定到非常具体的进程及其相关进程树。

在XZ Utils等软件供应链安全漏洞出现之后,Tetragon 是一个开源项目,旨在为平台团队提供更深入的方法来查找特定软件在其环境中的运行位置,并在内核级别采取特定的策略操作。

Pixie是一种可观察性工具,它使用 eBPF“自动捕获遥测数据,无需手动操作”。它已成为下一代应用程序性能管理和监控供应商的热门构建模块。

只需在 Google 上搜索“可观察性和 eBPF”,即可看到该技术正在多大程度上改变遥测数据的丰富性,而 eBPF 的性能正是实现这一改变的条件。

推断云原生系统的实时状态历来需要堆积监控数据,而这些数据必须在未来进行关联。将这种遥测数据收集更接近内核,可以实现更高的一致性和更低的资源使用率。

Katran是一个 C++ 库,它可以通过一种基于内核数据包处理的新方法挑战专有第 3 层和第 4 层负载均衡器的现状。并非每个人都可以创建 eBPF 程序,但正在创建的程序针对的是企业基础设施中相对停滞不前的领域,并且迫切需要对云原生用例进行现代化改造。

未来十年的基础设施软件将由能够使用 eBPF 的平台工程师和利用 eBPF 为更高级别平台创建正确抽象的项目来定义。

将云原生上下文推入内核是缺失的,而 eBPF 解决了这个问题。

本月,我们迎来了Kubernetes 十周年纪念日,但我们仍处于分布式应用程序、容器编排和平台工程的早期阶段。

很少有人可能直接在内核级别设计 eBPF,但数百万人将使用基于 eBPF 的程序。

如果您在大型公共云提供商平台上的 Kubernetes 上运行工作负载,那么您可能已经这样做了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361825.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机Java项目|基于SpringBoot的基于保密信息学科平台系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

acme.sh泛证书申请

说明: 1、想每个项目都接入域名+端口访问,所以通过acme.sh申请泛域名证书 2、阿里云域名解析,并且指定公网ip地址对应的公共Nginx服务 3、acme.sh证书只有3个月,所以要用shell自动续签证书 4、阿里云域名已解析,所以二级域名、三级域名能正常解析,如下图所示, 一、阿里云…

武汉星起航:跨境电商浪潮下,中国卖家扬帆出海,书写国际新篇章

随着全球化进程的加速和互联网技术的飞速发展,跨境出口电商模式已成为中国卖家海外拓展的重要渠道。这一模式不仅为商家带来了巨大的市场机遇,更为中国卖家在全球舞台上展示其独特魅力和竞争力提供了宝贵平台。武汉星起航将从多个维度探讨中国卖家海外发…

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…

LLM大模型算法学习资源持续整理

文章目录 waytoagiLLM101llm-coursellm-cookbook waytoagi 飞书文档写的AGI知识库。 https://www.waytoagi.com/ LLM101 karpathy更新中的大模型教程: https://github.com/karpathy/LLM101n llm-course Course to get into Large Language Models (LLMs) wi…

C++初学者指南第一步---12.引用

C初学者指南第一步—12.引用 文章目录 C初学者指南第一步---12.引用1. 功能(和限制)1.1 非常量引用1.2 常量引用1.3 auto引用 2.用法2.1 范围for循环中的引用2.2 常量引用的函数形参2.3 非常量引用的函数形参2.4 函数参数的选择:copy / const…

charles破解

一、Charles官网下载安装包二、安装charles三、charles破解 一、Charles官网下载安装包 根据自己电脑系统 官网下载即可。 链接: https://www.charlesproxy.com/download/latest-release/ 二、安装charles 点击下载的安装包,然后进行安装。 三、charles破解 打…

基于信息论的高动态范围图像评价算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于信息论的高动态范围图像评价算法matlab仿真,利用一种自然图像的概率模型对图像的熵与成像动态范围之间的关系进行了数值模拟,得到了具有普遍意义上…

如何制作自己的网站

制作自己的网站可以帮助个人或组织在互联网上展示自己的品牌、作品、产品或服务。随着技术的发展,现在制作网站变得越来越简单。下面是一个简单的步骤指南,帮助你制作自己的网站。 1. 确定你的网站需求和目标 在开始之前,你需要明确你的网站的…

国家自然科学基金标书大全(2002-2024)

数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…

群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)

介绍 石墨烯算法是一种新兴的优化算法,灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构,具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移,来求解复杂的优化问题 基本概念…

JavaEE之HTTP协议(1)_HTTP基础知识,HTTP 请求、响应格式,方法,状态码

一、HTTP协议 1.1 基本概念: HTTP全称超文本传输协议,是一种无状态的、应用层的协议,它基于请求/响应模型。客户端(通常是Web浏览器)通过发送HTTP请求到服务器来获取或发送信息,服务器则返回HTTP响应作为回应。HTTP协…

七天速通javaSE:第四天 递归算法

文章目录 前言一、递归的介绍二、递归模型(n!)1 阶乘的定义:2. 阶乘的递归代码实现3. 递推与回归的内部逻辑三、练习 前言 本文将学习递归算法。在计算机科学中,递归算法是一种将问题不断分解 为同一类子问题来解决问题的方法。递…

sd卡一插上就提示格式化是怎么回事?sd卡数据如何恢复?

sd卡一插上就提示格式化是怎么回事?里面的数据怎么办?下面小编总结了SD卡提示格式化的原因和对应解决办法分享给大家! SD卡好好的,为什么一插电脑上就提示需要格式化呢?当SD卡提示格式化时,可以考虑下面几类…

项目1111

中文显示姓名列和手机号 SELECT contact_name AS 姓名, contact_phone AS 手机号 FROM 2_公司id; 使用explain测试给出的查询语句,显示走了索引查询 EXPLAIN SELECT * FROM 7_订单数量 WHERE countid LIKE e%; 统计用户订单信息,查询所有用户的下单数量…

项目实战系列三: 家居购项目 第六部分

文章目录 🌈Ajax检验注册名🌈Ajax添加购物车🌈上传与更新家居图片🌈作业布置🍍会员登陆后不能访问后台管理🍍解决图片冗余问题🍍分页导航完善 🌈Ajax检验注册名 需求分析 注册会员时…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来,就手动修改下.git/config文件,将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…

苹果Mac安装adobe软件报错“installer file may be damaged”解决方案

最近Mac电脑系统的有小伙伴在安装PS、AI、AE、PR等软件,出现了一个错误,让人头疼不已,苦苦找寻,也找不到完美的解决方法。让我们来一起看看吧! 很多小伙伴都喜欢苹果电脑,但是在安装外来软件时,…

浏览器扩展V3开发系列之 chrome.cookies 的用法和案例

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.cookies API能够让我们在扩展程序中去操作浏览器的cookies。 在使用 chrome.cookies 要先声明…

电脑突然提示dll文件丢失,怎么选择正确的恢复方法?

电脑突然提示dll文件丢失?其实当你的电脑使用久了,出现这种dll文件丢失是非常的正常的,毕竟你总会有不恰当的操作吧?这些操作都是会导致dll文件丢失的。丢失了,我们直接进行相关的修复就好了,还是比较简单的…