Every sharded-data system (a distributed datastore) has (or aims for) three fundamental properties: data consistency, data availability, and that it is tolerant to a network partition (a subset of nodes not being able to reach the rest of the cluster). But due to simple laws of physics it is impossible to have all of these. …
I’m pretty sure we all know what technical debt is, attributed to Ward Cunningham in 1992, it basically states that there is no free lunch. But I love it. It makes us ship things quickly, validate them then refine them later. But it comes with a condition…
The foundation of every algorithm in a distributed system is on what kind of underlining hardware system it will execute on. In practice, nodes (physical or virtual machines) and communication links between them (the physical network layer), can behave in a variety of ways. So for an algorithm to be correct, we need to assume what properties the underlining systems will have.
Multithreading is hard and if not coordinated and synchronized correctly it is way harder (talking about data races). This is my Infobip DevDays conference presentation where I tried to explain the Java Memory Model specification and how memory consistency is achieved.
If time is money, then clocks are rather an important part of the whole picture. Let’s see how we handle time ticking in a computer system.
If you do any Java programming (or any other JVM language) it is pretty mandatory to know how our code is loaded and executed. With this presentation, I’ll try to explain JVM architecture with its main components, the Class Loader, Runtime Data Area, and the Execution Engine.
In a multithreaded program, races are rally bad. The reason for this is that a program is compiling correctly, tests are passing and it runs in production for months, and then, all of a sudden, the program returns a result that is everything but the expected one.
In order for a CPU to see all the different memories as a single fast and large memory component (see memory hierarchy) and to boost the performance by not going to the main memory to fetch the data, modern processors rely heavily on caching. Processors have multilevel caches after which, in case of a cache …
Lambdas and streams are awesome and powerful, but with that power comes the responsibility. Just because they are modern and cool doesn’t mean that you should rewrite everything to use them.
Doing things with multiple threads is hard. Here are ways to make it easier, clearer and, most importantly, safe and performant.