Ax's Findings

by Akshat Mahajan

distributed systems, programming languages, and the internals of operating systems

Read this first

Useful System Tricks

You can’t debug production systems without a clever choice of tools. In this article, I’d like to talk about the ones I’ve found most useful.

 strace

From the man pages:

In the simplest case strace runs the specified command until it exits. It intercepts and records the system calls which are called by a process and the signals which are received by a process.

Given a process ID, strace can tell you exactly what a process is doing at the kernel level. Think of it as a cheap tracing system. I was once able to identify deadlock merely by watching a process this way.

This is useful if you either a) don’t have distributed tracing to figure out what your application is currently doing or b) you don’t have enough logging.

A simple example with Chrome:

$ ps -eaf 
UID        PID  PPID  C STIME TTY          TIME CMD
akshat    8174  3105  0 23:09 ?        00:00:00

Continue reading →


Consistent Hash Rings Explained Simply

Consistent hash rings are beautiful structures, yet often poorly explained. Implementations tend to focus on clever language-specific tricks, and theoretical approaches insist on befuddling it with math and tangents irrelevant.

This is an attempt at explanation - and a Python implementation - accessible to an ordinary high-schooler.

 Why Hash?

Fairly often, you need a way to take an item and get back another stored item. For instance, you may want to take a URL and get back the server the website is hosted on.

These cases can be accomplished by a map, which effectively acts like a phonebook - you look up names (or keys), and you get back information (or values) about the name.

An index in a book, too, is a map - given a word, it can take you to the exact page the word is referenced.

All a map is is a way to take something that can point to another item, and then return that

Continue reading →