Microservice Trade-Offs
The microservices architecture can be useful, but to know if it's suitable in your context you need to understand its costs and benefits.
Posts that commenters keep linking to, ranked by how many different people have cited them in Hacker News comments. 696 posts.
The microservices architecture can be useful, but to know if it's suitable in your context you need to understand its costs and benefits.
<small>Pssst! Formatting messed up? Add ".md" to the url ✨ If you're stuck using Zoom, jump on [one](https://community.zoom.com/t5/Meet...
You can't safely use the C setenv() or unsetenv() functions in a program that uses threads. Those functions modify global state, and can cause other threads calling getenv() to crash. This also causes crashes in other languages that use those C standard library functions, such as Go's os.Setenv ( Go issue ) and Rust's…
The story of these attacks starts in late 2004. I had submitted my doctoral thesis and had a few months before flying back to Oxford for my defense, so I turned to some light reading: Intel's latest "Optimization Manual", full of tips on how to write faster code. (Eking out every last nanosecond of performance has…
Nano How-To explaining how to setup a root file system with only emacs.
I'm taking a break from debugging books to talk about a calamitous shitshow of textbook writing: Mastering C Pointers: Tools for Programming Power , by Robert J. Traister.
Hi all! I'm starting a new article series here. This one is going to be about Unix utilities that you should know about. The articles will discuss one Unix program at a time. I'll try to write a good introduction to the tool and give as many examples as I can think of. The first post in this series is going to be…
M. Stoeckl's website
This guide is mainly intended for expert programmers familiar with Java concurrency, but unfamiliar with the memory order modes available in JDK 9 provided by VarHandles. Mostly, it focuses on how to think about modes when developing parallel software. Feel free to first read the Summary .
Developers often believe that software performance follows a Pareto distribution: 80% of the running time is spent in 20% of the code. Using this model, you can write most of your code without any care for performance and focus on the narrow pieces of code that are performance sensitive. Engineers like Casey Muratori…
After examining the virtual address layout of a process, we turn to the kernel and its mechanisms for managing user memory. Here is gonzo again: Linux processes are implemented in the kernel as insta
A few hours ago, I sent the following “dear colleagues” email (lightly edited to remove some private details) to all my users at work: This has been a very trying week. For those of you…
Around a decade ago, I was happy to learn about bcache – a Linux block cache system that implements tiered storage (like a pool of hard disks with SSDs for cache) on Linux. At that stage, ZFS on Linux was nowhere close to where it is today, so any progress on gaining more ZFS features in general Linux systems was very…
Apache Storm recently became a top-level project , marking a huge milestone for the project and fo...
The Toolsmith Conference was held in Chapel Hill, NC, in October, 2001, to honor Fred Brooks. Dr. Brooks was a student of Howard Aiken at Harvard, joined IBM to work on the Stretch Project, and later served as chief architect of the IBM S/360. He founded the Computer Science Department at UNC-Chapel Hill in 1964 and…
It's funny and equally sad that year 2015 marks the end of the Windows OS for a lot of people. There are several issues with Windows which, at present, make Spyware/ Malware OS 10 inappropriate and even outright dangerous for a lot of people. The most egregious, of course, is a total abandonment of any form of privacy…
The previous article Docker in Production: A History of Failure was quite a hit. After long discussions, hundreds of feedbacks, thousands of comments, meetings with various individuals and major pl…
Computers and computer systems are build up from deterministic, comprehensible, building blocks. Their operations and behaviors can be understood and reasoned about. I relate my personal beliefs and mindset on this point, and explore some manifestations and ramifications of this philosophy.
Durable execution with just postgres.
Back with a post after 6 years of silence. If you had to parse a microsecond-resolution epoch timestamp as quickly as possible, how would you do it? We’ll take a look at using compiler intrinsics to do it in log(n) time.
A head-to-head performance comparison between the Linux kernel's network stack, and a kernel-bypass stack powered by DPDK.
My previous entry has the amazingly interesting title "Blogging is hard". Gee, what a wuss, says the occasional passer-by. Gotta fix my image, fast. Think, think, think! OK, here's what I'm going to tell you: low-level programming is easy. Compared to higher-level programming, that is. I'm serious.
Here's the graph of a toy benchmark 1 of page-aligned vs. mis-aligned accesses; it shows a ratio of performance between the two at different working set sizes. If this benchmark seems contrived, it actually comes from a real world example of the disastrous performance implications of using nice power of 2 alignment…
Disclaimer: I used to work for Materialize which is one of the systems being compared in this post.
In this article I will take a look at the classic concurrent ring buffer and how it can be optimized to increase throughput.
Tim Kadlec writes about performance, product management, and the web.
As a rule, "sophisticated" progrmming is pretty boring - optimizing the unnecessary to speed up the uninteresting. Here, however, is an incredibly sophisticated package intended for fun and games. The more you know about software, the more astounded you will become as you read this.
I wanted to know how a modern C compiler like clang would process the following C code: #include <stdint.h> int count(uint64_t x) { int v = 0; while(x != 0) { x &= x - 1; v++; } return v; } Can you guess? popcntq %rdi, %rax That is right. A fairly sophisticated C function, … Continue reading The surprising cleverness…