TiDB: A Raft based HTAP database (Paper notes)

TiDB is an interesting new database, and PingCAP is the company driving most of its development. Recently I read the paper written about it, titled TiDB: A Raft based HTAP database, partly due to my interest in its Rust-based TiKV component. I found the paper to be comprehensive and well written. Below is my bullet […]

Learn Rust: Assignment and Memory Semantics

If you are familiar with Java or C/C++, understanding the assignment operator (=) in Rust will demystify a lot of its memory semantics. Assignment in Rust can have a range of outcomes depending on what you are assigning from and to, and on whether you are using the reference operator (&) and the mut keyword […]

Kubernetes Autoscaling – an overview

This post describes the features k8s provides for Automated Scaling of applications. This is Part 3 of a series. Part 1 is an Introduction to K8S and Part 2 talks about Kubernetes Internals. k8s can automate horizontal scaling of pods and has experimental support for vertical scaling. Scaling can even extend to requesting new hardware […]

Kubernetes – the internal architecture

This post summarizes the internal architecture of Kubernetes (k8s). For my previous post on user-facing aspects, see Part 1 of the series. An architectural style that is followed throughout the control plane of k8s is of components communicating with each other using a data store (etcd) as the intermediary. Updates made to etcd are picked […]

Kubernetes – an introduction

I decided to start learning about Kubernetes (k8s) although I have not used it in production yet. These are my notes from the first part of the comprehensive book “Kubernetes in Action”. The second part gets into k8s’s internals. I will write about that as I read more of the book. k8s abstracts away the […]

Book review: The Effective Executive

This is a crisp booklet by the famous management consultant Peter Drucker. It focuses on a few time tested general practices and hammers them home nicely rather than getting lost in the weeds. It draws upon decades of the author’s practice and probably due to that, I was delighted to find subtle gems of practical […]

Book review: It Doesn’t Have to Be Crazy at Work

I read Jason Fried and David H Hansson’s book “It Doesn’t Have to Be Crazy at Work” and found it underwhelming. While the authors advocate a specific approach to running companies and building software, they base it all on the success of just their one company (Basecamp). They do not explain how companies of different […]

Docker — a conceptual overview

Recently I learnt a bit about Docker while using it on a project. I read large parts of a well written book called “Docker Deep Dive” by Nigel Poulton, and some other articles. Here are my notes about some key highlights of Docker. Docker is built on top of a Linux kernel feature called “namespaces”. […]

ListenableFuture vs CompletableFuture — a comparison

In my previous blog post I wrote about how Google Guava’s ListenableFuture is an improvement over Java 6’s Future class. But Java 8 ships with a CompletableFuture class that brings much of the same benefits into the standard Java API. The below code example (again with inline comments) shows how to use CompletableFuture to implement […]

How is Google Guava ListenableFuture better than Java Future?

Google Guava’s concurrency classes provide some advantages over using Java’s default classes. Guava’s Futures offer the following benefits: You can add “listeners” to the result of a Future’s success or failure, instead of explicitly checking for the return of the Future.get(), handling exceptions and so on You can chain multiple asynchronous pieces of code together […]