Web Analytics

使用Go语言实现eBPF程序内核态与用户态的双向数据交换

本文永久链接 – https://tonybai.com/2022/07/25/bidirectional-data-exchange-between-kernel-and-user-states-of-ebpf-programs-using-go 在之前的两篇文章中,无论是使用C语言开发eBPF程序,还是使用Go开发的eBPF程序,都是hello world级别的,可能有用,但谈不上十分实用。 通常来说,一个实用的eBPF程序,它的内核态部分与用户态部分是有数据交换的,有了这种数据交换,eBPF才能发挥更大的威力。而要想让eBPF程序具备较强的实用性,eBPF MAP是绕不过去的机制。 ...

July 25, 2022 · 11 min · Tony Bai

使用Go语言开发eBPF程序

本文永久链接 – https://tonybai.com/2022/07/19/develop-ebpf-program-in-go 在前面的《使用C语言从头开发一个Hello World级别的eBPF程序》一文中,我们详细说明了如何基于C语言和libbpf库从头开发一个eBPF程序(包括其用户态部分)。那篇文章是后续有关eBPF程序开发文章的基础,因为到目前为止,无论eBPF程序的用户态部分用什么语言开发,运行于内核态的eBPF程序内核态部分还是必须由C语言开发的。这样一来,其他编程语言只能拼一下如何让eBPF程序的用户态部分的开发更为简单了,Go语言也不例外。 ...

July 19, 2022 · 11 min · Tony Bai

使用C语言从头开发一个Hello World级别的eBPF程序

本文永久链接 – https://tonybai.com/2022/07/05/develop-hello-world-ebpf-program-in-c-from-scratch 近两年最火的Linux内核技术非eBPF莫属! 2019年以来,除了eBPF技术自身快速演进之外,基于eBPF技术的观测(Observability)、安全(Security)和网络(Networking)类项目如雨后春笋般出现。耳熟能详的的包括:cilium(把eBPF技术带到Kubernetes世界)、Falco(云原生安全运行时,Kubernetes威胁检测引擎的事实标准)、Katran(高性能四层负载均衡器)、pixie(用于Kubernetes应用程序的可观察性工具)等。 今年3月份发布的thoughtworks技术雷达第26期也将eBPF技术放入试验的象限阶段。 eBPF技术火热,但很多童鞋还不知道eBPF技术究竟是什么,能做什么?在这篇文章中,我将带大家简单了解一下什么eBPF内核技术以及如何从头开始用C语言开发一个Hello World级eBPF程序。 ...

July 5, 2022 · 20 min · Tony Bai

Go程序员拥抱C语言简明指南

本文永久链接 – https://tonybai.com/2022/05/16/the-short-guide-of-embracing-c-lang-for-gopher 本文是为于航老师的极客时间专栏《深入C语言和程序运行原理》写的加餐文章《Tony Bai:Go程序员拥抱C语言简明指南》,这里分享给大家,尤其是那些想学习C语言的Gopher们。 你好,我是Tony Bai。 ...

May 16, 2022 · 23 min · Tony Bai

我来告诉你Go项目标准结构如何布局

本文永久链接 – https://tonybai.com/2022/04/28/the-standard-layout-of-go-project 每当我们编写一个非hello world的实用Go程序或库时,我们都会在项目结构、代码风格以及标识符命名这三个“门槛”前面踯躅徘徊许久,甚至始终得不到满意答案。 ...

April 28, 2022 · 11 min · Tony Bai

使用Docker Compose构建一键启动的运行环境

本文永久链接 – https://tonybai.com/2021/11/26/build-all-in-one-runtime-environment-with-docker-compose 如今,不管你是否喜欢,不管你是否承认,微服务架构模式的流行就摆在那里。作为架构师的你,如果再将系统设计成个大单体结构,那么即便不懂技术的领导,都会给你送上几次白眼。好吧,妥协了!开拆!“没吃过猪肉,还没见过猪跑吗!”。拆不出40-50个服务,我就不信还拆不出4-5个服务^_^。 ...

November 26, 2021 · 10 min · Tony Bai

Go函数调用链跟踪的一种实现思路

这篇文章的初衷是想解答知乎上的一位知友提出的问题。没想到完成一种实现后,这个问题居然被删除了。那么既然实现了,就分享出来吧。问题的原文找不到了,问题大致是这样的: 一个程序中存在多个函数调用链都调用了函数D: A1 -> B1 > C1 -> D A2 -> B2 > C2 -> D A3 -> B3 -> C3 -> D ... ... 那么,如果某次函数D被调用时出现了问题,那么怎么知道这个D是哪个函数调用链里的D呢? 有些gopher可能会说通过Delve在线调试打印函数调用栈可以知晓D的调用链,还有些gopher可能会说通过各个函数中输出的业务日志可以查明出问题的D归属的函数调用链,这些都是可行的思路。 ...

December 10, 2020 · 10 min · Tony Bai

go protobuf v1败给了gogo protobuf,那v2呢?

近期的一个项目有对结构化数据进行序列化和反序列化的需求,该项目具有performance critical属性,因此我们在选择序列化库包时是要考虑包的性能的。 ...

April 24, 2020 · 7 min · Tony Bai

Go语言开源十周年

本文翻译自Go官方博客上Russ Cox代表Go核心团队发表的“Go Turns 10″一文。 生日快乐,Go! 这个周末,我们庆祝Go正式对外发布10周年,即Go作为开源编程语言和构建现代网络软件生态系统的10周年诞辰。 为了纪念这一时刻,Go gopher的创建者Renee French(用下面的新作)描绘了这个令人愉快的场景: ...

November 9, 2019 · 5 min · Tony Bai

组织Golang代码

本月初golang官方blog(需要自己搭梯子)上发布了一篇文章,简要介绍了近几个月Go在一 些技术会议上(比如Google I/O、Gopher SummerFest等)的主题分享并伴有slide链接。其中David Crawshaw的“Organizing Go Code”对Golang的代码风格以及工程组 织的最佳实践进行的总结很是全面和到位,这里按Slide中的思路和内容翻译和摘录如下(部分伴有我个人的若干理解)。 ...

October 21, 2014 · 6 min · Tony Bai