Architecture Weekly #97 - 17th October 2022
Welcome to the new week!
There are only a few patterns that I’m comfortable saying: “You should use it always if you want to build mature system”. One of them is the Outbox Pattern. Why? Because it guarantees that your business workflows and communication will not be stuck in the middle. It does that by storing transactionally the state change together with the message you want to publish. So it’s either state change that is recorded, and the message is scheduled to be published, or nothing is recorded. There are various approaches to implementing it:
transactional, which wraps the save and publishing with the transaction,
pull-based, that continuously queries the database for new messages,
push-based, which gets notifications from the database and pushes it forward.
Last week I wrote about how you can implement the last one by plugging into the Postgres Write-Ahead Log. I also provided an example of how you could implement it in .NET. Read more in:
I have a special offer for you!
I'll run an online open workshop with Practical Introduction to Event Sourcing in November. I think that’s a great starting point for you to start your journey, learn the foundations, get hands-on experience, and understand how to apply it in your project.
With Domain-Driven Design Europe, we decided to appreciate that you’re an Architecture Weekly subscriber and give you a 200€ discount! Click this link below and sign up, there are still some spots left, but they’re limited!
Getting back to Postgres. I’m biased, but I’m also extremely impressed by the number and quality of features the Postgres team delivers. Check the latest release to get the feeling:
Postgres engine is becoming a de-facto lingua franca of relational databases:
CockroachDB - distributed and scalable is using it as their engine,
same with AWS AuroraDB,
Now also Microsoft announced that they’re bringing it to Azure Cosmos DB. That’s the effect of cooperation from buying Citus three years ago.
Seeing the features like extended JSON features we’re using in Marten, mentioned logical replication, and other cool stuff makes it an extremely versatile and rock-solid database. When I started using it for the first time and jumped from MSSQL, I thought, “oh well, free database for sure it cannot compete with paid product”. And I was wrong. MSSQL is already left behind.
Ok, let’s end this love letter. From the other interesting topics, I brought you this time a few reports:
You always need to be cautious reading the company reports; they’ll always be biased and sprinkled with marketing sugar, but comparing the trends and conclusions, can give you a good picture of the industry trends. Btw. would you like to see my extended analysis about them?
Speaking about trends, check:
As always, they managed to put a lot of buzzwords in their article.
I’m not a huge fan of the Lex Friedman podcast. CoRecursive is soooo much better. Yet, I cannot deny that he can get great guests there. If you have spare 5 hours, check the episode with John Carmack. A lot of the game, programming and IT industry:
Check, also other links!
Cheers
Oskar
p.s. I invite you to join the paid version of Architecture Weekly. It already contains the exclusive Discord channel for subscribers (and my GitHub sponsors), monthly webinars, etc. It is a vibrant space for knowledge sharing. Don’t wait to be a part of it!
p.s.2. Ukraine is still under brutal Russian invasion. A lot of Ukrainian people are hurt, without shelter and need help. You can help in various ways, for instance, directly helping refugees, spreading awareness, and putting pressure on your local government or companies. You can also support Ukraine by donating, e.g. to Red Cross, the Ukraine humanitarian organisation. You may also consider joining Tech for Ukraine initiative.
Architecture
Oskar Dudycz - Push-based Outbox Pattern with Postgres Logical Replication
Oren Eini - On the critical importance of accepting and working with invalid data
Derek Comartin - Event Choreography for Loosely Coupled Workflow
Distributed Systems
Databases
Gunnar Morling - Open-source Change Data Capture With Debezium
Michael Aboagye - Improve database performance with connection pooling
DevOps
Digital Ocean - Kubernetes adoption journey for startups and SMBs
Alex Ellis - Debug GitHub Actions with SSH and launch a cloud shell
The Unhandled Exception - Episode 41: OpenTelemetry - with Martin Thwaites
Go
Java
.NET
Jeremy D. Miller - Marten and Friend’s (Hopefully) Big Future!
Stephen Cleary - Modern C# Techniques, Part 3: Generic Code Generation
Mark Seemann - Refactoring a saga from the State pattern to the State monad