mikeroyal/eBPF-Guide

GitHub: mikeroyal/eBPF-Guide

一份全面梳理 eBPF 生态工具、开发库和学习资源的入门指南,帮助开发者快速掌握内核级可观测性、安全和网络技术。

Stars: 636 | Forks: 64


eBPF Guide

followers ![维护状态](https://img.shields.io/maintenance/yes/2024?style=for-the-badge) ![最后提交](https://img.shields.io/github/last-commit/mikeroyal/ebpf-guide?style=for-the-badge) #### 一份涵盖 eBPF 的指南,包括应用程序、库和工具,将使你成为一名更优秀、更高效的 eBPF 开发者。 **注意:你可以使用这个方便的扩展 [Markdown PDF](https://marketplace.visualstudio.com/items?itemName=yzane.markdown-pdf) 在 [VSCode](https://code.visualstudio.com/) 中轻松将此 markdown 文件转换为 PDF。**


# 目录 1. [eBPF 入门](https://github.com/mikeroyal/eBPF-Guide#getting-started-with-eBPF) - [eBPF 工具与库](https://github.com/mikeroyal/eBPF-Guide#ebpf-tools--libraries) - [书籍与教程](https://github.com/mikeroyal/eBPF-Guide#books--tutorials) 2. [LLVM 开发](https://github.com/mikeroyal/eBPF-Guide#llvm-development) 3. [Go 开发](https://github.com/mikeroyal/eBPF-Guide#go-development) 4. [C++ 开发](https://github.com/mikeroyal/eBPF-Guide#cc-development) 5. [Rust 开发](https://github.com/mikeroyal/eBPF-Guide#rust-development) 6. [网络](https://github.com/mikeroyal/eBPF-Guide#networking) 7. [Kubernetes](https://github.com/mikeroyal/eBPF-Guide#kubernetes) 8. [数据库](https://github.com/mikeroyal/eBPF-Guide#databases) # eBPF 入门 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents) **eBPF 公司** * [Isovalent](https://isovalent.com/) 是一家由 [Cilium](https://cilium.io/) 和 [eBPF](https://ebpf.io/) 的创建者创立的公司。他们构建开源软件和企业解决方案,解决现代云原生基础设施的网络、安全和可观测性需求。 ## eBPF 工具与库 [eBPF](https://ebpf.io/) 是一项可以在 Linux 内核中运行沙盒程序的技术,无需更改内核源代码或加载内核模块。通过使 Linux 内核可编程,基础设施软件可以利用现有层,使其更加智能和功能丰富,而无需继续向系统增加额外的复杂性层。


**eBPF 架构概览。来源:[eBPF.io](https://ebpf.io/)** [eBPF for Windows](https://github.com/microsoft/ebpf-for-windows) 是一个在 Windows 之上运行的 eBPF 实现。eBPF 是一项众所周知的技术,用于提供可编程性和敏捷性,特别是用于扩展操作系统内核,用于 DoS 防护和可观测性等用例。[使用 eBPF-for-Windows 的 Cilium L4 负载均衡器](https://github.com/microsoft/ebpf-for-windows-demo/blob/main/cilium/load_balancer/docs/CiliumL4LBSetup.md)


**Windows 版 eBPF 架构概览。来源:[Microsoft](https://cloudblogs.microsoft.com/opensource/2021/05/10/making-ebpf-work-on-windows/)** [XDP(eXpress Data Path)](https://www.tigera.io/learn/guides/ebpf/) 是一种技术,允许开发者将 eBPF 程序附加到低级钩子,这些钩子由 Linux 内核(自 4.8 版本起)中的网络设备驱动程序实现,以及在设备驱动程序之后运行的通用钩子。XDP 可用于在 eBPF 架构中实现高性能数据包处理,主要使用内核旁路。 [AF_XDP](https://01.org/linuxgraphics/gfx-docs/drm/networking/af_xdp.html) 是一个针对高性能数据包处理进行优化的地址族。 [BPF 编译器集合 (BCC)](https://github.com/iovisor/bcc) 是一个用于创建高效内核跟踪和操作程序的工具包,并包含几个有用的工具和示例。它利用了扩展 BPF(Berkeley Packet Filters),正式名称为 eBPF,这是最初在 Linux 3.15 中添加的新功能。不过,BCC 使用的大部分功能需要 Linux 4.1 及更高版本。


**BCC 性能工具。来源:[Brendan Gregg](https://github.com/iovisor/bcc/blob/master/images/bcc_tracing_tools_2019.png)** [Bpftrace](https://github.com/iovisor/bpftrace) 是一种用于 Linux eBPF 的高级跟踪语言。其语言受 awk 和 C 以及 DTrace 和 SystemTap 等前辈跟踪器的启发。bpftrace 使用 LLVM 作为后端将脚本编译为 eBPF 字节码,并使用 BCC 作为库与 Linux eBPF 子系统以及现有的 Linux 跟踪功能和附加点进行交互。 [Cilium](https://github.com/cilium/cilium) 是一个开源项目,提供基于 eBPF 的网络、安全和可观测性。它从头开始专门设计,旨在将 eBPF 的优势带入 Kubernetes 世界,并解决容器工作负载新的可扩展性、安全性和可见性要求。 [Falco](https://github.com/falcosecurity/falco) 是一个行为活动监视器,旨在检测应用程序中的异常活动。Falco 借助 eBPF 在 Linux 内核层审计系统。它使用其他输入流(如容器运行时指标和 Kubernetes 指标)丰富收集的数据,并允许持续监视和检测容器、应用程序、主机和网络活动。 [Katran](https://github.com/facebookincubator/katran) 是一个 C++ 库和 eBPF 程序,用于构建高性能第 4 层负载均衡转发平面。Katran 利用 Linux 内核的 XDP 基础设施提供内核内的快速数据包处理设施。其性能随网卡接收队列的数量线性扩展,并使用对 RSS 友好的封装转发到 L7 负载均衡器。 [Hubble](https://github.com/cilium/hubble) 是一个用于云原生工作负载的完全分布式网络和安全可观测性平台。它建立在 Cilium 和 eBPF 之上,以完全透明的方式深入了解服务的通信和行为以及网络基础设施。 [Pixie](https://docs.pixielabs.ai/) 是一个用于 Kubernetes 应用程序的开源可观测性工具。它用于查看集群的高级状态(服务映射、集群资源、应用程序流量),并深入查看更详细的视图(Pod 状态、火焰图、单个完整正文应用程序请求)。 [BumbleBee](https://github.com/solo-io/bumblebee) 是一个帮助使用 [OCI 镜像](https://opencontainers.org/) 构建、运行和分发 eBPF 程序的工具。它允许你专注于编写 eBPF 代码,同时处理用户空间组件,自动将你的数据公开为指标或日志。 [Sysmon for Linux](https://github.com/Sysinternals/SysmonForLinux) 是一个监视和记录系统活动的工具,包括进程生命周期、网络连接、文件系统写入等。Sysmon 在重启后依然工作,并使用高级过滤来帮助识别恶意活动以及入侵者和恶意软件在你网络上的操作方式。 [KubeArmor](https://kubearmor.io/) 是一个云原生运行时安全执行系统,在系统级别限制 Pod、容器和节点(VM)的行为(如进程执行、文件访问和网络操作)。它利用 [Linux 安全模块 (LSM)](https://www.kernel.org/doc/html/latest/admin-guide/LSM/index.html) 如 [AppArmor](https://www.apparmor.net/)、[SELinux](https://selinuxproject.org/) 或 [BPF-LSM](https://docs.kernel.org/bpf/prog_lsm.html) 来执行用户指定的策略。 [Caretta](https://github.com/groundcover-com/caretta) 是一个轻量级、独立的工具,可即时创建集群中运行服务的可视化网络映射。它利用 eBPF 高效映射 K8s 集群中的所有服务网络交互,并使用 Grafana 查询和可视化收集的数据。 [dae](https://github.com/daeuniverse/dae) 是一个基于 eBPF 的 Linux 高性能透明代理解决方案。 [eunomia-bpf](https://eunomia.dev/) 是一个编译器和运行时框架,帮助你使用 JSON 和 Webassembly OCI 镜像更轻松地构建、分发和运行 CO-RE eBPF 程序。 [Kindling](https://github.com/kindlingproject/kindling) 是一个基于 eBPF 的云原生监视工具,旨在帮助用户从内核到代码堆栈了解应用程序行为。通过跟踪分析,我们希望用户能轻松了解应用程序的行为并在几秒钟内找到根本原因。它还提供了一种简单的方法来获取 Kubernetes 环境中网络流的概览,以及许多内置的网络监视仪表板,如 TCP 重传、DNS、吞吐量和 TPS。 [Odigos](https://odigos.io/) 是一个无需代码更改即可进行分布式跟踪的工具。它使用 OpenTelemetry 和 eBPF 即时监视任何应用程序。 [SSHLog](http://www.sshlog.com/) 是一个用 C++ 和 Python 编写的 Linux 守护程序,通过 eBPF 被动监视 OpenSSH 服务器。它是可配置的,任何功能组合都可以启用、禁用或自定义。它与现有的 OpenSSH 服务器进程一起工作,不需要替代的 SSH 守护程序。只需安装 sshlog 包即可开始监视 SSH。 [L3AFD](https://l3af.io/) 是 L3AF 控制平面的主要组件。它是一个编排和管理多个 eBPF 程序的守护程序。L3AFD 在用户希望运行 eBPF 程序的每个节点上运行。L3AFD 读取配置数据并管理节点上运行的 eBPF 程序的执行和监视。 [Wachy](https://github.com/rubrikinc/wachy) 是一个为交互式基于 eBPF 的用户空间性能调试提供 UI 的工具。 [Merbridge](https://merbridge.io/) 是一个使用 eBPF 加速你的服务网格的工具,就像穿过爱因斯坦-罗森桥一样。 [DeepFlow](https://github.com/deepflowys/deepflow) 是一个面向云原生开发者的高度自动化可观测性平台。利用 eBPF、WASM 和 OpenTelemetry 等新技术,DeepFlow 创新性地实现了 AutoTracing、AutoMetrics、AutoTagging 和 SmartEncoding 等核心机制,极大地避免了代码插桩,显著降低了后端数据仓库的资源开销。 [Parca](https://parca.dev/) 是一个用于持续分析 CPU 和内存使用情况的工具,可深入到行号并贯穿时间。节省基础设施成本,提高性能,并增加可靠性。 [loxilb](https://www.loxilb.io/) 是一个工具,使用 eBPF 作为其核心引擎为 K8s 提供服务类型的外部负载均衡器。它支持 Edge|5G|IoT|XaaS 应用。 [kube-loxilb](https://github.com/loxilb-io/kube-loxilb) 是 loxilb 的 kubernetes 服务负载均衡器规范的实现,包括对负载均衡器类、IPAM(共享或独占)等的支持。 [loxi-ccm](https://github.com/loxilb-io/loxi-ccm) 是一个提供 kubernetes 负载均衡器规范实现的工具,但它作为云提供商的一部分运行,并作为其一部分提供负载均衡器生命周期管理。 [loxicmd](https://github.com/loxilb-io/loxicmd) 是 loxilb 的命令行工具。它相当于 loxilb 的 "kubectl"。 [Kubectl-trace](https://github.com/iovisor/kubectl-trace) 是一个 kubectl 插件,允许在 Kubernetes 集群中调度 bpftrace(8) 程序的执行。kubectl-trace 不需要直接在 Kubernetes 集群上安装任何组件即可执行 bpftrace 程序。当指向一个集群时,它会调度一个名为 trace-runner 的临时作业来执行 bpftrace。 [Ply](https://github.com/iovisor/ply) 是一个基于 eBPF 构建的 Linux 动态跟踪器。它的设计考虑了嵌入式系统,用 C 编写,运行 ply 所需的只是 libc 和支持 eBPF 的现代 Linux 内核,这意味着它不依赖 LLVM 进行程序生成。它具有类似 C 的脚本编写语法,深受 awk(1) 和 dtrace(1) 的启发。 [Tracee](https://github.com/aquasecurity/tracee) 是一个用于 Linux 的运行时安全和取证工具。它使用 Linux eBPF 技术在运行时跟踪你的系统和应用程序,并分析收集的事件以检测可疑的行为模式。 [bpfcov](https://github.com/elastic/bpfcov) 是针对实际运行在 Linux 内核中的 eBPF 程序的基于源代码的覆盖率工具。 [eCapture](https://github.com/ehids/ecapture) 是一个使用 eBPF 无需 CA 证书即可捕获 SSL/TLS 文本内容的工具。 [Tetragon](https://github.com/cilium/tetragon) 是一个基于 eBPF 的安全可观测性和运行时执行工具。 [SkyWalking](https://github.com/apache/skywalking) 是一个开源 APM 系统,包括对云原生架构中分布式系统的监视、跟踪、诊断功能。 [Skydive](https://github.com/skydive-project/skydive) 是一个开源实时网络拓扑和协议分析器。它旨在提供一种全面的方式来了解网络基础设施中发生的事情。 [Linux 内核](https://www.kernel.org/) 包含运行 eBPF 程序所需的 eBPF 运行时。它实现了 bpf(2) 系统调用,用于与程序、映射、BTF 以及可以执行 eBPF 程序的各种附加点进行交互。内核包含一个 eBPF 验证器以检查程序的安全性,以及一个 JIT 编译器将程序翻译为本地机器码。用户空间工具(如 bpftool 和 libbpf)也作为上游内核的一部分进行维护。 [Landlock LSM(Linux 安全模块)](https://www.kernel.org/doc/html/latest/security/landlock.html) 是一个创建作用域访问控制(沙箱)的框架。Landlock 设计为可供非特权进程使用,同时遵循其他访问控制机制(DAC、LSM 等)强制执行的系统安全策略。 [LLVM 编译器](https://llvm.org/) 基础设施包含将类 C 语法编写的程序翻译为 eBPF 指令所需的 eBPF 后端。LLVM 生成 eBPF ELF 文件,其中包含程序代码、映射描述、重定位信息和 BTF 元数据。这些 ELF 文件包含 eBPF 加载器(如 libbpf)准备并将程序加载到 Linux 内核所需的所有必要信息。 [Gobpf](https://github.com/iovisor/gobpf) 是一个基于 Go库,为 BCC 框架提供 Go 绑定以及从 ELF 文件加载和使用 eBPF 程序的低级例程。 [rbpf](https://github.com/qmonnet/rbpf) 是一个用于 eBPF 程序的 Rust 虚拟机和 JIT 编译器。 [Libbpfgo](https://github.com/aquasecurity/libbpfgo) 是 libbpf 的 Go 封装。它支持 BPF CO-RE,其目标是成为 libbpf API 的完整实现。它使用 CGo 调用链接版本的 libbpf。 [Libbpf](https://github.com/libbpf/libbpf) 是一个基于 C/C++ 的库,作为上游 Linux 内核的一部分进行维护。它包含一个 eBPF 加载器,负责处理 LLVM 生成的 eBPF ELF 文件以加载到内核中。libbpf 在功能和复杂性方面得到了重大提升,并缩小了与 BCC 作为库的许多现有差距。它还支持 BCC 中不可用的重要功能,如全局变量和 BPF 骨架。 [Libbpf-rs](https://github.com/libbpf/libbpf-rs) 是一个安全、惯用且固执己见的 Rust libbpf 封装 API。libbpf-rs 与 libbpf-cargo(libbpf cargo 插件)一起允许编写“一次编译,到处运行”(CO-RE)eBPF 程序。 [Redbpf](https://github.com/redsift/redbpf) 是一个 Rust eBPF 工具链,包含一组用于处理 BPF/eBPF 程序的 Rust 库。 [redcanary-ebpf-sensor](https://github.com/redcanaryco/redcanary-ebpf-sensor) - 一组从 Linux 内核收集安全相关事件数据的 BPF 程序。BPF 程序被组合成一个单独的 ELF 文件,根据运行的操作系统和内核版本,可以从中选择性地加载单个探针。 [bpflock - 锁定 Linux 机器](https://github.com/linux-lock/bpflock) 是一个用于锁定和审计 Linux 机器的 eBPF 驱动安全工具。 [coroot-node-agent](https://github.com/coroot/coroot-node-agent) 是一个基于 eBPF 的 Prometheus 导出器,收集全面的容器指标,如容器到容器的 TCP 连接、网络延迟、CPU 延迟核算、日志摘要、云实例元数据等。 [Kernel-collector](https://github.com/netdata/kernel-collector) 是由 Netdata 开发的 Linux 内核 eBPF 收集器。 [socket-connect-bpf](https://github.com/p-/socket-connect-bpf/) 是一个 BPF/eBPF Linux 命令行实用程序,将有关每个建立新(网络)连接的应用程序的人类可读信息写入标准输出。 [Polycube](https://github.com/polycube-network/polycube) 是一个基于 eBPF/XDP 的软件框架,用于在 Linux 内核中运行快速网络服务(如网桥、路由器、防火墙等)。Polycube 服务称为 cubes,可以组合构建任意服务链,并为命名空间、容器、虚拟机和物理主机提供自定义网络连接。 ### 书籍与教程 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents) - [BPF 性能工具(书籍),作者 Brendan Gregg](https://www.brendangregg.com/bpf-performance-tools-book.html)。**书籍的 [GitHub 仓库](https://github.com/brendangregg/bpf-perf-tools-book)**。 - [系统性能:企业与云,第 2 版 (2020),作者 Brendan Gregg](https://www.brendangregg.com/systems-performance-2nd-edition-book.html) - [eBPF 安全可观测性,作者 Jed Salazar & Natalia Reka Ivanko](https://www.oreilly.com/library/view/security-observability-with/9781492096719/) - [什么是 eBPF?作者 Liz Rice](https://www.oreilly.com/library/view/what-is-ebpf/9781492097266/) - [eBPF 初学者指南,作者 Liz Rice](https://github.com/lizrice/ebpf-beginners) - [eBPF - 从程序员的角度,作者 Niclas Hedam (PDF)](https://hed.am/papers/2021-EBPF.pdf) - [学习 eBPF 跟踪:教程和示例,作者 Brendan Gregg](https://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html) - [eBPF 指令集 — Linux 内核文档](https://www.kernel.org/doc/html/latest/bpf/instruction-set.html) - [我们如何在 Magic Firewall 中使用 eBPF 构建可编程数据包过滤 | Cloudflare](https://blog.cloudflare.com/programmable-packet-filtering-with-magic-firewall/) - [使用 LLVM 进行 eBPF 汇编,作者 Quentin Monnet](https://qmonnet.github.io/whirl-offload/2020/04/12/llvm-ebpf-asm/) # LLVM 开发 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)


## LLVM 学习资源 [LLVM](https://github.com/llvm/) 是一个库,包含模块化/可重用的编译器和工具链组件(汇编器、编译器和调试器)。通过这些组件,LLVM 可以用作编译器框架,提供前端(解析器和词法分析器)和后端(将 LLVM 的表示转换为实际机器代码的代码)。 [Clang](https://clang.llvm.org/) 是 LLVM 项目中 C 语言家族(C、C++、Objective C/C++、OpenCL、CUDA 和 RenderScript)的语言前端和工具基础设施。 [LLVM 项目 GitHub](https://github.com/llvm/llvm-project//) [LLVM 文档](https://llvm.org/docs/index.html) [LLVM 讨论论坛](https://llvm.discourse.group/) [LLVM | Apple 开发者论坛](https://developer.apple.com/forums/tags/llvm/) [为 LLVM 做贡献](https://llvm.org/docs/Contributing.html) [LLVM 入门](https://llvm.org/docs/GettingStartedTutorials.html) [Clang 入门](https://clang.llvm.org/get_started.html) [如何为 LLVM 设置 Clang 工具](https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) [在 Visual Studio 中使用 Clang-Tidy](https://docs.microsoft.com/en-us/cpp/code-quality/clang-tidy) [在 macOS 上为 Clang/LLVM 配置 VS Code](https://code.visualstudio.com/docs/cpp/config-clang-mac) ## LLVM 工具、库和框架 [Visual Studio Code](https://code.visualstudio.com/) 是一款重新定义并优化用于构建和调试现代 Web 和云应用程序的代码编辑器。 [Code Server](https://coder.com/) 是一个允许你在任何机器上运行 [VS Code](https://code.visualstudio.com/) 并在浏览器中访问它的工具。 [Clang-Format](https://marketplace.visualstudio.com/items?itemName=xaver.clang-format) 是一个用于格式化 C/C++/Java/JavaScript/Objective-C/Objective-C++/Protobuf 代码的工具。 [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/) 是一个基于 clang 的 C++ “linter” 工具。其目的是提供一个可扩展的框架,用于诊断和修复典型的编程错误,如样式违规、接口误用或可以通过静态分析推导出的错误。clang-tidy 是模块化的,并为编写新的检查提供了方便的接口。 [Clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) 是一个 Visual Studio Code 扩展,使用 [clangd](https://clangd.llvm.org/) 为 VS Code 提供 C/C++ 语言 IDE 功能。 [LLD](https://lld.llvm.org/) 是 LLVM 项目中的一个链接器,它是系统链接器的直接替代品,运行速度比它们快得多。它还提供对工具链开发者有用的功能。该链接器按降序支持 ELF (Unix)、PE/COFF (Windows)、Mach-O (macOS) 和 WebAssembly。 [TinyGo](https://tinygo.org/) 是一个 Go 编译器(基于 LLVM),旨在用于微控制器、WebAssembly (Wasm) 和命令行工具等小型场所。 [FileCheck](https://llvm.org/docs/CommandGuide/FileCheck.html) 是一个灵活的模式匹配文件验证器。 [tblgen](https://llvm.org/docs/CommandGuide/tblgen.html) 是一种描述到 C++ 代码的工具。 [clang-tblgen](https://llvm.org/docs/CommandGuide/clang-tblgen.html) 是一种用于 Clang 的描述到 C++ 代码的工具。 [lldb-tblgen](https://llvm.org/docs/CommandGuide/lldb-tblgen.html) 是一种用于 LLDB 的描述到 C++ 代码的工具。 [llvm-tblgen](https://llvm.org/docs/CommandGuide/llvm-tblgen.html) 是一种用于 LLVM 的目标描述到 C++ 代码的工具。 [mlir-tblgen](https://llvm.org/docs/CommandGuide/mlir-tblgen.html) 是一种用于 MLIR 的描述到 C++ 代码的工具。 [lit](https://llvm.org/docs/CommandGuide/lit.html) 是一个 LLVM 集成测试器。 [llvm-exegesis](https://llvm.org/docs/CommandGuide/llvm-exegesis.html) 是一个 LLVM 机器指令基准测试工具。 [llvm-locstats](https://llvm.org/docs/CommandGuide/llvm-locstats.html) 是一个计算 DWARF 调试位置统计信息的工具。 [llvm-pdbutil](https://llvm.org/docs/CommandGuide/llvm-pdbutil.html) 是一个 PDB 文件取证和诊断工具。 [llvm-profgen](https://llvm.org/docs/CommandGuide/llvm-profgen.html) 是一个 LLVM SPGO 配置文件生成工具 [bugpoint](https://llvm.org/docs/CommandGuide/bugpoint.html) 是一个自动测试用例缩减工具。 [llvm-extract](https://llvm.org/docs/CommandGuide/llvm-extract.html) 是一个从 LLVM 模块中提取函数的工具。 [llvm-bcanalyzer](https://llvm.org/docs/CommandGuide/llvm-bcanalyzer.html) 是一个 LLVM 位码分析器。 [llvm-addr2line](https://llvm.org/docs/CommandGuide/llvm-addr2line.html) 是 addr2line 的直接替代品。 [llvm-ar](https://llvm.org/docs/CommandGuide/llvm-ar.html) 是一个 LLVM 存档器。 [llvm-cxxfilt](https://llvm.org/docs/CommandGuide/llvm-cxxfilt.html) 是一个 LLVM 符号名称解构器。 [llvm-install-name-tool](https://llvm.org/docs/CommandGuide/llvm-install-name-tool.html) 是一个用于操作安装名称和 rpath 的 LLVM 工具。 [llvm-nm](https://llvm.org/docs/CommandGuide/llvm-nm.html) 是一个列出 LLVM 位码和目标文件符号表的工具。 [llvm-objcopy](https://llvm.org/docs/CommandGuide/llvm-objcopy.html) 是一个目标文件复制和编辑工具。 [llvm-objdump](https://llvm.org/docs/CommandGuide/llvm-objdump.html) 是一个 LLVM 的目标文件转储器。 [llvm-ranlib](https://llvm.org/docs/CommandGuide/llvm-ranlib.html) 是一个生成存档索引的工具。 [llvm-readelf](https://llvm.org/docs/CommandGuide/llvm-readelf.html) 是一个 GNU 风格的 LLVM 对象读取器。 [llvm-size](https://llvm.org/docs/CommandGuide/llvm-size.html) 是一个打印大小信息的工具。 [llvm-strings](https://llvm.org/docs/CommandGuide/llvm-strings.html) 是一个打印字符串的工具。 [llvm-strip](https://llvm.org/docs/CommandGuide/llvm-strip.html) 是一个目标文件剥离工具。 # Go 开发 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)


## Go 学习资源 [Go](https://golang.org/) 是一种开源编程语言,可以轻松构建简单、可靠和高效的软件。 [Golang 贡献指南](https://golang.org/doc/contribute.html) [Google 开发者培训](https://developers.google.com/training/) [Google 开发者认证](https://developers.google.com/certification/) [Uber 的 Go 风格指南](https://github.com/uber-go/guide/blob/master/style.md) [GitLab 的 Go 标准和风格指南](https://docs.gitlab.com/ee/development/go_guide/) [高效 Go](https://golang.org/doc/effective_go.html) [Udemy 上的 Go:完整开发者指南](https://www.udemy.com/course/go-the-complete-developers-guide/) [Coursera 上的 Go 入门](https://www.coursera.org/learn/golang-getting-started) [Coursera 上的 Google Go 编程](https://www.coursera.org/specializations/google-golang) [Pluralsight 上的 Go 基础学习](https://www.pluralsight.com/courses/go-fundamentals) [Codecademy 上的 Go 学习](https://www.codecademy.com/learn/learn-go) ## Go 工具和框架 [golang tools](https://pkg.go.dev/golang.org/x/tools) 包含支持 Go 编程语言的各种包和工具的源代码。 [Visual Studio Code 中的 Go](https://code.visualstudio.com/docs/languages/go) 是一个扩展,为你提供语言功能,如 IntelliSense、代码导航、符号搜索、括号匹配、片段等,这些将帮助你在 Golang 开发中。 [Traefik](https://github.com/traefik/traefik) 是一个现代 HTTP 反向代理和负载均衡器,使部署微服务变得容易。Traefik 与你现有的基础设施组件(Docker、Swarm mode、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS 等)集成,并自动动态配置自己。将 Traefik 指向你的编排器应该是你唯一需要的配置步骤。 [Gitea](https://github.com/go-gitea/gitea) 是一杯茶般的 Git,无痛自托管 git 服务。使用 Go,这可以通过 Go 支持的所有平台(包括 x86、amd64、ARM 和 PowerPC 架构上的 Linux、macOS 和 Windows)上的独立二进制分发来完成。 [OpenFaaS](https://github.com/openfaas/faas) 是简单的无服务器函数。它使开发者可以轻松地将事件驱动函数和微服务部署到 Kubernetes,而无需重复的样板编码。将你的代码或现有二进制文件打包在 Docker 镜像中,以获得具有自动缩放和指标的高度可扩展端点。 [micro](https://github.com/zyedidia/micro) 是一个基于终端的文本编辑器,旨在易于使用和直观,同时也利用现代终端的功能。顾名思义,micro 旨在成为 nano 编辑器的某种继任者,易于安装和使用。它力求成为喜欢在终端工作或经常通过 SSH 编辑文件的人的全职编辑器。 [Gravitational Teleport](https://github.com/gravitational/teleport) 是一个现代安全网关,用于通过浏览器中的 SSH 或 SSH-over-HTTPS 远程访问 Linux 服务器集群或 Kubernetes 集群。 [NATS](https://nats.io/) 是一个用于数字系统、服务和设备的简单、安全和高性能的通信系统。NATS 是云原生计算基金会 (CNCF) 的一部分。NATS 拥有超过 30 种客户端语言实现,其服务器可以在本地、云中、边缘甚至在 Raspberry Pi 上运行。NATS 可以保护和简化现代分布式系统的设计和操作。 [Act](https://github.com/nektos/act) 是一个 GO 程序,允许你在本地运行 GitHub Actions。 [Fiber](https://gofiber.io/) 是一个受 [Express](https://github.com/expressjs/express) 启发的 Web 框架,构建在 [Fasthttp](https://github.com/valyala/fasthttp) 之上,这是 Go 最快的 HTTP 引擎。旨在以零内存分配和性能为重心,简化快速开发。 [Glide](https://github.com/Masterminds/glide) 是 Golang 的供应商包管理器。 BadgerDB](https://github.com/dgraph-io/badger) 是一个用纯 Go 编写的可嵌入、持久和快速的键值 (KV) 数据库。它是 [Dgraph](https://dgraph.io/) 的底层数据库,这是一个快速、分布式图数据库。它旨在成为非基于 Go 的键值存储(如 RocksDB)的高性能替代品。 [Go kit](https://github.com/go-kit/kit) 是一个用于在 Go 中构建微服务(或优雅单体)的编程工具包。我们解决分布式系统和应用程序架构中的常见问题,以便你可以专注于交付业务价值。 [Codis](https://github.com/CodisLabs/codis) 是一个用 Go 编写的基于代理的高性能 Redis 集群解决方案。 [zap](https://github.com/uber-go/zap) 是 Go 中极快、结构化、分级的日志记录。 [HttpRouter](https://github.com/julienschmidt/httprouter) 是一个用于 Go 的轻量级高性能 HTTP 请求路由器(也称为多路复用器或简称 mux)。 [Gorilla WebSocket](https://github.com/gorilla/websocket) 是 WebSocket 协议的 Go 实现。 [Delve](https://github.com/go-delve/delve) 是 Go 编程语言的调试器。 [GORM](https://github.com/go-gorm/gorm) 是一个极好的 Golang ORM 库,旨在对开发者友好。 [Go Patterns](https://github.com/tmrts/go-patterns) 是 Go 语言惯用设计和应用程序模式的精选集合。 # C/C++ 开发 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)


## C/C++ 学习资源 [C++](https://www.cplusplus.com/doc/tutorial/) 是一种跨平台语言,可用于构建由 Bjarne Stroustrup 开发的高性能应用程序,作为 C 语言的扩展。 [C](https://www.iso.org/standard/74528.html) 是一种通用的、高级语言,最初由 Dennis M. Ritchie 在 Bell Labs 开发用于开发 UNIX 操作系统。它支持结构化编程、词法变量作用域和递归,具有静态类型系统。C 还提供了有效映射到典型机器指令的构造,这使其成为当今使用最广泛的编程语言之一。 [嵌入式 C](https://en.wikipedia.org/wiki/Embedded_C) 是 [C 标准委员会](https://isocpp.org/std/the-committee) 为解决不同 [嵌入式系统](https://en.wikipedia.org/wiki/Embedded_system) 的 C 扩展之间存在的问题而为 C 编程语言制定的一组语言扩展。这些扩展有助于增强微处理器功能,如定点算术、多个不同的内存库和基本 I/O 操作。这使得嵌入式 C 成为世界上最流行的嵌入式软件语言。 [JetBrains 的 C & C++ 开发者工具](https://www.jetbrains.com/cpp/) [cppreference.com 上的开源 C++ 库](https://en.cppreference.com/w/cpp/links/libs) [C++ 图形库](https://cpp.libhunt.com/libs/graphics) [MATLAB 中的 C++ 库](https://www.mathworks.com/help/matlab/call-cpp-library-functions.html) [C++ 工具和库文章](https://www.cplusplus.com/articles/tools/) [Google C++ 风格指南](https://google.github.io/styleguide/cppguide.html) [Google 开发者上的 C++ 教育课程介绍](https://developers.google.com/edu/c++/) [Fuchsia 的 C++ 风格指南](https://fuchsia.dev/fuchsia-src/development/languages/c-cpp/cpp-style) [OpenTitan 的 C 和 C++ 编码风格指南](https://docs.opentitan.org/doc/rm/c_cpp_coding_style/) [Chromium C++ 风格指南](https://chromium.googlesource.com/chromium/src/+/master/styleguide/c++/c++.md) [C++ 核心指南](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md) [ROS 的 C++ 风格指南](http://wiki.ros.org/CppStyleGuide) [学习 C++](https://www.learncpp.com/) [学习 C:交互式 C 教程](https://www.learn-c.org/) [C++ 学院](https://cppinstitute.org/free-c-and-c-courses) [LinkedIn Learning 上的 C++ 在线培训课程](https://www.linkedin.com/learning/topics/c-plus-plus) [W3Schools 上的 C++ 教程](https://www.w3schools.com/cpp/default.asp) [edX 上的 C 编程在线课程学习](https://www.edx.org/learn/c-programming) [edX 上的 C++ 在线课程学习](https://www.edx.org/learn/c-plus-plus) [Codecademy 上的 C++ 学习](https://www.codecademy.com/learn/learn-c-plus-plus) [Coursera 上的人人编程:C 和 C++ 课程](https://www.coursera.org/specializations/coding-for-everyone) [Coursera 上的面向 C 程序员的 C++](https://www.coursera.org/learn/c-plus-plus-a) [Coursera 上的顶级 C 课程](https://www.coursera.org/courses?query=c%20programming) [Udemy 上的 C++ 在线课程](https://www.udemy.com/topic/c-plus-plus/) [Udemy 上的顶级 C 课程](https://www.udemy.com/topic/c-programming/) [Udemy 上的初学者嵌入式 C 编程基础](https://www.udemy.com/course/embedded-c-programming-for-embedded-systems/) [Udacity 上的程序员 C++ 课程](https://www.udacity.com/course/c-for-programmers--ud210) [Pluralsight 上的 C++ 基础课程](https://www.pluralsight.com/courses/learn-program-cplusplus) [MIT 免费在线课程材料上的 C++ 介绍](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-096-introduction-to-c-january-iap-2011/) [程序员 C++ 介绍 | Harvard ](https://online-learning.harvard.edu/course/introduction-c-programmers) [在线 C 课程 | Harvard University](https://online-learning.harvard.edu/subject/c) ## C/C++ 工具和框架 [AWS SDK for C++](https://aws.amazon.com/sdk-for-cpp/) [Azure SDK for C++](https://github.com/Azure/azure-sdk-for-cpp) [Azure SDK for C](https://github.com/Azure/azure-sdk-for-c) [用于 Google Cloud 服务的 C++ 客户端库](https://github.com/googleapis/google-cloud-cpp) [Visual Studio](https://visualstudio.microsoft.com/) 是来自 Microsoft 的集成开发环境 (IDE);它是一个功能丰富的应用程序,可用于软件开发的许多方面。Visual Studio 使编辑、调试、构建和发布你的应用程序变得容易。通过使用 Microsoft 软件开发平台,如 Windows API、Windows Forms、Windows Presentation Foundation 和 Windows Store。 [Visual Studio Code](https://code.visualstudio.com/) 是一款重新定义并优化用于构建和调试现代 Web 和云应用程序的代码编辑器。 [Vcpkg](https://github.com/microsoft/vcpkg) 是一个用于 Windows、Linux 和 MacOS 的 C++ 库管理器。 [ReSharper C++](https://www.jetbrains.com/resharper-cpp/features/) 是由 JetBrains 开发的面向 C++ 开发者的 Visual Studio 扩展。 [AppCode](https://www.jetbrains.com/objc/) 不断监视你的代码质量。它会警告你错误和异味,并建议快速修复以自动解决它们。AppCode 为 Objective-C、Swift、C/C++ 提供了大量代码检查,并为其他支持的语言提供了许多代码检查。所有代码检查都是实时运行的。 [CLion](https://www.jetbrains.com/clion/features/) 是由 JetBrains 开发的面向 C 和 C++ 开发者的跨平台 IDE。 [Code::Blocks](https://www.codeblocks.org/) 是一个免费的 C/C++ 和 Fortran IDE,旨在满足其用户最苛刻的需求。它设计为非常可扩展和完全可配置。Code::Blocks 围绕插件框架构建,可以通过插件进行扩展。 [CppSharp](https://github.com/mono/CppSharp) 是一个工具和库集,有助于在 .NET 生态系统中使用原生 C/C++ 代码。它使用 C/C++ 头文件和库文件并生成必要的粘合代码,将原生 API 公开为托管 API。这样的 API 可用于在托管代码中使用现有的原生库,或向原生代码库添加托管脚本支持。 [Conan](https://conan.io/) 是一个用于 C++ 开发和依赖管理的开源包管理器,使其进入 21 世纪并与其他开发生态系统持平。 [高性能计算 (HPC) SDK](https://developer.nvidia.com/hpc) 是一个用于 GPU 加速 HPC 建模和仿真应用程序的综合工具箱。它包括在 NVIDIA 平台上开发 HPC 应用程序所需的 C、C++ 和 Fortran 编译器、库和分析工具。 [Thrust](https://github.com/NVIDIA/thrust) 是一个类似于 C++ 标准库的 C++ 并行编程库。Thrust 的高级接口极大地提高了程序员的生产力,同时实现了 GPU 和多核 CPU 之间的性能可移植性。与 CUDA、TBB 和 OpenMP 等既定技术的互操作性可与现有软件集成。 [Boost](https://www.boost.org/) 是一个专注于前沿 C++ 的教育机会。Boost 自 2007 年以来一直是年度 Google Summer of Code 的参与者,学生通过从事 Boost 库开发来发展他们的技能。 [Automake](https://www.gnu.org/software/automake/) 是一个自动生成符合 GNU 编码标准的 Makefile.in 文件的工具。Automake 需要使用 GNU Autoconf。 [Cmake](https://cmake.org/) 是一个开源、跨平台的工具系列,旨在构建、测试和打包软件。CMake 用于使用简单的平台和编译器独立配置文件控制软件编译过程,并生成可在你选择的编译器环境中使用的原生 makefile 和工作区。 [GDB](http://www.gnu.org/software/gdb/) 是一个调试器,允许你在另一个程序执行时查看其“内部”发生了什么,或者另一个程序在崩溃时正在做什么。 [GCC](https://gcc.gnu.org/) 是一个编译器集合,包括 C、C++、Objective-C、Fortran、Ada、Go 和 D 的前端,以及这些语言的库。 [GSL](https://www.gnu.org/software/gsl/) 是一个面向 C 和 C++ 程序员的数值库。它是 GNU 通用公共许可证下的自由软件。该库提供了广泛的数学例程,如随机数生成器、特殊函数和最小二乘拟合。总共有超过 1000 个函数,并带有广泛的测试套件。 [OpenGL 扩展包装库](https://www.opengl.org/sdk/libs/GLEW/) 是一个跨平台开源 C/C++ 扩展加载库。GLEW 提供高效的运行时机制来确定目标平台上支持哪些 OpenGL 扩展。 [Libtool](https://www.gnu.org/software/libtool/) 是一个通用库支持脚本,隐藏了在一致、可移植的接口背后使用共享库的复杂性。要使用 Libtool,请将新的通用库构建命令添加到你的 Makefile、Makefile.in 或 Makefile.am 中。 [Maven](https://maven.apache.org/) 是一个软件项目管理和理解工具。基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息管理项目的构建、报告和文档。 [TAU (调整和分析实用程序)](http://www.cs.uoregon.edu/research/tau/home.php) 能够通过函数、方法、基本块和语句的检测以及基于事件的采样来收集性能信息。支持所有 C++ 语言功能,包括模板和命名空间。 [Clang](https://clang.llvm.org/) 是一个生产质量的 C、Objective-C、C++ 和 Objective-C++ 编译器,在针对 X86-32、X86-64 和 ARM 时(其他目标可能有注意事项,但通常很容易修复)。Clang 在生产中用于构建性能关键型软件,如 Google Chrome 或 Firefox。 [OpenCV](https://opencv.org/) 是一个高度优化的库,专注于实时应用程序。跨平台 C++、Python 和 Java 接口支持 Linux、MacOS、Windows、iOS 和 Android。 [Libcu++](https://nvidia.github.io/libcudacxx) 是面向你整个系统的 NVIDIA C++ 标准库。它提供了 C++ 标准库的异构实现,可在 CPU 和 GPU 代码中及之间使用。 [ANTLR (另一种语言识别工具)](https://www.antlr.org/) 是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它广泛用于构建语言、工具和框架。从语法中,ANTLR 生成一个可以构建解析树的解析器,并生成一个监听器接口,使响应感兴趣短语的识别变得容易。 [Oat++](https://oatpp.io/) 是一个轻量级且强大的 C++ Web 框架,用于高度可扩展和资源高效的 Web 应用程序。它是零依赖且易于移植的。 [JavaCPP](https://github.com/bytedeco/javacpp) 是一个程序,提供对 Java 内部原生 C++ 的高效访问,类似于某些 C/C++ 编译器与汇编语言的交互方式。 [Cython](https://cython.org/) 是一种语言,使为 Python 编写 C 扩展像 Python 本身一样容易。Cython 基于 Pyrex,但支持更多前沿功能和优化,例如调用 C 函数以及在变量和类属性上声明 C 类型。 [Spdlog](https://github.com/gabime/spdlog) 是一个非常快速的、仅头文件/编译的 C++ 日志库。 [Infer](https://fbinfer.com/) 是一个用于 Java、C++、Objective-C 和 C 的静态分析工具。Infer 用 [OCaml](https://ocaml.org/) 编写。 # Rust 开发 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)


## Rust 学习资源 [Rust](https://www.rust-lang.org) 是一种专注于性能和安全性的多范式编程语言。Rust 具有与 C 和 C++ 相当的运行时,并将其标准库设置为适合操作系统开发。具体来说,标准库分为两部分:core 和 std。Core 仅包含最低级别的方面,不包括分配、线程和其他更高级别的功能等内容。 [Rust 语言参考](https://doc.rust-lang.org/nightly/reference/) [Rust 程序设计语言书](https://doc.rust-lang.org/book/) [学习 Rust](https://www.rust-lang.org/learn) [为什么 AWS 喜爱 Rust](https://aws.amazon.com/blogs/opensource/why-aws-loves-rust-and-how-wed-like-to-help/) [Udemy 上的 Rust 编程课程](https://www.udemy.com/courses/search/?src=ukw&q=Rust) [Standford 的 Rust 系统编程安全课程,作者 Ryan Eberhardt](https://reberhardt.com/blog/2020/10/05/designing-a-new-class-at-stanford-safety-in-systems-programming.html) [使用 Rust 的 Krustlet 实现 WebAssembly 遇见 Kubernetes](https://cloudblogs.microsoft.com/opensource/2020/04/07/announcing-krustlet-kubernetes-rust-kubelet-webassembly-wasm/) [Microsoft 的 Project Verona](https://github.com/microsoft/verona/blob/master/docs/explore.md) ## Rust 工具和框架 [Cargo](https://github.com/rust-lang/cargo) 是一个包管理器,用于下载你的 Rust 项目依赖并编译你的项目。 [Crater](https://crater.rust-lang.org/) 是一个在 Rust生态系统各部分运行实验的工具。它的主要目的是检测 Rust 编译器中的回归,它通过构建大量 crate、运行其测试套件并比较 Rust 编译器两个版本之间的结果来做到这一点。它可以在本地运行(仅以 Docker 为依赖)或在云上分布式运行。它可以在本地运行(仅以 Docker 为依赖)或在云上分布式运行。 [VSCode-Rust](https://github.com/rust-lang/vscode-rust) 是一个为 Visual Studio Code 添加 Rust 语言支持的插件。Rust 支持由单独的语言服务器提供——根据用户的偏好,由官方 Rust 语言服务器 (RLS) 或 rust-analyzer 提供。如果你没有安装它,扩展会为你安装(经许可)。此扩展由 Rust IDE 和编辑器团队构建和维护,重点在于提供稳定、高质量的扩展,以充分利用各自的语言服务器。 [Apache Arrow](https://github.com/apache/arrow) 是一个内存分析开发平台。它包含一组使大数据系统能够快速处理和移动数据的技术。Arrow 库适用于 C、C++、C#、Go、Java、JavaScript、MATLAB、Python、R、Ruby 和 Rust。 [Wasmer](https://wasmer.io/) 支持基于 [WebAssembly](https://webassembly.org/) 的超轻量级容器,可以在任何地方运行,例如桌面到云和物联网设备,也可以嵌入 [任何编程语言](https://github.com/wasmerio/wasmer#language-integrations)。 [Firecracker](https://firecracker-microvm.github.io) 是一种开源虚拟化技术,专为创建和管理安全、多租户容器和基于函数的服务而构建,这些服务提供无服务器操作模型。Firecracker 在称为 microVM 的轻量级虚拟机中运行工作负载,这些虚拟机结合了硬件虚拟化技术提供的安全性和隔离属性以及容器的速度和灵活性。Firecracker 也已集成到容器运行时中,例如 [Kata Containers](https://github.com/kata-containers/documentation/wiki/Initial-release-of-Kata-Containers-with-Firecracker-support) 和 [Weaveworks Ignite](https://github.com/weaveworks/ignite)。 [Tokio](https://github.com/tokio-rs/tokio) 是一个事件驱动的非阻塞 I/O 平台,用于使用 Rust 编程语言编写异步应用程序。 [TiKV](https://github.com/tikv/tikv) 是一个开源分布式事务键值数据库,它也提供经典的键值 API,但也提供符合 ACID 的事务 API。 [Sonic](https://crates.io/crates/sonic-server) 是一个快速、轻量级和无模式的搜索后端,在某些用例中类似于 Elasticsearch。 [Hyper](https://github.com/hyperium/hyper) 是一个快速且正确的 Rust HTTP 库。 [Rocket](https://github.com/SergioBenitez/Rocket) 是一个用于 Rust 的异步 Web 框架,专注于可用性、安全性、可扩展性和速度。 [Clippy](https://rust-lang.github.io/rust-clippy/) 是一个 lint 集合,用于捕获常见错误并改进你的 Rust 代码。 [Servo](https://github.com/servo/servo) 是一个用 Rust 语言编写的原型 Web 浏览器引擎。 [Vector](https://vector.dev/) 是一个高性能、端到端(代理和聚合器)可观测性数据平台,让用户控制他们的可观测性数据。 [RustPython](https://github.com/RustPython/RustPython) 是一个用 Rust 编写的 Python 解释器。 [Miri](https://github.com/rust-lang/miri) 是一个 Rust 中间级中间表示的解释器。它可以运行 cargo 项目的二进制文件和测试套件,并检测某些类别的未定义行为。Miri 还会告诉你内存泄漏:当执行结束时仍有内存被分配,并且该内存无法从全局静态变量访问时,Miri 将引发错误。 [Chalk](https://rust-lang.github.io/chalk/book/) 是使用类似 PROLOG 的逻辑求解器对 Rust trait 系统的实现和定义。 [stdarch](https://doc.rust-lang.org/stable/core/arch/) 是 Rust 标准库供应商特定的 API 和运行时功能检测。 [Simpleinfra](https://github.com/rust-lang/simpleinfra) 是一个仓库,包含 Rust 基础设施团队编写的用于管理我们服务的工具和自动化。使用此仓库中的某些工具需要只有基础设施团队成员才拥有的权限。 [Rustlings](https://github.com/rust-lang/rustlings) 是一组小练习,让你习惯阅读和编写 Rust 代码。 [Krustlet](https://krustlet.dev/) 充当 Kubernetes Kubelet(用 Rust 编写),通过监听事件流来获取调度程序根据特定 Kubernetes [容忍度](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) 分配给它的新 Pod。该项目目前处于实验阶段。 ## 基于 Rust 的操作系统 [Redox](https://www.redox-os.org) 是一个用 Rust 编写的类 Unix 操作系统,旨在将 Rust 的创新带入现代微内核和全套应用程序。由 [Jeremy Soeller](https://gitlab.redox-os.org/jackpot51) 积极开发。 [Bottlerocket OS](https://github.com/bottlerocket-os/bottlerocket) 是一个开源基于 Linux 的操作系统,旨在托管容器。Bottlerocket 专注于安全性和可维护性,为基于容器的工作负载提供可靠、一致和安全的平台。 [Tock](https://www.tockos.org) 是一个嵌入式操作系统,设计用于在基于 Cortex-M 和 RISC-V 的嵌入式平台上运行多个并发、相互不信任的应用程序。Tock 的设计以保护为中心,既防止潜在恶意应用程序,又防止设备驱动程序。Tock 使用两种机制来保护操作系统的不同组件。首先,内核和设备驱动程序是用 Rust 编写的,这是一种系统编程语言,提供编译时内存安全、类型安全和严格别名。Tock 使用 Rust 保护内核(调度程序和硬件抽象层)免受平台特定设备驱动程序的影响,并隔离设备驱动程序彼此。其次,Tock 使用内存保护单元来隔离应用程序彼此和内核。 [Chrome OS 上的 Rust](https://chromium.googlesource.com/chromiumos/docs/+/master/rust_on_cros.md) 是一份文档,提供有关创建 Rust 项目以在 Chrome OS 和 Chrome OS SDK 中安装的信息。 [用 Rust 编写操作系统](https://os.phil-opp.com) 是一个博客系列,由 [Philipp Oppermann](https://github.com/phil-opp) 创建,用 Rust 编程语言创建一个小型操作系统。 # 网络 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)


## 网络学习资源 [AWS 认证安全 - 专业认证](https://aws.amazon.com/certification/certified-security-specialty/) [Microsoft 认证:Azure 安全工程师助理](https://docs.microsoft.com/en-us/learn/certifications/azure-security-engineer) [Google Cloud 认证专业云安全工程师](https://cloud.google.com/certification/cloud-security-engineer) [Cisco 安全认证](https://www.cisco.com/c/en/us/training-events/training-certifications/certifications/security.html) [Red Hat 认证安全专家:Linux](https://www.redhat.com/en/services/training/ex415-red-hat-certified-specialist-security-linux-exam) [Linux 专业协会 LPIC-3 企业安全认证](https://www.lpi.org/our-certifications/lpic-3-303-overview) [IBM Skills 的网络安全培训和课程](https://www.ibm.com/skills/topics/cybersecurity/) [Offensive Security 的网络安全课程和认证](https://www.offensive-security.com/courses-and-certifications/) [Citrix 认证助理 – 网络](http://training.citrix.com/cms/index.php/certification/networking/) [Citrix 认证专家 – 虚拟化](https://www.globalknowledge.com/us-en/training/certification-prep/brands/citrix/section/virtualization/citrix-certified-professional-virtualization-ccp-v/) [CCNP 路由和交换](https://learningnetwork.cisco.com/s/ccnp-enterprise) [注册信息安全管理师](https://www.isaca.org/credentialing/cism) [Wireshark 认证网络分析师 (WCNA)](https://www.wiresharktraining.com/certification.html) [Juniper 网络认证计划企业 (JNCP)](https://www.juniper.net/us/en/training/certification/) [Coursera 的网络课程和专项](https://www.coursera.org/browse/information-technology/networking) [Udemy 的网络与安全课程](https://www.udemy.com/courses/it-and-software/network-and-security/) [edX 的网络与安全课程](https://www.edx.org/learn/cybersecurity) ## 网络工具与概念 [Qt Network Authorization](https://doc.qt.io/qt-6/qtnetworkauth-index.html) 是一个工具,提供一组 API,使 Qt 应用程序能够获得对在线帐户和 HTTP 服务的有限访问,而无需暴露用户的密码。 [cURL](https://curl.se/) 是一个计算机软件项目,提供库和命令行工具,用于使用各种网络协议传输数据。cURL 也用于汽车、电视机、路由器、打印机、音频设备、手机、平板电脑、机顶盒、媒体播放器,并且是超过一百亿次安装的数千个软件应用程序的互联网传输引擎。 [cURL Fuzzer](https://github.com/curl/curl-fuzzer) 是 curl 项目的质量保证测试。 [DoH](https://github.com/curl/doh) 是一个用于 DoH (DNS-over-HTTPS) 名称解析和查找的独立应用程序。 [Authelia](https://www.authelia.com/) 是一个开源高可用身份验证服务器,为在 [NGINX](https://nginx.org/en/) 后面运行的应用程序提供单点登录功能和双因素身份验证。 [nginx(engine x)](https://nginx.org/en/) 是一个 HTTP 和反向代理服务器、邮件代理服务器以及通用 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。 [Proxmox 虚拟环境](https://www.proxmox.com/en/) 是一个完整的企业虚拟化开源平台。它包括一个内置的 Web 界面,你可以轻松管理 VM 和容器、软件定义存储和网络、高可用性集群以及单一解决方案上的多种开箱即用工具。 [Wireshark](https://www.wireshark.org/) 是一个非常流行的网络协议分析器,通常用于网络故障排除、分析和通信协议开发。了解更多其他有用的 [Wireshark 工具](https://wiki.wireshark.org/Tools)。 [HTTPie](https://github.com/httpie/httpie) 是一个命令行 HTTP 客户端。其目标是使 CLI 与 Web 服务的交互尽可能人性化。HTTPie 专为测试、调试以及通常与 API 和 HTTP 服务器交互而设计。 [HTTPStat](https://github.com/reorx/httpstat) 是一个以简单布局可视化 curl 统计信息的工具。 [Wuzz](https://github.com/asciimoo/wuzz) 是一个用于 HTTP 检查的交互式 cli 工具。它可用于检查/修改使用“复制为 cURL”功能从浏览器网络检查器复制的请求。 [Websocat](https://github.com/vi/websocat) 是一个用于 WebSockets 的命令行客户端,类似于 ws:// 的 netcat(或 curl),具有高级 socat 类功能。 - 连接:在网络中,连接是指通过网络传输的相关信息片段。这通常意味着在数据传输之前建立连接(通过遵循协议中规定的程序),然后在数据传输结束时拆除连接。 - 数据包:一般来说,数据包是通过网络传输的最基本单位。通过网络通信时,数据包是将你的数据(分块)从一个端点携带到另一个端点的信封。 数据包有一个头部部分,包含有关数据包的信息,包括源和目的地、时间戳、网络跳数。数据包的主要部分包含正在传输的实际数据。它有时被称为正文或有效负载。 - 网络接口:网络接口可以指任何类型的网络硬件软件接口。例如,如果你的计算机中有两个网卡,你可以单独控制和配置与它们关联的每个网络接口。 网络接口可能与物理设备相关联,或者它可能是虚拟接口的表示。“环回”设备是本地机器的虚拟接口,就是这方面的一个例子。 - LAN:LAN 代表“局域网”。它指的是一个网络或网络的一部分,不能被更大的互联网公开访问。家庭或办公室网络就是 LAN 的一个例子。 - WAN:WAN 代表“广域网”。它意味着一个比 LAN 更广泛的网络。虽然 WAN 是用来描述大型、分散网络的通用相关术语,但它通常意味着整个互联网。 如果一个接口连接到 WAN,通常假定它可以通过互联网访问。 - 协议:协议是一组规则和标准,基本上定义了设备可以用来通信的语言。网络中大量使用了许多协议,它们通常在不同的层中实现。 一些低层协议是 TCP、UDP、IP 和 ICMP。一些熟悉的应用层协议示例构建在这些较低协议之上,例如 HTTP(用于访问 Web 内容)、SSH、TLS/SSL 和 FTP。 - 端口:端口是单个机器上的一个地址,可以绑定到特定的软件。它不是物理接口或位置,但它允许你的服务器能够使用多个应用程序进行通信。 - 防火墙:防火墙是一个程序,决定是否允许进入服务器或外出的流量。防火墙通常通过为哪些端口上允许哪种类型的流量创建规则来工作。通常,防火墙会阻止服务器上特定应用程序未使用的端口。 - NAT:网络地址转换是一种将传入请求转换到路由服务器,转换为其知道的 LAN 中相关设备或服务器的方法。这通常在物理 LAN 中实现,作为一种通过一个 IP 地址将请求路由到必要的后端服务器的方法。 - VPN:虚拟专用网络是一种通过互联网连接单独 LAN 的方法,同时保持隐私。这用作连接远程系统的一种方法,就像它们在本地网络上一样,通常出于安全原因。 ## 网络层 虽然网络通常以水平方式在主机之间讨论拓扑,但其实现是在计算机或网络中以垂直方式分层的。这意味着有多种技术和协议建立在彼此之上,以便通信更容易进行。每个连续的更高层都会稍微抽象原始数据,使其更易于应用程序和用户使用。它还允许你以新的方式利用较低层,而无需投入时间和精力来开发处理这些类型流量的协议和应用程序。 当数据从一台机器发出时,它从堆栈顶部开始并向下过滤。在最低层,发生到另一台机器的实际传输。此时,数据通过另一台计算机的层向上传输。每一层都能够在其从相邻层接收的数据周围添加自己的“包装器”,这将帮助后面的层决定在传递数据时如何处理数据。 讨论网络通信不同层的一种方法是 OSI 模型。OSI 代表 [开放系统互连](https://en.wikipedia.org/wiki/OSI_model)。此模型定义了七个单独的层。此模型中的层是: - 应用层:应用层是用户和用户应用程序最常与之交互的层。网络通信在资源可用性、通信伙伴和数据同步方面进行讨论。 - 表示层:表示层负责映射资源和创建上下文它用于将较低级别的网络数据转换为应用程序期望看到的数据。 - 会话层:会话层是一个连接处理程序。它以持久的方式创建、维护和销毁节点之间的连接。 - 传输层:传输层负责为其上面的层提供可靠的连接。在此上下文中,可靠是指能够验证数据在连接的另一端完整接收的能力。该层可以重新发送已丢弃或损坏的信息,并可以向远程计算机确认数据的接收。 - 网络层:网络层用于在网络中的不同节点之间路由数据。它使用地址来能够告诉将信息发送到哪台计算机。该层还可以将较大的消息分解为较小的块,以便在另一端重新组装。 - 数据链路层:该层作为使用现有物理连接在网络上的不同节点或设备之间建立和维护可靠链路的方法实现。 - 物理层:物理层负责处理用于建立连接的实际物理设备。该层涉及管理物理连接的裸软件以及硬件本身(如以太网)。 TCP/IP 模型,更常见的名称是互联网协议套件,是另一个更简单且已被广泛采用的分层模型。它定义了四个单独的层,其中一些与 OSI 模型重叠: - 应用层:在此模型中,应用层负责在应用程序之间创建和传输用户数据。应用程序可以在远程系统上,并且应该像对最终用户本地一样运行。 通信在对等网络之间进行。 - 传输层:传输层负责进程之间的通信。此级别的网络利用端口来寻址不同的服务。根据使用的协议类型,它可以建立不可靠或可靠的连接。 - 互联网层:互联网层用于在网络中从节点到节点传输数据。该层知道连接的端点,但不担心从一个地方到另一个地方所需的实际连接。IP 地址在此层定义为以可寻址方式访问远程系统的方法。 - 链路层:链路层实现本地网络的实际拓扑,允许互联网层呈现可寻址接口。它在相邻节点之间建立连接以发送数据。 ### 接口 **接口**是你计算机的网络通信点。每个接口都与一个物理或虚拟网络设备相关联。通常,你的服务器将为你的每个以太网或无线互联网卡提供一个可配置的网络接口。此外,它将定义一个称为“环回”或 localhost 接口的虚拟网络接口。这用作将单个计算机上的应用程序和进程连接到其他应用程序和进程的接口。你可以在许多工具中看到它被称为“lo”接口。 ## 网络协议 网络通过在彼此之上的许多不同协议上搭载工作。通过这种方式,一个数据可以使用封装在彼此中的多个协议进行传输。 **媒体访问控制 (MAC)** 是一种用于区分特定设备的通信协议。每个设备都应该在制造过程中获得一个唯一的 MAC 地址,以区别于互联网上的所有其他设备。通过 MAC 地址寻址硬件允许你通过唯一值引用设备,即使上面的软件可能在操作期间更改该特定设备的名称。媒体访问控制是你可能经常交互的链路层中唯一的协议之一。 **IP 协议**是允许互联网工作的基本协议之一。IP 地址在每个网络上都是唯一的,它们允许机器通过网络相互寻址。它在 IP/TCP 模型的互联网层实现。网络可以链接在一起,但流量在跨越网络边界时必须路由。该协议假设一个不可靠的网络和到同一目的地的多条路径,它可以在之间动态切换。该协议有许多不同的实现。今天最常见的实现是 IPv4,尽管由于可用 IPv4 地址的稀缺性和协议能力的改进,IPv6 作为替代方案越来越受欢迎。 **ICMP:互联网控制消息协议**用于在设备之间发送消息以指示可用性或错误情况。这些数据包用于各种网络诊断工具,例如 ping 和 traceroute。通常,当不同类型的数据包遇到某种问题时,会传输 ICMP 数据包。基本上,它们用作网络通信的反馈机制。 **TCP:传输控制协议**在 IP/TCP 模型的传输层实现,用于建立可靠连接。TCP 是将数据封装到数据包中的协议之一。然后,它使用较低层上可用的方法将这些传输到连接的远程端。在另一端,它可以检查错误,请求重新发送某些片段,并将信息重新组装成一个逻辑片段发送到应用层。该协议在数据传输之前使用称为三次握手的系统建立连接。这是通信两端确认请求并商定确保数据可靠性的方法的一种方式。数据发送后,使用类似的四次握手拆除连接。TCP 是互联网许多最流行用途的首选协议,包括 WWW、FTP、SSH 和电子邮件。可以肯定地说,如果没有 TCP,我们今天所知的互联网将不复存在。 **UDP:用户数据报协议**是 TCP 的流行伴随协议,也在传输层实现。UDP 和 TCP 之间的根本区别在于 UDP 提供不可靠的数据传输。它不验证数据是否已在连接的另一端接收。这听起来像是一件坏事,对于许多目的来说,确实如此。然而,对于某些功能来说,它也非常重要。不需要等待确认数据已接收并被迫重新发送数据,UDP 比 TCP 快得多。它不与远程主机建立连接,它只是将数据发送到该主机,并不关心它是否被接受。由于 UDP 是一个简单的事务,它对于简单的通信(如查询网络资源)很有用。它也不维护状态,这使其非常适合从一台机器向许多实时客户端传输数据。这使其成为 VOIP、游戏和其他无法承受延迟的应用程序的理想选择。 **HTTP:超文本传输协议**是在应用层定义的协议,构成了 Web 通信的基础。HTTP 定义了许多函数,告诉远程系统你正在请求什么。例如,GET、POST 和 DELETE 都以不同的方式与请求的数据交互。 **FTP:文件传输协议**位于应用层,提供了一种将完整文件从一台主机传输到另一台主机的方法。它本质上是不安全的,因此不建议用于任何面向外部的网络,除非它作为公共的、仅下载的资源实现。 **DNS:域名系统**是一个应用层协议,用于为互联网资源提供人性化的命名机制。它是将域名绑定到 IP 地址并允许你在浏览器中按名称访问站点的原因。 **SSH:安全外壳**是在应用层实现的加密协议,可用于以安全方式与远程服务器通信。许多附加技术都是围绕此协议构建的,因为其端到端加密和普遍性。还有许多我们没有涵盖的其他协议同样重要。但是,这应该让你对使互联网和网络成为可能的一些基本技术有一个很好的概述。 [REST(表述性状态转移)](https://www.codecademy.com/articles/what-is-rest) 是一种架构风格,用于在 Web 上的计算机系统之间提供标准,使系统更容易相互通信。 [JSON Web Token (JWT)](https://jwt.io) 是一种紧凑的 URL 安全手段,用于表示要在两方之间传输的声明。JWT 中的声明被编码为 JSON 对象,该对象使用 JSON Web Signature (JWS) 进行数字签名。 [OAuth 2.0](https://oauth.net/2/) 是一个开源授权框架,使应用程序能够获得对 HTTP 服务(如 Amazon、Google、Facebook、Microsoft、Twitter GitHub 和 DigitalOcean)上用户帐户的有限访问。它通过将用户身份验证委派给托管用户帐户的服务,并授权第三方应用程序访问用户帐户来工作。 # 库伯奈特斯 [返回顶部](https://github.com/mikeroyal/ebpf-Guide#table-of-contents)


## Kubernetes 学习资源 [Kubernetes (K8s)](https://kubernetes.io/) 是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。 [获取 Kubernetes 认证](https://training.linuxfoundation.org/certification/catalog/?_sft_technology=kubernetes) [AWS 上的 Kubernetes 入门](https://aws.amazon.com/kubernetes/) [Microsoft Azure 上的 Kubernetes](https://azure.microsoft.com/en-us/topic/what-is-kubernetes/) [Azure Kubernetes 服务介绍](https://docs.microsoft.com/en-us/azure/aks/kubernetes-dashboard) [Azure Red Hat OpenShift ](https://azure.microsoft.com/en-us/services/openshift/) [Google Cloud 入门](https://cloud.google.com/learn/what-is-kubernetes) [Red Hat 上的 Kubernetes 入门](https://www.redhat.com/en/topics/containers/what-is-kubernetes) [IBM 上的 Kubernetes 入门](https://www.ibm.com/cloud/learn/kubernetes) [IBM Cloud 上的 Red Hat OpenShift](https://www.ibm.com/cloud/openshift) [在 Red Hat OpenShift 上启用 OpenShift 虚拟化](https://developers.redhat.com/blog/2020/08/28/enable-openshift-virtualization-on-red-hat-openshift/) [Kubernetes 中的 YAML 基础](https://developer.ibm.com/technologies/containers/tutorials/yaml-basics-and-usage-in-kubernetes/) [Kubernetes 上的 Elastic Cloud](https://www.elastic.co/elastic-cloud-kubernetes) [Docker 和 Kubernetes](https://www.docker.com/products/kubernetes) [在 Kubernetes 上运行 Apache Spark](http://spark.apache.org/docs/latest/running-on-kubernetes.html) [跨 VMware vRealize Automation 的 Kubernetes](https://blogs.vmware.com/management/2019/06/kubernetes-across-vmware-cloud-automation-services.html) [VMware Tanzu Kubernetes Grid](https://tanzu.vmware.com/kubernetes-grid) [VMware Tanzu 与 AWS 协作的所有方式](https://tanzu.vmware.com/content/blog/all-the-ways-vmware-tanzutm-works-with-aws) [VMware Tanzu 教育](https://tanzu.vmware.com/education) [在云原生 Kubernetes 环境中使用 Ansible](https://www.ansible.com/blog/how-useful-is-ansible-in-a-cloud-native-kubernetes-environment) [使用 Ansible 管理 Kubernetes (K8s) 对象](https://docs.ansible.com/ansible/latest/collections/community/kubernetes/k8s_module.html) [使用 Vagrant 和 Ansible 设置 Kubernetes 集群](https://kubernetes.io/blog/2019/03/15/kubernetes-setup-using-ansible-and-vagrant/) [使用 Kubernetes 运行 MongoDB](https://www.mongodb.com/kubernetes) [Kubernetes Fluentd](https://docs.fluentd.org/v/0.12/articles/kubernetes-fluentd) [了解新的 GitLab Kubernetes Agent](https://about.gitlab.com/blog/2020/09/22/introducing-the-gitlab-kubernetes-agent/) [Visual Studio 2019 的本地进程与 Kubernetes 介绍](https://devblogs.microsoft.com/visualstudio/introducing-local-process-with-kubernetes-for-visual-studio%E2%80%AF2019/) [Kubernetes 贡献者](https://www.kubernetes.dev/) [来自 VMware 的 KubeAcademy](https://kube.academy/) [来自 Pulumi 的 Kubernetes 教程](https://www.pulumi.com/docs/tutorials/kubernetes/) [Katacoda 的 Kubernetes Playground](https://www.katacoda.com/courses/kubernetes/playground) [Udacity 的可扩展微服务与 Kubernetes 课程](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) ## Kubernetes 工具、框架和项目 [开放容器倡议](https://opencontainers.org/about/overview/) 是一个开放治理结构,其明确目的是围绕容器格式和运行时创建开放行业标准。 [Buildah](https://buildah.io/) 是一个构建开放容器倡议 (OCI) 镜像的命令行工具。它可以与 Docker、Podman、Kubernetes 一起使用。 [Podman](https://podman.io/) 是一个无守护程序、开源、Linux 原生工具,旨在使用开放容器倡议 (OCI) 容器和容器镜像轻松查找、运行、构建、共享和部署应用程序。Podman 提供了一个熟悉任何使用过 Docker 容器引擎的人的命令行界面 (CLI)。 [Containerd](https://containerd.io) 是一个管理其主机系统完整容器生命周期的守护程序,从镜像传输和存储到容器执行和监督,再到低级存储到网络附件等。它适用于 Linux 和 Windows。 [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine/) 是一个用于运行容器化应用程序的托管、生产就绪环境。 [Azure Kubernetes Service (AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/) 是无服务器 Kubernetes,具有集成的持续集成和持续交付 体验,以及企业级的安全和治理。在单一平台上统一你的开发和运营团队,以充满信心地快速构建、交付和扩展应用程序。 [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) 是一个跨多个可用区运行 Kubernetes 控制平面实例以确保高可用性的工具。 [AWS Controllers for Kubernetes (ACK)](https://aws.amazon.com/blogs/containers/aws-controllers-for-kubernetes-ack/) 是一个新工具,让你可以直接从 Kubernetes 管理 AWS 服务。ACK 使构建利用 AWS 服务的可扩展和高可用 Kubernetes 应用程序变得简单。 [Container Engine for Kubernetes (OKE)](https://www.oracle.com/cloud-native/container-engine-kubernetes/) 是一项 Oracle 管理的容器编排服务,可以减少构建现代云原生应用程序的时间和成本。与大多数其他供应商不同,Oracle Cloud Infrastructure 提供容器引擎作为在更高性能、更低成本的计算机上运行的免费服务。 [Anthos](https://cloud.google.com/anthos/docs/concepts/overview) 是一个现代应用程序管理平台,为云和本地环境提供一致的开发和运营体验。 [Red Hat Openshift](https://www.openshift.com/) 是一个完全托管的 Kubernetes 平台,为本地、混合和多云部署提供基础。 [OKD](https://okd.io/) 是 Kubernetes 的社区发行版,针对持续应用开发和多租户部署进行了优化。OKD 在 Kubernetes 之上添加了以开发人员和运维为中心的工具,以实现快速的应用程序开发、轻松的部署和扩展,以及为小型和大型团队提供长期的生命周期维护。 [Odo](https://odo.dev/) 是一个快速、迭代且直观的 CLI 工具,专为在 Kubernetes 和 OpenShift 上编写、构建和部署应用程序的开发人员设计。 [Kata Operator](https://github.com/openshift/kata-operator) 是一个操作器,用于在 Openshift 以及 Kubernetes 集群上执行 [Kata Runtime](https://katacontainers.io/) 的生命周期管理(安装/升级/卸载)。 [Thanos](https://thanos.io/) 是一组组件,可以组合成一个具有无限存储能力的高可用指标系统,可以无缝添加到现有的 Prometheus 部署之上。 [OpenShift Hive](https://github.com/openshift/hive) 是一个作为服务运行在 Kubernetes/OpenShift 之上的操作器。Hive 服务可用于配置 OpenShift 4 集群并执行初始配置。 [Rook](https://rook.io/) 是一个将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务的工具。它自动化了存储管理员的任务:部署、引导、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理。 [VMware Tanzu](https://tanzu.vmware.com/tanzu) 是一个集中管理平台,用于跨多个团队和私有/公有云一致地运行和保护您的 Kubernetes 基础设施和现代应用程序。 [Kubespray](https://kubespray.io/) 是一个结合了 Kubernetes 和 Ansible 的工具,可以轻松安装 Kubernetes 集群,这些集群可以部署在 [AWS](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/aws.md)、GCE、[Azure](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/azure.md)、[OpenStack](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/openstack.md)、[vSphere](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/vsphere.md)、[Packet](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/packet.md)(裸金属)、Oracle Cloud Infrastructure(实验性)或裸金属上。 [KubeInit](https://github.com/kubeinit/kubeinit) 提供用于部署和配置多种 Kubernetes 发行版的 Ansible playbook 和角色。 [Rancher](https://rancher.com/) 是一个完整的软件栈,供采用容器的团队使用。它解决了管理多个 Kubernetes 集群的运营和安全挑战,同时为 DevOps 团队提供了运行容器化工作负载的集成工具。 [K3s](https://github.com/rancher/k3s) 是一个高可用的、经过认证的 Kubernetes 发行版,专为无人值守、资源受限、远程位置或物联网设备内部的生产工作负载而设计。 [Helm](https://helm.sh/) 是一个 Kubernetes 包管理器工具,可以更轻松地安装和管理 Kubernetes 应用程序。 [Knative](https://knative.dev/) 是一个基于 Kubernetes 的平台,用于构建、部署和管理现代无服务器工作负载。Knative 负责处理网络、自动伸缩(甚至缩容至零)和版本跟踪的运营开销细节。 [KubeFlow](https://www.kubeflow.org/) 是一个致力于使 Kubernetes 上的机器学习 (ML) 工作流部署变得简单、可移植和可扩展的工具。 [Kubebox](https://github.com/astefanutti/kubebox) 是 Kubernetes 的终端和 Web 控制台。 [Kubsec](https://github.com/controlplaneio/kubesec) 是针对 Kubernetes 资源的安全风险分析工具。 [Replex](https://www.replex.io/) 是面向云原生企业的 Kubernetes 治理和成本管理工具。 [Virtual Kubelet](https://virtual-kubelet.io/) 是一个开源的 [Kubernetes kubelet](https://kubernetes.io/docs/reference/generated/kubelet/) 实现,它伪装成一个 kubelet。 [Telepresence](https://www.telepresence.io/) 是针对 Kubernetes 和 OpenShift 微服务的快速本地开发工具。 [Weave Scope](https://www.weave.works/oss/scope/) 是一个自动检测进程、容器、主机的工具。无需内核模块,无需代理,无需特殊库,无需编码。它与 Docker、Kubernetes、DCOS 和 AWS ECS 无缝集成。 [Nuclio](https://nuclio.io/) 是一个专注于数据、I/O 和计算密集型工作负载的高性能“无服务器”框架。它与流行的数据科学工具(如 [Jupyter](https://jupyter.org/) 和 [Kubeflow](https://www.kubeflow.org/))良好集成;支持各种数据和流源;并支持在 CPU 和 GPU 上执行。 [Supergiant Control](https://github.com/supergiant/control) 是一个管理您基础设施上集群生命周期的工具,允许通过 HELM 部署应用程序。其部署和配置工作流程将帮助您更快地启动并运行 Kubernetes。 [Supergiant Capacity - Beta](https://github.com/supergiant/capacity) 是一个确保在任何给定时间为 Kubernetes 集群的所需资源负载提供合适硬件的工具。这有助于防止容器环境的过度配置和硬件预算的超支。 [Test suite for Kubernetes](https://github.com/mrahbar/k8s-testsuite) 是一个测试套件,包含两个 Helm charts,用于 Kubernetes 集群的网络带宽测试和负载测试。 [Keel](https://github.com/keel-hq/keel) 是一个 Kubernetes 操作器,用于自动化 Helm、DaemonSet、StatefulSet 和 Deployment 的更新。 [Kube Monkey](https://github.com/asobti/kube-monkey) 是 Netflix 的 Chaos Monkey 在 Kubernetes 集群上的实现。它随机删除集群中的 Kubernetes (k8s) pod,以鼓励和验证故障弹性服务的开发。 [Kube State Metrics (KSM)](https://github.com/kubernetes/kube-state-metrics) 是一个简单的服务,监听 Kubernetes API 服务器并生成有关对象状态的指标。它不关注单个 Kubernetes 组件的健康状况,而是关注内部各种对象(如 deployments、nodes 和 pods)的健康状况。 [Sonobuoy](https://sonobuoy.io/) 是一个诊断工具,通过以可访问且非破坏性的方式运行选定的配置测试,使了解 Kubernetes 集群的状态变得更加容易。 [PowerfulSeal](https://github.com/powerfulseal/powerfulseal) 是针对 Kubernetes 集群的强大测试工具,以便您可以尽早发现问题。 [Test Infra](https://github.com/kubernetes/test-infra) 是一个存储库,包含 Kubernetes 项目的测试和自动化需求所需的工具和配置文件。 [cAdvisor (Container Advisor)](https://github.com/google/cadvisor) 是一个为容器用户提供了解其运行容器的资源使用和性能特征的工具。它是一个运行中的守护进程,收集、聚合、处理并导出有关运行容器的信息。具体来说,对于每个容器,它保留资源隔离参数、历史资源使用情况、完整历史资源使用的直方图和网络统计信息。 [Etcd](https://etcd.io/) 是一个分布式键值存储,提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据。Etcd 用作服务发现的后端,并存储 Kubernetes 的集群状态和配置。 [OpenEBS](https://openebs.io/) 是一个基于 Kubernetes 的工具,用于使用容器附加存储创建有状态应用程序。 [Container Storage Interface (CSI)](https://www.architecting.it/blog/container-storage-interface/) 是一个 API,允许像 Kubernetes 这样的容器编排平台通过插件与存储数据进行无缝通信。 [MicroK8s](https://microk8s.io/) 是一个提供完整 Kubernetes 体验的工具。采用完全容器化部署,通过压缩的空中更新实现超可靠的运行。它支持 Linux、Windows 和 MacOS。 [Charmed Kubernetes](https://ubuntu.com/kubernetes/features) 是一个集成良好、开箱即用、合规的 Kubernetes 平台,由 Canonical 开发,针对您的多云环境进行了优化。 [Grafana Kubernetes App](https://grafana.com/grafana/plugins/grafana-kubernetes-app) 是一个允许您监控 Kubernetes 集群性能的工具。它包括 4 个仪表板:Cluster、Node、Pod/Container 和 Deployment。它允许自动部署所需的 Prometheus exporters,并提供默认的抓取配置以用于集群内的 Prometheus 部署。 [KubeEdge](https://kubeedge.io/en/) 是一个开源系统,用于将原生容器化应用程序编排能力扩展到边缘主机。它构建在 kubernetes 之上,为网络、应用程序部署以及云和边缘之间的元数据同步提供基础架构支持。 [Lens](https://k8slens.dev/) 是最强大的 IDE,适用于需要日常处理 Kubernetes 集群的人员。它支持 MacOS、Windows 和 Linux 操作系统。 [kind](https://kind.sigs.k8s.io/) 是一个使用 Docker 容器“节点”运行本地 Kubernetes 集群的工具。它主要是为测试 Kubernetes 本身而设计的,但也可用于本地开发或 CI。 [Flux CD](https://fluxcd.io/) 是一个自动确保 Kubernetes 集群状态与您在 Git 中提供的配置相匹配的工具。它使用集群中的操作器来触发 Kubernetes 内部的部署,这意味着您不需要单独的持续交付工具。 # 数据库 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents)



## SQL/NoSQL 学习资源 [SQL](https://en.wikipedia.org/wiki/SQL) 是一种用于在关系数据库中存储、操作和检索数据的标准语言。 [NoSQL](https://www.ibm.com/cloud/blog/sql-vs-nosql) 是一种数据库,可互换地称为“非关系型”或“非 SQL”,以强调该数据库可以以不同于具有行和表的关系型(基于 SQL 的)数据库的方式处理大量快速变化的非结构化数据。 [Transact-SQL(T-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-reference) 是 Microsoft 对 SQL 的扩展,所有工具和应用程序都通过发送 T-SQL 命令与 SQL 数据库进行通信。 [Transact-SQL 简介](https://docs.microsoft.com/en-us/learn/modules/introduction-to-transact-sql/) [W3Schools SQL 教程](https://www.w3schools.com/sql/) [Coursera 在线 SQL 技能学习](https://www.coursera.org/courses?query=sql) [Udemy 在线 SQL 课程](https://www.udemy.com/topic/sql/) [LinkedIn Learning 在线 SQL 培训课程](https://www.linkedin.com/learning/topics/sql) [Codecademy 免费学习 SQL](https://www.codecademy.com/learn/learn-sql) [GitLab SQL 样式指南](https://about.gitlab.com/handbook/business-ops/data-team/platform/sql-style-guide/) [OracleDB SQL 样式指南基础](https://oracle.readthedocs.io/en/latest/sql/basics/style-guide.html) [Tableau CRM:BI 软件和工具](https://www.salesforce.com/products/crm-analytics/overview/) [AWS 上的数据库](https://aws.amazon.com/products/databases/) [AWS EC2 中 SQL Server 集群的最佳实践和建议。](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/aws-sql-clustering.html) [从 Google Kubernetes Engine 连接到 Cloud SQL 实例。](https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine) [Microsoft Azure SQL 教育资源](https://docs.microsoft.com/en-us/sql/sql-server/educational-sql-resources?view=sql-server-ver15) [MySQL 认证](https://www.mysql.com/certification/) [SQL 与 NoSQL 数据库:有什么区别?](https://www.ibm.com/cloud/blog/sql-vs-nosql) [什么是 NoSQL?](https://aws.amazon.com/nosql/) ## SQL/NoSQL 工具和数据库 [Netdata](https://github.com/netdata/netdata) 是高保真基础设施监控和故障排除工具,实时监控代理从系统、硬件、容器和应用程序收集数千个指标,零配置。它永久运行在您的所有物理/虚拟服务器、容器、云部署和边缘/物联网设备上,可以在事件发生期间安全地安装在您的系统上,无需任何准备。 [Azure Data Studio](https://github.com/Microsoft/azuredatastudio) 是一种开源数据管理工具,支持在 Windows、macOS 和 Linux 上使用 SQL Server、Azure SQL DB 和 SQL DW。 [Azure SQL Database](https://azure.microsoft.com/en-us/services/sql-database/) 是专为云构建的智能、可扩展的关系数据库服务。它常青且始终保持最新,具有 AI 驱动和自动化功能,可为您优化性能和持久性。无服务器计算和超大规模存储选项可按需自动扩展资源,因此您可以专注于构建新应用程序,而无需担心存储大小或资源管理。 [Azure SQL Managed Instance](https://azure.microsoft.com/en-us/services/azure-sql/sql-managed-instance/) 是一个完全托管的 SQL Server 数据库引擎实例,托管在 Azure 中并放置在您的网络中。此部署模型使得只需对应用程序和数据库进行极少的更改,即可轻松地将本地应用程序迁移到云。托管实例拆分了计算和存储组件。 [Azure Synapse Analytics](https://azure.microsoft.com/en-us/services/synapse-analytics/) 是一项无限分析服务,结合了企业数据仓库和大数据分析。它让您可以自由地按照自己的方式查询数据,大规模使用无服务器或预配资源。它结合了企业数据仓库中使用的最佳 SQL 技术、大数据分析中使用的 Spark 技术以及用于数据集成和 ETL/ELT 的管道。 [MSSQL for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql) 是一个扩展,用于在任何地方开发 Microsoft SQL Server、Azure SQL Database 和 SQL Data Warehouse,具有丰富的功能集。 [SQL Server Data Tools (SSDT)](https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt) 是一种开发工具,用于构建 SQL Server 关系数据库、Azure SQL 数据库、Analysis Services (AS) 数据模型、Integration Services (IS) 包和 Reporting Services (RS) 报告。使用 SSDT,开发人员可以像在 Visual Studio 或 Visual Studio Code 中开发应用程序一样轻松地设计和部署任何 SQL Server 内容类型。 [Bulk Copy Program](https://docs.microsoft.com/en-us/sql/tools/bcp-utility) 是 Microsoft SQL Server 附带的命令行工具。BCP 允许您快速高效地在 SQL Server 数据库中导入和导出大量数据。 [SQL Server Migration Assistant](https://www.microsoft.com/en-us/download/details.aspx?id=54258) 是 Microsoft 提供的工具,可简化从 Oracle 到 SQL Server、Azure SQL Database、Azure SQL Database Managed Instance 和 Azure SQL Data Warehouse 的数据库迁移过程。 [SQL Server Integration Services](https://docs.microsoft.com/en-us/sql/integration-services/sql-server-integration-services?view=sql-server-ver15) 是一个用于构建企业级数据集成和数据转换解决方案的开发平台。使用 Integration Services 通过复制或下载、加载数据仓库、清理和挖掘数据以及管理 SQL Server 对象和数据来解决复杂的业务问题。 [SQL Server Business Intelligence(BI)](https://www.microsoft.com/en-us/sql-server/sql-business-intelligence) 是 Microsoft SQL Server 中用于将原始数据转换为企业可用于决策的信息的工具集合。 [Tableau](https://www.tableau.com/) 是一种数据可视化软件,用于关系数据库、云数据库和电子表格。Tableau 于 [2019 年 8 月被 Salesforce 收购](https://investor.salesforce.com/press-releases/press-release-details/2019/Salesforce-Completes-Acquisition-of-Tableau/default.aspx)。 [DataGrip](https://www.jetbrains.com/datagrip/) 是由 Jet Brains 开发的专业数据库 IDE,提供上下文感知的代码补全,帮助您更快地编写 SQL 代码。补全功能了解表结构、外键,甚至是您正在编辑的代码中创建的数据库对象。 [RStudio](https://rstudio.com/) 是 R 和 Python 的集成开发环境,具有控制台、语法突出显示编辑器(支持直接代码执行)以及用于绘图、历史记录、调试和工作区管理的工具。 [MySQL](https://www.mysql.com/) 是一项完全托管的数据库服务,用于使用世界上最流行的开源数据库部署云原生应用程序。 [PostgreSQL](https://www.postgresql.org/) 是一个功能强大的开源对象关系数据库系统,拥有超过 30 年的活跃开发历史,以其可靠性、功能健壮性和性能赢得了极高的声誉。 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 是一个键值和文档数据库,可在任何规模下提供个位数毫秒级的性能。它是一个完全托管的多区域、多主节点、持久数据库,具有内置安全性、备份和恢复以及内存缓存功能,适用于互联网级应用程序。 [Apache Cassandra™](https://cassandra.apache.org/) 是一个开源 NoSQL 分布式数据库,被数千家公司信赖用于可扩展性和高可用性,且不影响性能。Cassandra 在商用硬件或云基础设施上提供线性可扩展性和经过验证的容错能力,使其成为关键任务数据的完美平台。 [Apache HBase™](https://hbase.apache.org/) 是一个开源、NoSQL、分布式大数据存储。它支持对 PB 级数据的随机、严格一致、实时访问。HBase 对于处理大型稀疏数据集非常有效。HBase 作为 Hadoop 的 Apache MapReduce 框架的直接输入和输出,并与 Apache Phoenix 配合使用,以支持对 HBase 表进行类似 SQL 的查询。 [Hadoop Distributed File System (HDFS)](https://www.ibm.com/analytics/hadoop/hdfs) 是一个处理在商用硬件上运行的大型数据集的分布式文件系统。它用于将单个 Apache Hadoop 集群扩展到数百(甚至数千)个节点。HDFS 是 Apache Hadoop 的主要组件之一,其他组件是 [MapReduce](https://www.ibm.com/analytics/hadoop/mapreduce) 和 [YARN](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html)。 [Apache Mesos](http://mesos.apache.org/) 是一个集群管理器,可在分布式应用程序或框架之间提供高效的资源隔离和共享。它可以在动态共享的节点池上运行 Hadoop、Jenkins、Spark、Aurora 和其他框架。 [Apache Spark](https://spark.apache.org/) 是一个用于大数据处理的统一分析引擎,内置了流、SQL、机器学习和图处理模块。 [ElasticSearch](https://www.elastic.co/) 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、多租户能力的全文搜索引擎,具有 HTTP Web 接口和无模式的 JSON 文档。Elasticsearch 使用 Java 开发。 [Logstash](https://www.elastic.co/products/logstash) 是一个用于管理事件和日志的工具。当通用使用时,该术语包含更大的日志收集、处理、存储和搜索活动系统。 [Kibana](https://www.elastic.co/products/kibana) 是 Elasticsearch 的开源数据可视化插件。它在 Elasticsearch 集群上索引的内容之上提供可视化功能。用户可以在大量数据之上创建条形图、折线图和散点图,或饼图和地图。 [Trino](https://trino.io/) 是一个用于大数据的分布式 SQL 查询引擎。它能够极大地加速 [ETL 过程](https://docs.microsoft.com/en-us/azure/architecture/data-guide/relational-data/etl),允许它们全部使用标准 SQL 语句,并在同一系统中使用众多数据源和目标。 [Extract, transform, and load (ETL)](https://docs.microsoft.com/en-us/azure/architecture/data-guide/relational-data/etl) 是一种数据管道,用于从各种来源收集数据,根据业务规则转换数据,并将其加载到目标数据存储中。 [Redis(REmote DIctionary Server)](https://redis.io/) 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。它提供字符串、哈希、列表、集合、带范围查询的有序集合、位图、HyperLogLog、地理空间索引和流等数据结构。 [FoundationDB](https://www.foundationdb.org/) 是一个开源分布式数据库,旨在处理商用服务器集群上的大量结构化数据。它将数据组织为有序键值存储,并对所有操作采用 ACID 事务。它特别适合读/写工作负载,但在写密集型工作负载方面也具有出色的性能。FoundationDB 于 [2015 年被 Apple 收购](https://techcrunch.com/2015/03/24/apple-acquires-durable-database-company-foundationdb/)。 [IBM DB2](https://www.ibm.com/analytics/db2) 是混合数据管理产品的集合,提供一套完整的 AI 赋能功能,旨在帮助您在本地以及私有和公有云环境中管理结构化和非结构化数据。Db2 构建在专为可扩展性和灵活性设计的智能通用 SQL 引擎之上。 [MongoDB](https://www.mongodb.com/) 是一个文档数据库,意味着它以类似 JSON 的文档存储数据。 [OracleDB](https://www.oracle.com/database/) 是一个强大的完全托管数据库,帮助开发人员以最高的可用性、可靠性和安全性管理关键业务数据。 [MariaDB](https://mariadb.com/) 是一个企业级开源数据库解决方案,适用于现代关键任务应用程序。 [SQLite](https://sqlite.org/index.html) 是一个实现小型、快速、自包含、高可靠性、全功能 SQL 数据库引擎的 C 语言库。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有移动电话和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 [SQLite Database Browser](https://sqlitebrowser.org/) 是一个开源 SQL 工具,允许用户创建、设计和编辑 SQLite 数据库文件。它允许用户显示他们自己和应用程序本身发出的所有 SQL 命令的日志。 [InfluxDB](https://www.influxdata.com/) 是一个开源时序平台。这包括用于存储和查询数据的 API,在后台处理数据以用于 [ETL](https://docs.microsoft.com/en-us/azure/architecture/data-guide/relational-data/etl) 或监控和警报目的,用户仪表板,物联网传感器数据,以及可视化和探索数据等。它还支持处理来自 [Graphite](http://graphiteapp.org/) 的数据。 [Atlas](https://github.com/Netflix/atlas) 是一个内存维度 [时序数据库](https://en.wikipedia.org/wiki/Time_series_database)。 [CouchbaseDB](https://www.couchbase.com/) 是一个开源分布式 [多模型 NoSQL 文档导向数据库](https://en.wikipedia.org/wiki/Multi-model_database)。它创建了一个具有托管缓存的键值存储,用于亚毫秒级数据操作,具有用于高效查询的专用索引器和用于执行 SQL 查询的强大查询引擎。 [dbWatch](https://www.dbwatch.com/) 是一个完整的数据库监控/管理解决方案,适用于 SQL Server、Oracle、PostgreSQL、Sybase、MySQL 和 Azure。专为大规模本地、混合/云数据库环境中的主动管理和例行维护自动化而设计。 [Cosmos DB Profiler](https://hibernatingrhinos.com/products/cosmosdbprof) 是一个实时可视化调试器,允许开发团队深入了解他们对 Cosmos DB 数据库的使用情况。它从您的应用程序与 Cosmos DB 的交互中识别出十几种可疑行为。 [Adminer](https://www.adminer.org/) 是一个 SQL 管理客户端工具,用于管理数据库、表、关系、索引、用户。Adminer 支持所有流行的数据库管理系统,如 MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Firebird、SimpleDB、Elasticsearch 和 MongoDB。 [DBeaver](https://dbeaver.io/) 是一个面向开发人员和数据库管理员的开源数据库工具。它支持 JDBC 兼容数据库,如 MySQL、Oracle、IBM DB2、SQL Server、Firebird、SQLite、Sybase、Teradata、Firebird、Apache Hive、Phoenix 和 Presto。 [DbVisualizer](https://dbvis.com/) 是一个 SQL 管理工具,允许用户管理广泛的数据库,如 Oracle、Sybase、SQL Server、MySQL、H3 和 SQLite。 [AppDynamics Database](https://www.appdynamics.com/supported-technologies/database) 是 Microsoft SQL Server 的管理产品。使用 AppDynamics,您可以监控和趋势化关键性能指标,如资源消耗、数据库对象、模式统计信息等,使您能够在高容量生产环境中主动调整和修复问题。 [Toad](https://www.quest.com/toad/) 是由 Quest 开发的 SQL Server DBMS 工具集。它通过使用广泛的自动化、直观的工作流程和内置专业知识来提高生产力。此 SQL 管理工具解决问题、管理变更并提升关系和非关系数据库的最高代码质量。 [Lepide SQL Server](https://www.lepide.com/sql-storage-manager/) 是一个开源存储管理器实用程序,用于分析 SQL Server 的性能。它通过易于使用的图形用户界面提供对 SQL Server 环境所做的所有配置和权限更改的完整概述。 [Sequel Pro](https://sequelpro.com/) 是一个快速的 MacOS 数据库管理工具,用于处理 MySQL。此 SQL 管理工具通过轻松添加新数据库、新表和新行来帮助您与数据库进行交互。 ## 贡献 - [x] 如果您想为本指南做出贡献,只需提交一个 [Pull Request](https://github.com/mikeroyal/eBPF-Guide/pulls)。 ## 许可证 [返回顶部](https://github.com/mikeroyal/eBPF-Guide#table-of-contents) 根据 [Creative Commons Attribution 4.0 International (CC BY 4.0) Public License](https://creativecommons.org/licenses/by/4.0/) 分发。
标签:API集成, C++, DNS解析, Docker镜像, EVTX分析, EVTX分析, Go语言, Hpfeeds, Linux内核, LLVM, ROOTKIT检测, Rust, URL发现, 内核编程, 可观测性, 可视化界面, 子域名突变, 安全检测, 安全渗透, 开发指南, 开源项目, 性能监控, 技术文档, 数据擦除, 日志审计, 深度包检测, 程序破解, 系统调用, 网络安全, 网络安全分析, 网络流量审计, 网络编程, 负载均衡, 隐私保护