The Open Source Runtime forservice orchestration at
scale.func mainWorkflow(ctx workflow.Context, userId) error { // ... selector.AddReceive(signalChannel, func(c workflow.ReceiveChannel, more bool) { c.Receive(ctx, &signalVal) // receive user signals! }) timerFuture := workflow.NewTimer(childCtx, 30 * time.Day) // sleep for 30 days! selector.AddFuture(timerFuture, func(f workflow.Future) { _ = workflow.ExecuteActivity(ctx, SendEmailActivity).Get(ctx, nil) // timeouts and retries! }) // Scale to Millions + Write Tests + Encrypt Data + Migrate Versions + ... }
Developer happiness has increased. Thinking in terms of workflows and activities has clarified our product and allowed us to share workflow components with different teams.
Seriously, we're hiring
This often requires requisitioning new infrastructure, and hand-writing often buggy, not-well-distributed and hard-to-test code. Temporal offers a battle tested framework enabling you to capture and define your business logic in a structured way and run it it atop a single set of infrastructure at massive scale. It allows developers to focus on your actual business requirements and not plumbing work.
Temporal provides a code-first development environment which can be used to build data pipelines, orchestrate microservices, provision resources and much more at any scale. Code written with Temporal is executed directly which enables users to easily integrate Temporal into their existing development, testing, and debugging environmentss.
While Temporal is a great option for data pipelines, this encompasses only a very small subset of its use cases. Temporal enables development of applications of all shapes and sizes, regardless of scale.
Temporal targets developers. All code written with Temporal runs directly, eliminating any extra compilation steps often required by DAG-based solutions. This provides extra flexibility which is impossible to achieve with more rigid DAG based systems.
Flow-chart based workflow DSLs suffer from being bound to a specific set of features and capabilities provided by the underlying workflow language they use. Even though they promote the visualization aspect of workflow design, the actual execution semantics are expressed as a mix of programming and expression languages which are enforced by the specific runtime implementation. Temporal does not suffer from these types of restrictions enabling you to fully define your workflows using a programming language. This provides a high level of flexibility not only with defining your workflow logic but also testing and debugging in the development environment of your choice.
BPM engines translate workflow definition markup into code, which requires additional compilation steps. This kind of code generation is approached differently by each runtime engine using tools they chose. Temporal eliminates the intermediate compilation steps enabling you to express your workflow logic directly in code. In addition, Temporal provides you with high-level concepts such as asynchronous invocations, retries, error propagation and compensation which can be expressed much easier than in BPM-based solutions, especially for larger workflows.
Workflow engines based on declarative DSLs contain a very small set of features and typically target very specific technology domains. Similar to BPM-based engines, they require additional compilation steps to translate the workflow definitions into executable code. They also often target stateless orchestration use cases only. Temporal not only eliminates the intermediate compilation steps allowing you to express your workflow logic directly in code, but it also targets a much larger set of use cases. It can be used to build data pipelines, orchestrate microservices, provision resources and much more. Code written with Temporal is executed directly which enables users to easily develop, debug, and test their workflows using a development environment of their choice.
Step Functions can be a great service for non-developers or technical managers to define business logic without writing code. While Step Functions is a great service there is no open source implementation provided which puts it into a much different class compared to Temporal.
Temporal is an open source platform which enables you to deploy your workflow applications on environments of your choice. Step Functions on the other hand is only available as a service from AWS.
Temporal targets developers and all code written with Temporal runs directly instead of being translated from a DSL. This gives you flexibility which is impossible to achieve with more rigid DSL based systems.
Temporal provides you with high-level concepts such as asynchronous invocations, retries, error propagation and compensation which can be expressed much easier and are often not existing in domain-specific DSL based solutions.
“HashiCorp needed to build long-running, reliable, fault-tolerant tasks for the HashiCorp Cloud Platform.
Temporal’s technology satisfied all of these requirements out of the box and allowed our developers to focus on business logic.
Without Temporal’s technology, we would’ve spent a significant amount of time rebuilding Temporal and would’ve very likely done a worse job.”