Architecture Weekly Issue #94. Articles, books, and playlists on architecture and related topics. Split by sections, highlighted with complexity: 🤟 means hardcore, 👷♂️ is technically applicable right away, 🍼 - is an introduction to the topic or an overview. Now in telegram as well.
It's already been a year and a half since Russia's crazy, brutal and unjustified war against Ukraine. We condemn this war and want it to stop ASAP. We continue this newsletter so you can advance your skill and help the millions of Ukrainian people in any way possible. If you want to help directly, visit this fund.
Big thanks to Nikita, Anatoly, Oleksandr, Dima, Pavel B, Pavel, Robert, Roman, Iyri, Andrey, Lidia, Vladimir, August, Roman, Egor, Roman, Evgeniy, Nadia, Daria and Dzmitry for supporting the newsletter. They receive early access to the articles, influence the content and participate in the closed group where we discuss the architecture problems. They also see my daily updates on all the things I am working on. Join them at Patreon or Boosty!
Linearizability versus Serializability 🤟
This issue begins with a clear explanation of "Linearizability versus Serializability" terms. As those are important guarantees in the distributed systems it is important to understand those. Moreover, it's crucial to know, which you will get either of those seldom due to high cost :)
CDC breaks Encapsulation. Does it, though? 👷♂️
One can argue that implementing Change Data Capture can break the encapsulation as it exposes the internal structure of the database outside, and it's not completely untrue, right? However, there are cases where it's complete fine and where it's not. What strategies we can employ to handle the latter case? Find several recipes inside.
Mastering Integration Testing for Microservices 🍼
Testing for Monoliths was not easy, and microservices brought a whole new level of complexity. In this interview with Oleg Šelajev, Developer Advocate at AtomicJar, we are figuring out how tests contribute to the developer experience, what are the expectations from tests and how TestContainers work for a sample project.
Deadlock-Free Separation Logic: Linearity Yields Progress for Dependent Higher-Order Message Passing 🤟
In their paper, "Deadlock-Free Separation Logic: Linearity Yields Progress for Dependent Higher-Order Message Passing," Jules Jacobs, Jonas Kastberg Hinrichsen, and Robbert Krebbers present a new tool called LinearActris. This tool helps to prevent deadlocks and memory leaks in complex computer programs that communicate by sending messages. They combine two methods - session types and separation logic - to check more complicated programs effectively. The paper proves that LinearActris works as intended and all their work is verified using a program called Coq.
Intro to Large Language Models 🍼
This week was a wreck at OpenAI with CEO being fired by board, asked back, the board getting fired, CEO reinstated... But this is not a technical politics newsletter :) Anyway, you probably want to understand how Large Language Models work. I sumbled upon a video with great explanations of what and the how. Enjoy :)
Creating a bespoke LLM for AI-generated documentation 👷♂️
Continuing on the LLMs. Databricks dropped a piece how they trained a custom LLM to generate the documentation for their millions of tables. Surprisingly, it didn't take half a year of a developer team, but actually much less effort. Checkout exactly how much!
Saving $230k per year while moving from AWS to Bare-Metal 🍼
You have probably heard of Basecamp moving to own data center from a cloud saving $7m across 5 years. This is a good demonstration of frugal mentality. Another example you will find here, in the blog post by OneUptime. This piece is peculiar because the folks used EKS from AWS for production and MicroK8s cluster for the test environment, which made it possible to use MicroK8s in production on bare metal.
The adventures of Rendezvous in Heroku's New Architecture 👷♂️
The migration of underlying can go south quickly given the Hyrum's law. This is exactly what happened with Heroku when they changed the underlying behavior of working with dynos - containerised applications of theirs. A detective story with happy end inside.
Raft implementation 👷♂️
And the last one for today - Implementing Raft. Eli Bendersky has a series of blog post where he explains what is Raft, how it works and how you can create your own implementation. Absolutely recommended, if you really need to know how this consensus algorithm works under the hood.