Durable Execution Anywhere - Introducing DBOS Conductor

DBOS provides a lightweight library for building reliable applications. You annotate workflows and steps in your program to make it resilient to any failure–DBOS checkpoints the state of your workflows in any PostgreSQL-compatible database to seamlessly recover them from any interruption. 

Durable Execution Diagram

Since we first released DBOS, the most common request we’ve heard from users has been better support for self-hosting DBOS at scale.

To make it easier to run DBOS in production anywhere, today we’re announcing DBOS Conductor. Conductor is a managed service that helps you operate self-hosted DBOS applications in production, on your own infrastructure or in any cloud. It provides:

Workflow durability in a distributed environment 

If you run a DBOS Transact app in a distributed environment (e.g., running multiple instances of your app via containers) with many processes executing durable workflows, it can be difficult to detect when a workflow’s execution is interrupted and coordinate recovering the workflow. Conductor automates workflow recovery, detecting when the execution of a durable workflow is interrupted (for example, if its process is restarted, interrupted, or crashes) and recovering the workflow exactly once to another healthy process.

Workflow and queue observability 

To help with troubleshooting and auditing, Conductor provides dashboards of all active and past workflows and all queued tasks within each workflow, including their status, inputs, outputs, and steps. This way, you can see exactly what your application is doing at any point in time and trace the root cause of any error.

Workflow and queue management

While DBOS automates much of your application and workflow error handling, sometimes manual intervention is needed. Therefore, from the Conductor dashboard, you can cancel, resume, or restart any workflow execution and manage the tasks in your distributed queues. For example, if you accidentally start an expensive and unnecessary job, you can instantly cancel it. If some tasks fail because of an issue in another service, you can restart them after the service is repaired.

In other words, Conductor lets you monitor and manage your workflows in real time from an online dashboard, while also automatically managing durable workflow continuity at scale.

Monitor the status of every durably executed workflow in your application with DBOS Conductor

Conductor Never Sees Your Data

Conductor runs totally out-of-band and has no access to your application’s database or private data. It instead uses a WebSocket-based protocol to exchange workflow metadata and commands with your application processes. Thus, Conductor is safe to use even for applications which deal with sensitive data and can work with applications running anywhere, on any cloud. DBOS is also HIPAA certified, and SOC II and GDPR are coming soon as well.

Every Step You Take (should not cost you money)

Unlike other durable workflow orchestration platforms, which charge you for every workflow step you execute, DBOS only charges per “executor.” Executors are the number of DBOS Transact application processes that Conductor is managing. The cost is the same whether the DBOS Transact application process is executing one hundred steps per hour or one million.

Getting Started With Conductor

Conductor is entering developer preview today. If you want to try it out, please reach out to us and we’ll set you up!

To connect your application to Conductor, first register your application on the DBOS console. The name you register must match the name you give your application in its configuration.

Next, generate an API key. 

Finally, supply that API key to your DBOS application to connect it to Conductor. This initiates a websocket connection with Conductor. As soon as you start your connected app, you should see it appear on your DBOS Console applications page!

Python: 

conductor_key=os.environ.get("DBOS_CONDUCTOR_KEY", None)
DBOS(conductor_key=conductor_key)

TypeScript:

const conductorKey = process.env.DBOS_CONDUCTOR_KEY
await DBOS.launch({conductorKey})

Let us know what you think