/images/avatar.jpg

Kiosk Studio (2022)

如何使用eBPF进行追踪

eBPF 我们知道了程序的工作原理和编程接口以及事件触发机制。那么我们就可以开始 eBPF 程序的开发和执行过程了。

跟踪类 eBPF 程序主要包含 内核插桩 (BPF_PROG_TYPE_KPROBE)、跟踪点(BPF_PROG_TYPE_TRACEPONT)以及性能事件(BPF_TYPE_PERF_EVENT)等类型的程序,而每类的 eBPF 程序又可以挂载到不同的内核函数、内核跟踪点或者性能事件上。当这些内核函数、内核跟踪点或者性能事件被调用的时候,挂载到其上的 eBPF 程序就会自动执行。

Redis持久化机制

Redis 最常见的一个用处就是当作缓存服务器,将后端数据库中的数据存入内存中,再直接从内存中读取数据是一个非常高效的方式。但是内存存储模式有一个问题,掉电后会丢失数据,所以作为一个数据库来用的话必须考虑一旦服务器宕机,内存中数据的保存。

Redis的持久化机制分为 AOF(Append Only File) 日志和 RDB 快照。

认识eBPF

eBPF 是从 BPF(Berkeley Packet Filter)技术扩展而来,最初就是为了实现快速包过滤而实现的一门技术,因为可以直接在内核中执行,避免了向用户态复制每一个数据包,从而极大提升了包过滤的性能。后来由于这个思路非常受到欢迎,在各个场景都需要内核态的快速开发,使得BPF不再限于网络栈,而是内核的一个顶级子系统。即成了现在的 eBPF 。

https://img1.kiosk007.top/static/images/blog/ebpf_logo.png

ebpf_logo

Redis为什么这么快?

一提到 Redis ,首先的一个印象就是快!但是之前很少研究过Redis底层的一些实现。之前接触Redis比较少,有一个项目是做限流用到了 Redis,大致原理是记录最近访问过的IP和时间,如果下次再有请求到来匹配IP查找之前是否有过访问,如果有则判断时间差是否小于一小时,小于则禁掉,大于则更新时间戳,如果没有就是第一次访问。

实现一个Web服务-(一)

熟悉 Golang 的话就会知道,用官方提供的 net/http 标准库搭建一个 Web Server,是一件非常简单的事。既然 Golang 利用其精简的语法实现了 Web Server,那么是有必要知其然和知其所以然。最近看到很多文章都介绍了如何实现一个 Web ,那么今天做一个总结。