Hello! I'm a co-founder at DBOS here and I'm happy to answer any questions :)
Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
21–30 of 51 posts
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#22We use spot instances for most things to keep costs down and job queues to link steps. Can you provide an example of a distributed workflow setup?
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#23Hello! I'm a co-founder at DBOS here and I'm happy to answer any questions :)
How do you persist execution state? Does it hook into the Python interpreter to capture referenced variables/data structures etc, so they are available when the state needs to be restored?
- Which workflows are executing
- What their inputs were
- Which steps have completed
- What their outputs were
Here's a reference for the Postgres tables DBOS uses to manage that state: https://docs.dbos.dev/explanations/system-tables
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#24It just seems that the “durability” guarantees get less reliable as you add more dependencies on external systems. Or at least, the reliability is subject to the interpretation of whichever application code interacts with the result of these workflows (e.g. the shipping service must know to ignore rows in the local purchase DB if they’re not linked to a committed DBOS transaction).
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#25Do you consider ”durability” to include idempotency? How can you guarantee that without requiring the developer to specify a (verifiable) rollback procedure for each “step?” If Step 1 inserts a new purchase into my local DB, and Step 2 calls the Stripe API to “create a new purchase,” what if Step 2 fails (even after retries, eg maybe my code is using the wrong URL or Stripe banned me)? Maybe you haven’t “committed” t…
Where DBOS helps is in ensuring the entire workflow, including all backup steps, always run. So if your service is interrupted and that causes the Stripe call to fail, upon restart your program will automatically retry the Stripe call and if that doesn't work, back out and run the step that closes out the failed purchase.
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#26I see the example for running a distributed task queue. The docs aren't so clear though for running a distributed workflow, apart from the comment about using a vm id and the admin API. We use spot instances for most things to keep costs down and job queues to link steps. Can you provide an example of a distributed workflow setup?
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#27Hello! I'm a co-founder at DBOS here and I'm happy to answer any questions :)
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#28Hello! I'm a co-founder at DBOS here and I'm happy to answer any questions :)
Can you change the workflow code for a running workflow that already advanced some steps? What support DBOS have for workflow evolution?
That said, we know sometimes you have to do surgery on a long-running workflow, and we're looking at adding better tooling for it. It's completely doable because all the state is stored in Postgres tables (https://docs.dbos.dev/explanations/system-tables).
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#29this is good until you the postgres server fills up with load and need to scale up/fan out work to a bunch of workers? how do you handle that?
(disclosure, former temporal employee, but also no hate meant, i'm all for making more good orcehstration choices)
Re: Show HN: DBOS TypeScript – Lightweight Durable Execution Built on Postgres
#30> What’s unique about DBOS’s take on durable execution (compared to, say, Temporal) is that it’s implemented in a lightweight library that’s totally backed by Postgres. All you have to do to use DBOS is “npm install” it and annotate your program with decorators. The decorators store your program’s execution state in Postgres as it runs and recover it if it crashes. There are no other dependencies you have to manage,…
The big advantages of using Postgres are:
1. Simpler architecturally, as there are no external dependencies.
2. You have complete control over your execution state, as it's all on tables on your Postgres server (docs for those tables: https://docs.dbos.dev/explanations/system-tables#system-tabl...)