3 ms·
Can't you replay pending requests? How can you mitigate the issue of differing side effects generated by the new / old versions?
by JackHopkins 3y ago
Can't you replay pending requests? How can you mitigate the issue of differing side effects generated by the new / old versions?
- whoiskatrin 3y agoalso would be great to see a deep comparison with Temporal and AWS Func
- pavel_pt 3y agoAre there any aspects in particular that would be of interest?
- whoiskatrin 3y agoI'd love a deep technical comparison, but it would also be great to understand if Restate is better than Temporal for specific use cases and vice versa. When someone should choose one of them over another
- p10jkle 3y agoif you replay the request on the new version then you might encounter new steps that don't match what you have in the journal. temporal users know this pain well...
- tveita 3y agoRolling a task over to a new version should be "safe" in that you can detect conflicts and roll back if the sequence of calls does not match the old version. For a post about "solving" durable execution I would expect both a scale-to-zero way to keep older versions around indeterminately - I guess the Lambda based approach does qualify - and a safe and controlled way to upgrade task versions iff the execution history is compatible.
- pavel_pt 3y agoHow do you imagine detection of conflicts working?
- tveita 3y agoEach execution by design has a record of all calls with side-effects, with input and output. If you replay history up to the newest call and all calls are identical, that specific execution instance is compatible with the new code and can be upgraded. If not it should be rolled back, and you can either deploy a fixed version of the code with backwards compatibility, or delete executions that can not be upgraded. Backwards compatible code can be written as if (workflowVersion() >= FIX_VERSION) new_way() else old_way() There should be two ways to get the version for backwards compatibility: workflowVersion() is replayed and can change between side effect calls, e.g executions will use the old retry logic until they reach the current point in time, when they will switch over to the new one. originalWorkflowVersion() is constant, e.g. all executions that started before NEW_TAX_RULE will keep using the old tax rules for all calculations.