> Whenever the Dispatch function encounters a temporary error like a rate limit, the operation is rescheduled with automatic adjustment of the back-off delay.
That's great. Is it persisted to retry even after a reboot?
What informs the end user, in interactive situations, and what does it tell them?
What if the operation is delayed so much that it no longer makes sense; can we cancel it?
How do we identify a particular one, out of thousands going through the same function: by some of the arguments, like in memoization?
Thanks a lot for reading the post and reaching our with questions!
> That's great. Is it persisted to retry even after a reboot?
Absolutely! Our scheduler service manages the state on behalf of the application, even if the program restarts, the operation persists until completion.
> What informs the end user, in interactive situations, and what does it tell them?
Since the Dispatch SDK integrates directly in the code of the application, it's compatible with typical system observability tools. Say you're using metrics or traces to track operations, you can emit this telemetry on your dispatch functions. That being said, we know how important it is to have a built-in solution for this!
> What if the operation is delayed so much that it no longer makes sense; can we cancel it?
Different ways to solve this, one is to simply raise a permanent error so the operation stops, but in some cases it makes more sense for the system to expose controls so the operator can act on group of similar operations for example. Those are features on our roadmap at this time, but definitely agree on the importance!
> How do we identify a particular one, out of thousands going through the same function: by some of the arguments, like in memoization?
Searching through the state or history of the systems is also a key feature that a platform like Dispatch needs to provide to be "complete". We're still in early development so we haven't gotten to add this feature yet, but definitely excited to delivering it!
Today marks an important milestone for us with the launch of the developer preview of Dispatch.
Along with a serverless scheduler, we released an open-source Python SDK, providing developers with a simple programming model to integrate with Dispatch.
This is the first of many steps on our mission to make distributed application development radically simpler.
To all developers tired of wrestling with infrastructure and eager to experience better tools to develop distributed applications, check out our blog post and take Dispatch for a ride!
Great post! I suggest adding a link to Dispatch earlier in the body. Right now the reader has to get all the way to "You can sign up to the developer preview for free today at https://console.dispatch.run !" before they know where to click (or maybe I need to get new eyeglasses!)
People have told us many times that they tried to use Temporal to solve the problems that we designed Dispatch to solve for, so it's a fair comparison!
What we hope to deliver with Dispatch is a model that is a lot more incremental in its adoption and much simpler than what existing solutions have been able to achieve so far, both in terms of development UX and operational complexity.
Give it a try, and let us know what you think of it!
We can run it forever but it’s rarely useful. Usually, all operations have an associated expiration time so if it’s impossible to succeed it will eventually abort.
Sorry, but what does this actually do? I normally solve the problem described here by wrapping the fetch function with a resolving while and a timeout.
To summarize, our scheduler maintains state to allow retries to happen even if the application moves between compute instances, which is quite common when running in the cloud (e.g., deploying on autoscaling containers, or serverless functions).
I so wish AI could create systems that deal with the complexity of problems that Dispatch solves for. Until then, we’ll still have to write a few lines of code.
That's great. Is it persisted to retry even after a reboot?
What informs the end user, in interactive situations, and what does it tell them?
What if the operation is delayed so much that it no longer makes sense; can we cancel it?
How do we identify a particular one, out of thousands going through the same function: by some of the arguments, like in memoization?