Skip to content

Blog Releases

Altis v16: introducing Afterburner

Text, Computer, Electronics

Posted by Ryan McCue

Product Director

Published in Releases

Altis v16 has arrived – upgrade for free now to experience optimized WordPress performance thanks to our latest PHP extension, Afterburner.

We’ve been working hard to bring you the most performant hosting at enterprise scale, and Afterburner does exactly that. Get ready to enjoy lower request times and improved response times, and wave goodbye to translation penalties. Read on to find out what’s under the hood of Altis v16.

What’s new in Altis v16?

We’re always on a mission to make high scale and high performance as easy as possible for developers, offering tools and APIs for optimization. But the best performance improvements are the ones that don’t require developers to do any additional work at all, and slot in to just make their code faster.

In version 16, we’re launching our own PHP extension, Afterburner, to optimize core parts of Altis and WordPress. Afterburner provides drop-in replacements for several APIs, with native-code implementations in Rust to make requests blazing fast.

Our testing has shown up to a 42% increase in requests per second (RPS) just by activating Afterburner, with zero code changes required by developers. On a request-by-request basis, we’ve seen Afterburner lower request times by 30%, providing faster loading pages for users while also scaling even better than before.

graph showing X-Ray (PHP) response time
Request times on altis-dxp.com for the last 90 days – can you guess when we enabled Afterburner?

We’re launching Afterburner with two modules: Afterburner Cache, and Afterburner Translations. We’ve already started working on additional modules for the future too.

Cache rules everything around me

As WordPress sites start gaining traffic, the first port of call for improving both performance and achieving higher scale is to enable object caching. This offloads expensive database calls to cheaper key-value cache storage, and lower-traffic sites typically store this cache on the application server itself. For higher-traffic sites which need multiple servers with autoscaling, the object cache is implemented as a separate server or cluster of servers; Altis uses a cluster of Redis servers spread across multiple data centres.

This comes with a trade-off: using a common server is necessary to share the cache across servers and avoid a split-brain scenario, but introduces the cost of needing to communicate over the network with the cache server. This means that as a site needs to scale, performance can actually get worse!

Pulling data from the object cache is an incredibly common operation in WordPress, occurring thousands or tens of thousands of times per request. In a multi-server scenario, each of these calls incurs both a CPU cost (for processing the cache request) and an I/O cost (for fetching the data across the network) – although those costs are small, they can add up to a significant amount of the request at this scale.

altis v16 Afterburner network bytes out graph
Afterburner eliminates 99% of the data across the wire đź‘‹

With Afterburner Cache, we’ve managed to massively reduce these costs by using a hierarchical cache approach. Each application server now stores an in-memory local copy of the cache, with cache changes synchronized between servers using Redis keyspace notifications. Additionally, this cache is shared across all PHP workers, optimizing memory usage. This approach was inspired by previous efforts in the space, including LCache and Relay.

All of this happens behind the scenes, so from the developer’s perspective the only change is that calls to the object cache now return almost instantly!

Fast in any language

For customers who operate in languages other than English, parts of the WordPress interface need to be translated into their language. All text in the codebase is written in English as the “primary” language, and a system called gettext is used to translate it into the user’s selected language. These translations are stored in Machine Object (.mo) files, which are loaded on the fly by WordPress.

Unfortunately, this means non-English languages pay a performance penalty, and for complex screens this can be significant – in some cases, pages can translate up tens of thousands of strings from dozens of MO files, making page loads up to 20% slower than the same page in English.

With our global customer base and most of our customers having multilingual editorial teams, this means a significant number of users on Altis were being punished for not using English.

We don’t think this is good enough: we believe users should have a fast experience, no matter what language they speak.

Afterburner Translations replaces the translation system with an implementation in native code. Loading and parsing MO files is up to 50% faster, while individual translation calls are now effectively free. Combined, this has lead to a 15% page load time improvement for non-English sites, bringing them down to the same response time as English and eliminating the translation penalty.

We’re also working on implementing cross-request caching to reduce parsing time further, as well as working with the WordPress performance team to improve performance in WP core – we won’t rest until all users have a great experience.

Altis v16: Everybody wins

Together with Afterburner cache, we’ve seen overall response times improve by 30%, while also increasing requests per second by 42%. Plus, with the reduced I/O, we’ve been able to increase our server utilization, allowing us to use fewer servers overall and reducing our (mostly green) energy usage.

altis v16 traced request count graph

Afterburner is truly a win-win-win: users get faster load times, developers get to work on more important problems, and we get to be even greener.

What’s next?

Version 16 is just the start for Afterburner, and is part of our ongoing work to deliver the most performant hosting at scale. We’re already looking towards our next improvements – including cross-request caching for translations and moving X-Ray into native code too.

The release of Altis v16 means we’re also saying goodbye to version 12, which will fall out of service on August 10th. Our next major version, v17, is slated for release in October, and we’re already cracking on with work on the new features – we think you’ll love it.