We have just released our new Long-Term Support (LTS) version, EventStoreDB 21.10.0! It's great to release this version and provide the opportunity to upgrade the previous LTS version.
EventStoreDB 21.10.0 contains several improvements over v20.10 and the v5.x versions. It includes features from the v21.2 and v21.6 versions, making a complete LTS version.
You can read the full list of features in the Release Notes. In this post, we'll discuss the highlights and what the new LTS version means for your current EventStoreDB setup.
EventStoreDB v21.2 and v21.6 were 'Feature Releases', and allowed the Event Store Team Members to start implementing features for the LTS version. In v21.2, changes improvements were made to gossip on a single node, enabling gossip by default. There were also significant improvements to the heartbeat timeout.
The KeepAlives for gRPC were also introduced in v21.2, allowing the gRPC clients to discover if their connection has dropped. There was also content type validation for projections, making projections predictable, and a customizable read index cache capacity.
Some changes were made in v21.6 to prepare for future upgrades, including the groundwork for allowing persistent subscriptions to the $all stream and replacing the V8 engine with the experimental v3 Log format.
There were also some significant changes made to the auto configuration on startup, allowing for more flexibility from EventStoreDB. This includes StreamInfoCacheCapacity, ReaderThreadsCount, and WorkerThreads. All of the changes were included in v21.10.0.
Performance when new streams are created
When appending events to new streams, EventStoreDB needs to check in both the memory and disk indexes if the stream is new. There is now a Bloom filter in EventStoreDB 21.10 that improves the performance when events are appended to new streams. With the performance upgrade provided by the Bloom filter, index scans don't need to be performed in the majority of cases. There are instructions for controlling the size of the filter in the Release Notes.
If you want to know more about Bloom filters and how they are implemented, read this blog post by Tim Coleman.
Experimental v3 Log format
Back in v21.6, we introduced a new log format. This format has been designed to improve performance for larger databases. EventStoreDB 21.10.0 has the v3 of the experimental log format, which should act in a similar way to the v2 log format. It is still experimental, so it's not meant for running in production.
Persistent subscriptions to the $all stream
Persistent subscriptions to the $all stream over gRPC are now supported, with an optional filter. Persistent subscriptions over gRPC have been requested for some time, so we're glad to make it available now. The subscriptions for the gRPC can only be created through the gRPC client (not through the UI or TCP clients). The clients are being worked on right now and will be available soon.
Remember that persistent subscriptions do not guarantee ordering.
Support for ARM architecture
In order to accommodate the improvements made to support ARM architecture (which allows EventStoreDB to run on a MacBook Air M1), the V8 engine has been completely removed. It's been replaced by interpreted runtimes for projections, which were originally introduced in v21.6.0. As of 21.10.0, interpreted runtime for projections is the default.
Heartbeat timeout improvements
There have been a few improvements to the heartbeat logic, as there were a few instances of false-positive heartbeat timeouts. Heartbeat requests are proactively scheduled to prevent a heartbeat timeout.
If you're upgrading from v20.10.x, you can perform a rolling upgrade. Start with a follower node, stop it, upgrade then restart it! Make sure to upgrade the leader node last.
If you're upgrading from v5.x, you'll have to take down the cluster, upgrade the notes in place and make sure the relevant configuration and certificates are set up, then bring the notes back online and wait for them to stabilize.
There's more information in the Release Notes.
We'd like to say a big thank you to StevenBlair123, the-mikedavis and renagaev for their contributions to the server release, their work has really helped and we're grateful for their time and effort.
The LTS is our Long-Term Release version, that will be supported for the next two years (and a two months grace period at the end). v20.10.x is still supported for another year, so you don't have to upgrade right away if you're on one of those versions. If you're on v5.x, now is the time to start planning your upgrade! If you have any questions, feel free to contact us here and we can help.