Queues offer a promise of reliability for integrating applications, but can cause more subtle operational risks.
Queues exhibit ‘bi-modal behavior’ — low latency when everything is working well, but can rapidly form large backlogs when a failure occurs. This can dramatically increase the recovery time from outages.
Amazon offer an extremely interesting article about the reliability of queuing, with strategies to limit and manage backlogging.
How often have you found commit messages in your Git history to be uninformative? Or alternatively, wordy rambles that are slow to read — and may well not have the information you need anyway?
Headline + Bullet Points is an approach I’ve found to make Git commit messages informative and fast to write.
With microservices architectures, one key question is where should the boundaries be. Is every entity a separate service? And how fine-grained should service architectural divisions be? We can offer some simple rules of thumb.
Recently I was conducting an evaluation of several different databases for a messaging workload. While benchmarking Apache Cassandra, I noticed unusual patterns in performance metrics. I followed these clues and eventually found some major thread-pool design questions and a potential 18x performance gain realizable on Windows.
Naming is the most important part of design. Concise yet meaningful names are hugely important.
One of my top recommendations to improve legacy code, is to improve & clarify naming. Names should be short and sweet, yet meaningful. For example — Customer.Name.
Blocking methods in Java often declare they may throw InterruptedException. How should we handle it?
In this article, Brian Goetz explains why rethrowing it is usually the most correct approach.
Documentation is important. All of us have experienced the challenge of finding the documentation we need, and most of us have struggled to try and write well. But it need not be so difficult.
Following is an easy approach plus a few guidelines that will help to produce & maintain real, usable, documentation easily.
Eclipse recently has suffered increasing numbers of questionable autocompletions — sometimes auto-wrongly replacing perfectly good code typed by the developer.
While there might be a few underlying issues, I found replacing “map.put()” with “map.compute()” particularly annoying and went to investigate. Here’s the solution.
Just today, I found the “amusing” fact that Tomcat server developers have taken it upon themselves to delete support for the HTTP Status Reason.
Think “200 OK” or “404 Not Found”. Even for applications sending a reason & clients expecting it, Tomcat is coded to explicitly drop the value — sending just a bald 200 or 404.
Unsurprisingly for those with the slightest knowledge of protocol compatibility, this is now breaking clients in the wild.
When processing SQL data in Spark, sometimes single rows are not the right unit — your calculation may need a collection or group of records as input.
This post shows how to group SQL data for use in Spark. Continue reading