This talk will be relevant for a while as we all are looking into various ways forms of asynchronous data, multiple data streams, and complex dependencies in transactions . Love this talk !!!!!
Need to learn the Saga Pattern for my first developer job, and this video was certainly a superb starting point! Seldom does new concepts click as fast and easily as this one did after watching your talk. Thank you, Caitie!
Two questions 1. The presenter says they are using Azure Service Bus as a log. How does this work? I don't understand how a queue would be a useful way to store log information. 2. They mention a "CP log", what does that mean in this context?
So load data into big bucket and then, at leisure, process and parcel out to store. On fail, retry. This is similar to CQRS except with that the big bucket is kept around and considered to be the database.
So if I'm understanding correctly: in order for the Saga to survive the Coordinator dying, either the forward transaction or the compensating transaction must be idempotent. However in the example of email, neither seems to be the case. Obviously sending out the email is not idempotent, nor would I want to flood the customer's inbox with hundreds of "disregard the last email" messages if the compensating action needs to be retried.
What's stopping you from sending a second email? That sort of thing happens all the time with e-commerce sites. You get one email with your order confirmation and another later when the order has shipped. You may also receive an email saying your order was cancelled or the shipment was delayed. All of those are valid compensations for the original email(s).
An LLT is a saga if it can be written as a sequence of transactions that can be interleaved *with other transactions*. What the presenter mentioned at 10:11 (the one gotcha that sub-transactions cannot depend on one another .. T2 cannot take input from T1) is not correct!
I wonder if this pattern (transaction idempotentcy) can be applied in financial world? Probably it will be more complex solution - if you for example do fund transfer, how would your system retry if transaction failed...Also how compensation will work?
Hi Basilio100, Maybe then you need to add a bit of logic there and identify your transaction with an ID, e.g see if you have already applied this ID rollback... What do you think?
I don't see the relationship between this and redux-saga, but hey I watched the full thing and maybe, later on, I might come back and laugh at how stupid I was :) great speech.
An excellent presentation, but I have a question, consider T1 for booking hotel runs without problem and we call T2 start, at this moment another service that creates reports for hotels starts to sending new booking records to hotels, but T2 fails and we runs c2 and c1, how should we handle this kind of exceptions?
@@renatoargh or i think another approach is we will have a third state like 'processing'. And in the happy flow we must send 2 request, one for normal transaction processing, another for converting 'processing' to 'accepted' state. So the report query only use records with the 'accepted' state. This pattern as I remember is called 'semantic locking' found in the Microservices Patterns book.
she keeps mentioning about the paper. Do people read many published papers? How do I know which kickass concept I have to use? It must be published somewhere in a paper?
they are usually the source of some of the trends for more complex patterns. It is good after you read a blog or presentation to see in more details and get your own conclusion for your domain.
Totally stupid question - how do you achieve idempotency when you are making a totally new car/hotel/flight booking? Wouldn't that be a POST request? a new entry in db of the remote service? and POST is not idempotent.
Some kind of request_id for request deduplicating. But how to generate it reliable in a distributed manner even in the case of Coordinator crash is not an easy task :))
25:43 Doesn't it make sense t hat it's always the best game they've ever had? Doesn't seem that people are likely to be as upset or call in if you got their stats wrong on a game that they played terribly.
This is very important actually. You need to capture that compensating transaction failed and mark it for manual intervention to fix it manually. Also, you can have a retry mechanism in place that could help but not always, manual intervention might still be needed. Sometimes even manual intervention could be hard to do as some other events are already applied some changes to that resource so it can become quite challenging to get back to a consistent state in this case.
Most people, including professional developers, don't have public speaking as their day job. She was perfectly understandable the way she presented it.
Great content but TERRIBLE Speaker: Comme on, we are ment to work on a global scale. So do not speak the way you would speak for a bunch of local American-Friends in a TacoBell . Get dressed, sneeze and moderate your talking speed, please!
comments about attire aside, if you don't like the video's speed, you can slow it down by clicking 'settings' in the bottom right, and selecting 'speed'. there just isn't a speed that's appropriate for everyone--I'm a native speaker, so I prefer quicker speakers. I think the best option is for the speaker to speak however fast they want, and then let the users decide at what speed they wish to listen.
seriously, a tech guy commenting about the attire? what about male presenters on shorts and t-shirts? I dont find the dress too bad. and the presentation is pretty good too. like +lennahc said you can slow the speed and turn on the caption.
Well I do agree that the speaker talks fast, but it didn't bother me much and I'm not a native speaker. She speaks clearly and loud enough and honestly I prefer this to those 2-hour long talks where the speaker is more concerned about his developer tales and jokes than the subject of the talk.