A Cadence deployment is composed of three components: one or more Cadence service servers, one or more Cassandra noSQL database servers (or MySQL), and machines running your worker services.
is resonsible for persisting workflow state to the database as well as scheduling workflows and activities on specific worker service instances.
is responsible for reliably storing workflow and activity state.
hosts your workflow and activity code. With Neon.Cadence, you can code your workflows in any supported .NET language. You'll typically deploy your workflow service as a console application that connects to a Cadence cluster via a CadenceClient, registers one or more workflows and/or activities, informs Cadence that the service is ready, and then waits for Cadence to assign workflows and activities for execution.
A most simple Cadence solution deployment will have a single Cadence server, a Cassandra database node, and a worker service instance:
Cadence can be scaled horizontally by adding more Cassandra, Cadence, and Workflow Service machines. You can do this manually with bare metal hardware, using clusters of virtual machines, or machanisms provided by public cloud providers like AWS, Azure and Google or deploying on platforms like Kubernetes. Cadence is agnostic to all of this though. It just needs servers to run on and expects worker service instances to connect over the network via a compatible client.
Cadence supports multi-tenancy by allowing workflow and activity implementations to isolated into multiple domains. Domains are simply a name that can be used to separate workflows much like namespaces can be used to separate pods running in a Kubernetes cluster. It's common to deploy a Cadence cluster that defines domains for different teams running workflows on the cluster and even for individual users. Cadence can support thousands of domains.
The diagram above depicts three Cadence domains, each with its own set of worker services processing workflows and activities. In these situations, it's common for a central team to manage the Cadence/Cassandra servers with each tenant team managing their own servers hosting their workflow services.