4 ms·
This is a really great article. I especially like that the author pointed out some of the pitfalls with non-acid systems. I started wondering at the beginning
by ianamartin 9y ago
This is a really great article. I especially like that the author pointed out some of the pitfalls with non-acid systems.
I started wondering at the beginning of the article how many people were going to read it, try to implement it in mongo, and faceplant.
The only thing that strikes me as odd about the hypothetical example is that I can’t imagine a universe where you would want a request for a ride to complete 72 hours after it initially failed.
I get the point of keeping the information around for 3 days in case of errors. And perhaps my imagination is lacking, but most of the cases where I would want to implement this model are time-sensitive. I need a ride now. I need a message guaranteed to deliver exactly once.
Actually, the message queue aspect is how I think of this in general. It’s an application/database layer that takes an at least once mq system and forces it to be at most once. The combination then seems to imply exactly once.
Actually, after writing that out l, I can now think of a really great use case for this that isn’t time sensitive. ETL systems.
Let’s say you are streaming live updates from some third party system to some staging area and triggering processes from there through a broker to transform and load data into a warehouse.
Your team pushes an update that breaks something on Friday night. Nobody works that much on the weekend, so no ones cares. The dev lead gets notifications, but gets to take it easy until Monday morning because they (trigger warning: intentional singular they) know that everything can be replayed and resolved after the bug is fixed. Even in the case of frequently changing api data, you have the entire mutation history stored in your table and can accurately replay it.
I can get on board with this.
And yeah. Sorry for thinking out loud. Now I’m thinking of all kinds of place in my web apps this can be applied, as the article suggests. I think I need to write a Python wrapper around this concept and make it dead simple to include in projects.
Thank you again to the author for this very clear and excellent article.