Designing scalable and reliable systems requires understanding a core set of reusable building blocks. This article covers the most common components — from load balancers and databases to caches and CDNs — and the key trade-offs to consider when using them.
Load Balancer with Multiple Web Servers and Auto Scaling # A load balancer distributes incoming traffic across multiple web servers, providing a single public entry point to the system.
RDBMS # Relational Database Management System
Used when there are strong Relations between data: Design a schema that is unlikely to change, relating tables to each other, then you can retrieve the desired data through SQL. Used when data correctness is very important: Usually provides ACID properties. Changing the schema is a huge undertaking: Requires updating the table schema and migrating data. All programs that use the table with the changed schema need to be modified. join operations can be performed across different tables.
RAG (Retrieval Augmented Generation) is an AI framework that allows developers to add external information without retraining the LLM, improving the accuracy of its answers. As of 2026, it is a widely known technology.
The concept is roughly as follows: First, vectorize external information (the data you want the LLM to know) using an embedding model and store it. After a user enters a prompt, the prompt is also vectorized using the same embedding model. It is then compared against the previously stored vectors to retrieve the most similar pieces of data. These are then integrated by the LLM to generate a response for the user. This approach allows the LLM to answer using specific knowledge integrated by developers without the need for retraining.
If you’re a developer who uses GitHub daily, you probably rely on notification badges to track issues, pull requests, and mentions. But what happens when the notification badge gets stuck — even after clearing everything?
For months, I saw a 1 notification badge that refused to disappear, even though there aren’t any unread messages in any inbox folder. No archived items, no subscriptions, nothing hidden. Still, the badge remained.
Many developers started reporting the same issue as early as September 2025. This wasn’t just a UI bug — it was caused by a spam attack impersonating Gitcoin, leaving backend notification records that GitHub never automatically cleaned up.
Python’s performance bottlenecks were criticized for years,
but thanks to the hard work of developers,
Asyncio was introduced in Python 3.4 to improve performance in specific scenarios.
By Python 3.13, the Free-threaded design (PEP-703) emerged,
allowing the optional disabling of the GIL.
Combined with the pre-existing Multiprocessing and Multithreading,
I have compiled a few records on the principles, differences, and use cases for these three technologies.
This first post will briefly introduce the basic concepts and suitable scenarios for each.
I originally used Notion as my note-taking software.
It’s feature-rich and has a beautiful interface.
However, a few years ago, a privacy controversy arose around Notion,
accusing them of looking at a company’s content stored in Notion,
and even proposing a partnership based on that information.
So, I switched to Joplin for a while,
but eventually moved to Obsidian, which has a large number of plugins, strong community support, and is highly customizable.
A few months ago, I encountered an issue while using rsync to back up data from my MacBook to a NAS.
rsync would appear to be running normally for a while and then suddenly hang indefinitely.
The terminal output showed it syncing files as usual, and then it just… stopped.
There were no error messages, and rsync didn’t exit.
Initially, I thought it might be a large file transfer or an unstable network connection. However, I discovered that if I killed the process and ran the rsync command again, it would resume smoothly from the file where it had previously stuck. This happened several times in a row!
Basic Concept # Docker can be seen as a simplified virtual machine (VM).
Since it doesn’t install a full operating system, it offers a smaller footprint and faster speed.
Image # An Image contains a lightweight runtime environment,
including its libraries and executables.
Update # I’ve moved from Jekyll to Hugo.
This method is only applicable to Jekyll.
Sitemap # A sitemap is an .xml file that contains links to all the pages within a website.
With a sitemap,
a search engine can discover the pages and subsequently create indexes for them.
Then, people browsing the internet can find those pages using keywords.
Jekyll-sitemap # There is a plugin called jekyll-sitemap for Jekyll,
which automatically generates a sitemap whenever the website is rebuilt.