In my previous article, I presented my approach to building an Autocomplete System. Up until that point, the core of the system was presented. That included a stack of technologies such as Hadoop, Zookeeper, Kafka and Nginx.

In this post the focus will be on data partitioning, load balancers and cache. I will also continue enumerating the steps starting from the last in the previous article.

Step 8. Add partitioning in Assembler Triebuilder

Adding partitioning to our system will increase the availability by lowering the latency. It will also be increased in cases when only partitions fail. When only a partition fails, the remaining will be available.


This is part of the series Learning System Design

Credits for original implementation go to Pedro Lopes

What is an Autocomplete System?

It is a feature that phones, or browsers have. When an user starts typing a sentence, he is given a short list of recommended phrases. While this feature looks simple or not interesting, to make it scalable to millions of users with minimal latency is a real challenge.

After looking over the source code of the project, I told myself that it is a lot to digest. I just wasn’t able to follow all the connections. Some of the links from the Gateway…


This will look like a journal.

I recently finished studying System Design Primer and most of the articles from Grokking the System Design Interview. I come with a ML background, so everything was mostly new to me. The theory was good and knowing some details about some tech stacks felt OK, but I was still confused about how these components are glued together.

After reading the Designing Typeahead Suggestion I felt the need for a playground. I thought that the project could be simple enough to find some moderate complex implementations. …

Iftimie Alexandru

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store