20 comments

  • reecardo 2 hours ago

    We are increasingly using Temporal with Temporal Cloud and soon Nexus to manage numerous workflows. I'm curious what type of observability is avialable for DBOS and how much of that you get for "free". The reason we ended up in Temporal was not that previous job-systems were unreliable, it was simply that nobody wanted to go dig through a database to find out what happened with their job, and nobody has time/energy to build a UI just for that purpose.

    • KraftyOne 2 hours ago

      There's an observability and workflow management UI: https://docs.dbos.dev/java/tutorials/workflow-management

      You can view your workflows and queues, search/filter them by any number of criteria, visualize graphs of workflow steps, cancel workflows, resume workflows, restart workflows from a specific step--everything you'd want.

      Currently, this is available as a managed offering (Conductor - https://docs.dbos.dev/production/self-hosting/conductor), but we're also releasing a self-hostable version of it soon.

      • ChromaticPanic an hour ago

        Recently added DBOS python to one of my FOSS projects. It's awesome, looking forward to seeing what that self hostable observability would look like. I have been looking in the DB and OTEL logs to debug development.

  • rileymichael an hour ago

    glad to see the java sdk released, i've been following it for a while.

    one of the rough edges i've noticed w/DBOS is for workflows that span multiple services. all of the examples are contained in a single application and thus use a single dbos 'system db' instance. if you have multiple services (as you often do in the real world) that need to participate in a workflow.. you really can't. you need to break them into multiple workflows and enqueue them in each service by creating an instance of the dbos client pointed at the other services system db. aside from the obvious overhead from fragmenting a workflow into multiple (and that you have to push to the service instead of a worker pulling the step), that means that every service needs to be aware of and have access to, every other services system db. also worth noting that sharing a single system db between services was not advised when i asked.

    (docs for the above: https://docs.dbos.dev/architecture#using-dbos-in-a-distribut...)

    • jedberg an hour ago

      The pattern I would recommend in such cases is having one service be responsible for the overall workflow and then call the other services as steps.

      So if you were for example running a website and wanted to have a "cancellation" flow, you'd have the cancellation service with the workflow inside of it, which would have all the steps defined, like

      1) disable user account

      2) mark user data as archived

      3) cancel recurring payments

      And then each step would call the service that actually does that work, using an idempotency key. Each service might have its own internal workflows to accomplish each task. In this case step 1 would call the accounts service, step two would call the storage service, and step three would call the payment service.

      But then you have a clean reusable interface in each service, as well as a single service responsible for the workflow.

      • rileymichael 27 minutes ago

        the OP wasn't clear but that's effectively what i settled on by launching workflows (within steps) via the dbos client. keeping that an implementation detail in each service though is probably better + solves the db awareness, just need to do the endpoint/rpc plumbing. thanks!

    • KraftyOne an hour ago

      Thanks for the great feedback! Yeah, for isolation we recommend each service have its own system database and communicate via clients (so service A starts a workflow in service B by creating a client and calling "client.enqueue").

      How could we make this experience better while keeping DBOS a simple library? One improvement that comes to mind is to add an "application name" field to the workflows table so that multiple applications could share a system database. Then one application could directly enqueue a workflow to another application by specifying its name, and workflow observability tooling would work cross-application.

      • rileymichael 42 minutes ago

        yeah i think that's a step in the right direction, but ultimately as long as the workflow executor needs to know 'who runs this step' there will always be some friction compared to other systems like temporal.

  • layer8 an hour ago

    It’s not clear what part of the functionality is specific to Postgres, and why. In particular in the Java world, you would expect any JDBC backend to be able to do the job.

    • KraftyOne an hour ago

      We actually wrote a blog post recently on why we chose Postgres! https://www.dbos.dev/blog/why-postgres-durable-execution

      There's no technical reason why this couldn't be done with another database, and we may add support for more in the future (DBOS Python already supports SQLite), but we're not working on it right now.

  • goosethe 38 minutes ago

    I've been trying something similar https://github.com/seanwevans/pg_os

  • nogridbag 2 hours ago

    Are there any plans for supporting other databases? Our company primarily uses and has experience managing MySQL deployments. I evaluated Temporal some time ago as it seemed like a good fit for what we're building so I'm watching this closely. Thanks!

    • KraftyOne 2 hours ago

      Our primary focus is Postgres. DBOS Python recently added SQLite support, we'll add this to other languages if it proves popular, but no current plans for MySQL.

      That said, while DBOS requires Postgres for its own checkpoints, it can (and often is) used alongside other databases like MySQL for application data.

    • qianli_cs 2 hours ago

      To build on what Peter said, we need to stay focused and make one backend solid before expanding. But architecturally, nothing prevents us from supporting more engines going forward.

  • prasadaditya 2 hours ago

    Hey! Not a DBOS Java question but stumbled on this and looking into it for the python client. Wondering what the support looks like for integration w/ gevent?

    • KraftyOne 2 hours ago

      DBOS Python works with gevent out of the box (sync DBOS uses Python threading APIs and psycopg3 that gevent monkeypatches).

      Have you run into any issues using DBOS Python with gevent? Please let us know!

    • stankygenki 2 hours ago

      Upvote on this! Currently building out a project using Flask and gevent, and would love to use DBOS python with my Flask gevent project

      • jedberg an hour ago

        See the sibling comment, it should work out of the box!

  • lukaszkorecki 3 hours ago

    Looks great, shame that due to annotation-based API it's gonna be a pain to use in Clojure.

    • KraftyOne an hour ago

      One thing we're looking at right now is what it would take to support Clojure or Kotlin.