let there be jitterbug - part 1
the why:⌗
I am a software engineer, mainly working on the backend, and I’ve been accustomed to writing APIs and Developer CLI tools for a while. Don’t get me wrong, I love working in the backend mines, it’s fun, it’s engaging, I excel in this part of building scalable backends. But, it does get less engaging when all you do is build CRUD apps (just kidding, APIs are not just CRUD apps, a lot goes into building scalable APIs and backend systems) for the better part of your day.
I write a lot of Go, and I wanted to dig a little bit deeper into what CLIs can actually do, beyond just wrapping external APIs. That’s how I stumbled into interacting with the Linux Kernel through eBPF [?]. A genuinely impressive piece of technology. The more I read about it, the more I wanted to build something real with it.
the what:⌗
As a beginner project into this new tech, I am working on a network chaos engineering tool. I want to build a simple CLI tool that might help an engineer understand how their products behave when the network isn’t. You experiment on a running system to build confidence it will effectively tolerate failures (network failures).
the how:⌗
This CLI tool will leverage eBPF (extended Berkeley Packet Filter) [?] and Linux Traffic Control (TC) [?] to inject realistic network conditions directly into the local development loop. The Go CLI binary will compile and load an eBPF program (written in C) into the kernel’s network interface.
man I haven’t written any C code in the longest
Anyway, the eBPF program will dynamically inject random packet drops, simulate high-jitter delays, and artificial TCP connection drops that exactly mimic a user’s network status in different conditions (congested-wifi, deep-rural, cellular-5g e.t.c). This will force the backend systems to prove they can survive real-world network infrastructure before deploying to production.
More coming soon!