Skip to content
View codecasualty's full-sized avatar
🐢
Distri-but-ed systems 😄
🐢
Distri-but-ed systems 😄

Block or report codecasualty

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
codecasualty/README.md

Hi, I'm Subodh

I'm a senior backend engineer at Clickpost, working remotely from India. I work on the platform that predicts delivery dates for e-commerce orders: making APIs fast, keeping data consistent, and finding out why something slowed down. Before that I was at OnePlus R&D and TCS, and I did my M.Tech in Computer Science at IIT Bombay.

Outside work I build things to understand how distributed systems actually behave when parts of them fail.


What I'm building

BeeDB is a replicated key-value store in Java 21 with a Raft implementation I wrote by hand. It speaks the memcached protocol, writes every change to a CRC-framed write-ahead log, and only acknowledges a write once a majority has it and it is on disk.

It runs live on three nodes at beedb.subodhlatkar.com. Every few minutes one of them is killed on purpose, and you can watch the other two elect a new leader and the dead one catch up. From the live server:

  • about 1,500 writes a second with a p99 of 20 ms, on one 2-vCPU machine
  • no acknowledged write lost in the crash tests
  • 37 hours of continuous node kills after the latest fix, with the write-ahead log never above 200 KB

The bug behind that last fix was the most interesting one so far: a follower saved the same five entries half a million times, until its log was 478 MB and it could no longer restart.

It started as John Crickett's build your own memcached challenge.

Writing

Building BeeDB is a short series for people who have never heard of Raft:

Earlier work

The pinned repos below are mostly from IIT Bombay: a C++ key-value server over gRPC, my M.Tech thesis (BPMN models to Petri nets), a shell for xv6, and a concurrency assignment on sequential consistency.

Things I work with

Java, Python, C++ · Django, Spring Boot, FastAPI · ScyllaDB, PostgreSQL, Redis, Kafka · Raft, write-ahead logs, replication · Docker, Linux, AWS

Reading now

In Search of an Understandable Consensus Algorithm (Ongaro & Ousterhout) and, next, the Raft dissertation.


subodhlatkar.com · LinkedIn · mail.subodhlatkar@gmail.com

Pinned Loading

  1. beedb beedb Public

    BeeDB is a distributed key-value store with Raft consensus

    Java

  2. KeyValue-Store KeyValue-Store Public

    A C++ key-value server over gRPC: concurrent GET/PUT/DELETE on a thread pool, with switchable LRU and LFU caching. IIT Bombay course project

    C++

  3. xv6-Shell xv6-Shell Public

    A shell for the xv6 teaching operating system, in C: sequential and parallel commands, I/O redirection, pipes, and running commands from script files. IIT Bombay OS course project.

    C

  4. MTP MTP Public

    M.Tech thesis at IIT Bombay: a Java tool that turns BPMN business-process models into executable Petri nets, with Graphviz views of both, so a workflow can be simulated and analysed.

    Java

  5. Program-Verification-under-Sequential-Consistency Program-Verification-under-Sequential-Consistency Public

    CS 766 assignment at IIT Bombay (with Sachin Singh Lodhi): enumerates every execution of small concurrent programs under sequential consistency, discards cyclic ones using rf/ws/fr edges, and check…

    Java