There are some key differences between Cadence and Temporal that you will need to account for when migrating.
There is no direct upgrade path from Cadence to Temporal.
The Temporal Server requires a fresh install, and we recommend choosing one of the latest releases.
The v0.28 changelog blog post details many of the core changes that occurred prior to Temporal’s v1.0.0 release.
Key differences
When using Temporal, this means the following things:
- Communication can be encrypted via TLS.
- Custom service errors backed by standard gRPC error codes.
- Errors are serialized using the Protobuf type
Failure
and they be chained together and passed across different SDKs in different languages. - All payloads (Workflow input, Activity input, etc…) sent to Temporal now have headers and data fields.
- Standard gRPC health service is used for health checks.
- Standard Protobuf types are used for time and duration.
- The persistence layer uses Protobuf blobs for much of the data stored in both MySQL and Cassandra. Cadence used Thrift blobs for in MySQL data.
- Entities names are different:
Cadence | Temporal |
---|---|
Decision | Command |
DecisionTask | WorkflowTask |
Decider | Workflow |
Domain | Namespace |
NamespaceStatus | NamespaceState |
TaskList | TaskQueue |
ArchivalStatus | ArchivalState |
- Workflow timeout are different in Temporal
- Workflow timeouts are optional.
- Attempt counters start at 1.
- Workflow Executions have 3 timeouts available:
WorkflowRunTimeout
.WorkflowExecutionTimeout
.WorkflowTaskTimeout
.
- Workflow retries are different in Temporal
- In Temporal,
WorkflowExecutionTimeout
is used, instead ofExpirationInterval
(which has been completely removed from Temporal), to stop retries for Workflows. - Attempt counters start at 1.
- Activity retries are different in Temporal
- Temporal includes default
RetryOptions
for Activities.initialInterval
= 1 second.maximumInterval
= 100 * initialInterval.backoffCoefficient
= 2.
- To disable Activity retries, configure Activities with
RetryOptions
that setmaximumAttempts
to 1. ScheduleToClose
is used to stop retries for Activities.
- Temporal dependencies are different
- Uber YARPC library is not used by Temporal.
- Temporal no longer needs to use Kafka.
- Temporal uses Prometheus by default in Docker images instead of
statsd
.
- Temporal Server configuration files are different
- Cadence Server configuration files are largely incompatible with the Temporal Server.