Blog
Notes from building Runnev
Engineering writing about event streaming over HTTP: the transport decisions, the operational realities of long-lived connections, and the delivery guarantees we actually offer.
-
Sizing ring buffers: the retention math
Bytes per event, eviction, and how to pick
max_bytesandretention_secondsso the two bounds tell the same story, with a worked calculation. -
Cursors, sequences, and the delivery guarantee we actually offer
Why we say at-least-once with idempotent writes instead of exactly-once, and how committing your cursor after the side effect gets you exactly-once processing anyway.
-
What a 40-hour HTTP response taught us about intermediaries
The buffers and idle timeouts between a client and us, and the specific settings in nginx, Caddy, Cloudflare, and an AWS ALB we had to change before very long responses stopped resetting.
-
Raw batch mode: shipping protobuf without a schema registry
Why we stopped parsing customer payloads, what the octet-stream ingest path looks like now, and the throughput we got back by not doing a parse we never needed.
-
Why we did not build this on WebSockets
The upgrade handshake failing behind corporate proxies and some CDNs, serverless runtimes that cannot hold a socket, mobile radios dropping idle sockets, and what HTTP/2 gives you instead.