Ensuring deterministic execution usually requires solving two separate problems: shared state mutation and inherent non-deterministic constructs within the system (e.g., time, random, I/O, concurrency, etc). Temporal’s unique programming environment requires that workflow code executes deterministically. This means that the language runtimes must perform accurately and consistently. Despite this need for precision, it is still important to allow users to choose the language they prefer.
During this conversation, we will explore the various challenges we have encountered while using different language runtimes to execute workflow code deterministically. We will discuss the techniques that have proven effective, as well as those that have not, and provide insight into what the Temporal team has planned for the future. In addition to discussing our current approaches, we will discuss other promising approaches, such as WASM and system-level deterministic execution, as well as their potential drawbacks.
Our discussion will encompass a range of language runtimes, including Go, Node.js, Python, .NET, and Java Virtual Machine.
Chad works on the SDK team and helps develop SDKs in many languages. In addition to work on existing SDKs, Chad has also developed the Python and .NET SDKs.