Releases: restatedev/restate
v1.2.0
Restate v1.2.0: A distributed durable execution engine, built from first principles
Release Highlights 🌟
High-availability and fast fail-overs 💪
This release allows you to scale out your Restate Servers and run them in a highly-available, distributed setup. Restate runs active-active deployments, with data getting copied instantly for fast, consistent fail-over. Try deploying a multi-node cluster yourself.
The single Restate server binary comes with all-batteries-included and no required external dependencies. You can start with a single node deployment and then seamlessly turn your deployment into a multi-node cluster by starting new Restate server processes. Grow the cluster yourself.
Graphical UI: Insights beyond your usual queue 🔬
This release adds a graphical UI to add an easy and intuitive way to manage, navigate, and debug your Restate applications. You can now access and query all the useful data that Restate collects about your application and answer questions like:
- What function execution is blocking my invocation from getting executed?
- Where in my chain of calls did my handler or workflow get stuck?
- How many times was this function retried and which step is failing with what error?
and many more. The UI is bundled with Restate Server and accessible at the admin port http://localhost:9070
.
Operational tooling 🔧
We have created a new cluster administration tool to operate a multi-node Restate deployment. With restatectl
, you can check the status of your cluster, view the partitioning layout, change the configuration of your cluster, and take snapshots.
Snapshotting to object store 💾
To keep your data safe and freeing Restate from storing older data, Restate now supports creating partition store snapshots and to upload these snapshots to an object store. Check out how to configure snapshotting.
Performance improvements 🚀
This release further improves the latency and throughput of the system. Here are some latency measurements for a 3-way replicated cluster of 3 nodes under low and high load:
load | p50 | p75 | p90 | p99 | |
---|---|---|---|---|---|
3-step workflow | 549 rps (low) | 15ms | 30ms | 42ms | 69ms |
9-step workflow | 303 rps (low) | 31ms | 45ms | 57ms | 93ms |
1-step workflow | 23 131 rps (high) | 16ms | 20ms | 25ms | 40ms |
3-step workflow | 16 844 rps (high) | 58ms | 67ms | 76ms | 98ms |
9-step workflow | 8 571 rps (high) | 116ms | 126ms | 138ms | 163ms |
At low load, the 3-step workflow had a median latency of 15ms.
Load can be pushed to 17 000 requests per second (84 000 actions per second) with a p90 latency of 76ms.
You can run this benchmark yourself.
Backward compatibility 🔙
The 1.2 release is fully backward compatible with previous Restate releases starting from version 1.1. If you have a single node deployment that you would like to turn into a multi-node deployment without losing any data, then follow the multi-node migration guide.
Managing scheduled invocations 🕐
The Restate CLI and UI show you scheduled invocations. Restate allows you to cancel and kill these invocations now.
Full Changelog: v1.1.6...v1.2.0
Deprecations 💡
- This release removes the need for a dedicated port for the metadata store. In previous releases, Restate used port 5123 for it. Now, the metadata store listens on port 5122 by default. Consequently, the config option
metadata-store.bind-address
has been removed. - The :9071 Postgres protocol port is now deprecated and will be removed in a future release. You can make queries with the cli or over http to :9070/query, which can now return JSON in addition to arrow format data.
- Some config flags have been renamed. The old values will be accepted, but will be removed in a later version:
admin.log-trim-interval
has been renamed toadmin.log-trim-check-interval
allow-bootstrap
has been renamed toauto-provision
bootstrap-num-partitions
has been renamed todefault-num-partitions
metadata-store-client
has been renamed tometadata-client
metadata-store
has been renamed tometadata-server
andmetadata-store.rocksdb
has been flattened intometadata-server
Install
Pull the Docker images
docker pull docker.restate.dev/restatedev/restate:1.2.0
docker pull docker.restate.dev/restatedev/restate-cli:1.2.0
Install prebuilt binaries via Homebrew
brew install restatedev/tap/restate-server
brew install restatedev/tap/restate
brew install restatedev/tap/restatectl
Install prebuilt binaries into your npm project
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
Download binary archives
File | Platform | Checksum |
---|---|---|
restate-server-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-server-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-server-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-server-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restate-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restatectl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restatectl-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restatectl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restatectl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
New Contributors
- @sunng87 made their first contribution in #1634
- @aradwann made their first contribution in #1728
- @muhamadazmy made their first contribution in #1779
- @nikrooz made their first contribution in #2077
- @hamirmahal made their first contribution in #2371
- @iMezemz made their first contribution in #2372
- @myypo made their first contribution in #2454
- @edmondop made their first contribution in #2493
v1.2.0-rc.2
Restate v1.2.0-rc.2
Install
Pull the Docker images
docker pull docker.restate.dev/restatedev/restate:1.2.0-rc.2
docker pull docker.restate.dev/restatedev/restate-cli:1.2.0-rc.2
Install prebuilt binaries via Homebrew
brew install restatedev/tap/restate-server
brew install restatedev/tap/restate
brew install restatedev/tap/restatectl
Install prebuilt binaries into your npm project
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
Download binary archives
File | Platform | Checksum |
---|---|---|
restate-server-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-server-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-server-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-server-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restate-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restatectl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restatectl-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restatectl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restatectl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
v1.2.0-rc.1
Restate v1.2.0-rc.1
Install
Pull the Docker images
docker pull docker.restate.dev/restatedev/restate:1.2.0-rc.1
docker pull docker.restate.dev/restatedev/restate-cli:1.2.0-rc.1
Install prebuilt binaries via Homebrew
brew install restatedev/tap/restate-server
brew install restatedev/tap/restate
brew install restatedev/tap/restatectl
Install prebuilt binaries into your npm project
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
Download binary archives
File | Platform | Checksum |
---|---|---|
restate-server-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-server-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-server-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-server-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restate-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restatectl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restatectl-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restatectl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restatectl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
v1.2.0-alpha.1
Restate v1.2.0-alpha.1
Install
Pull the Docker images
docker pull docker.restate.dev/restate:1.2.0-alpha.1
docker pull docker.restate.dev/restate-cli:1.2.0-alpha.1
Install prebuilt binaries via Homebrew
brew install restatedev/tap/restate-server
brew install restatedev/tap/restate
brew install restatedev/tap/restatectl
Install prebuilt binaries into your npm project
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
npm install @restatedev/[email protected]
Download binary archives
File | Platform | Checksum |
---|---|---|
restate-server-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-server-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-server-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-server-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restate-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restate-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restate-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restate-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
restatectl-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
restatectl-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
restatectl-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
restatectl-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
v1.1.6
Restate 1.1.6
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
IMPORTANT: If you upgraded a 1.0.x installation to version 1.1.1, please first upgrade to 1.1.2 or 1.1.3 before attempting a downgrade back to 1.0.2.
This version fixes an issue with the Kafka consumer where it could drop messages when starting to consume after the server starts, and an issue of growing memory usage over time due to oversized invoker in memory queues.
Full Changelog: v1.1.5...v1.1.6
v1.1.5
Restate 1.1.5
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
IMPORTANT: If you upgraded a 1.0.x installation to version 1.1.1, please first upgrade to 1.1.2 or 1.1.3 before attempting a downgrade back to 1.0.2.
This release fixes a memory leak issue related to Prometheus Histograms - memory would grow unboundedly when metrics are not scraped
Full Changelog: v1.1.4...v1.1.5
v1.1.4
Restate 1.1.4
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
IMPORTANT: If you upgraded a 1.0.x installation to version 1.1.1, please first upgrade to 1.1.2 or 1.1.3 before attempting a downgrade back to 1.0.2.
This release contains a small quality of life improvement from main
while we work on the next minor release.
What's Changed
- You may now provide Accept: application/json to the :9070/query endpoint to receive rows in JSON format.
Full Changelog: v1.1.3...v1.1.4
v1.1.3
Restate 1.1.3
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
IMPORTANT: If you upgraded a 1.0.x installation to version 1.1.1, please first upgrade to 1.1.2 or 1.1.3 before attempting a downgrade back to 1.0.2.
This release contains various cherry picked fixes and quality of life improvements from main
while we work on the next minor release.
What's Changed
- Docker images now contain curl for easier health checking (#2006)
- The admin role no longer assumes that the node svc port is 5122 (#2038)
- Various otel improvements including exporting spans for ctx.run operations (#2291)
- HTTP ingress path information including query string is now available as a special header (#2315)
- Kafka ingress now supports talking to brokers over TLS, via a statically linked openssl library (#2292)
Full Changelog: v1.1.2...v1.1.3
v1.1.2
Restate 1.1.2
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
IMPORTANT: If you upgraded a 1.0.x installation to version 1.1.1, please first upgrade to 1.1.2 before attempting a downgrade back to 1.0.2.
This release contains an important compatibility update for anyone running Restate 1.1.1. Our versioning policy is to maintain rollback ability to the last minor version; Restate 1.1.1 broke this promise by shipping an upcoming feature called called log-server by default.
Please see the new Upgrading section on the Restate website for more information about version updates in general: https://docs.restate.dev/operate/upgrading.
If you are running Restate 1.0.x
We recommend that you upgrade directly to 1.1.2 (or the latest available patch release), and specifically to avoid 1.1.1.
If you are already running Restate 1.1.1
Please upgrade to 1.1.2 and delete the directory ${base_dir}/${node_name}/log-store
to avoid issues with future upgrades. To avoid a crash on startup, please upgrade to 1.1.2 before attempting a downgrade back to 1.0.2.
What's Changed
- [Security] Bump quinn crate version by @pcholakov in #1965
- [Networking Add ability to register raw handlers in message router by @AhmedSoliman in https://github.com//pull/1957
- Kafka perf improvements by @slinkydeveloper in #1964
- Make sure we don't send the awakeable completion twice by @slinkydeveloper in #1973
- Disable log-server role by default to fix v1.0.x compatibility by @AhmedSoliman in #1974
Full Changelog: v1.1.1...v1.1.2
v1.1.1
Restate 1.1.1
IMPORTANT for SDK-Typescript users: Only when upgrading from 1.0.x to 1.1.x you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
This is a bug fix release which corrects an issue making the sys_invocation_state
introspection table inaccessible (#1961).
What's Changed
- [Bifrost] Moves LogletOffset to restate-types by @AhmedSoliman in #1927
- [Networking] Allow sending messages through Outgoing by @AhmedSoliman in #1928
- [Bifrost] Move Record to restate-types by @AhmedSoliman in #1929
- use opentelemetry to separate services from runtime traces by @muhamadazmy in #1922
- Fix state_machine teardown in tests by @AhmedSoliman in #1941
- Update release checklist doc by @pcholakov in #1930
- [Bifrost] Move TailState to restate-types by @AhmedSoliman in #1933
- PolyBytes serde by proxy by @AhmedSoliman in #1935
- Testing helpers for networking by @AhmedSoliman in #1936
- Report roles and address on startup by @AhmedSoliman in #1937
- [LogServer] Initial implementation for store path by @AhmedSoliman in #1938
- [LogServer] Support for seal by @AhmedSoliman in #1939
- [LogServer] GetTailInfo message by @AhmedSoliman in #1942
- Add loadtest environment CDK stack by @pcholakov in #1946
- [TestEnv] supporting routing responses back to callers by @muhamadazmy in #1947
- [LogServer] GetRecords basic implementation by @AhmedSoliman in #1944
- [LogServer] Reject stores with no records by @AhmedSoliman in #1945
- [LogServer] Support for trimming loglets by @AhmedSoliman in #1951
- [LogServer] GetLogInfo replaces GetTailInfo by @AhmedSoliman in #1952
- [ReplicatedLoglet] Define Append Messages by @AhmedSoliman in #1956
- [ReplicatedLoglet] ReplicationProperty is failure-domain-aware by @AhmedSoliman in #1959
- Let MultiplexedInvokerStatusReader share state by @tillrohrmann in #1962
Full Changelog: v1.1.0...v1.1.1