Vapor: Octane Support Is Now Available

Oct, 4 2021#vapor

Today we're pleased to announce that Octane support is now available in Laravel Vapor. The speed improvements are just mind-blowing, so put on your seat belt and let's get into the details.

If you haven't heard about Octane, it's a Laravel library that supercharges your application's performance by booting your application once, keeping it in memory, and then feeding it requests at supersonic speeds.

Now, when combining Octane with Vapor's on-demand auto-scaling, you get blazing-fast load times at any scale. Let's take a look at some numbers using a Vapor project on the Amazon's us-west-1 region. This Vapor application is configured with 1024 MB of RAM and an RDS MySQL instance (db.t2.micro) with 1 VCPU and 1Gib RAM.

First, let's take a look at an API endpoint that gets a user from the database. Using Octane, this endpoint is 7x faster and uses 44% less memory:

# Before Vapor's Octane integration
Request Duration: 39.40 ms, Memory Used: 169 MB
Request Duration: 40.20 ms, Memory Used: 169 MB
Request Duration: 37.71 ms, Memory Used: 169 MB
Request Duration: 42.16 ms, Memory Used: 169 MB
Request Duration: 40.60 ms, Memory Used: 169 MB
Request Duration: 45.75 ms, Memory Used: 169 MB

# After Vapor's Octane integration
Request Duration: 6.78 ms, Memory Used: 112 MB
Request Duration: 6.64 ms, Memory Used: 112 MB
Request Duration: 6.67 ms, Memory Used: 112 MB
Request Duration: 6.38 ms, Memory Used: 112 MB
Request Duration: 6.75 ms, Memory Used: 112 MB
Request Duration: 6.47 ms, Memory Used: 112 MB

Next, let's take a look at a "login" route which renders a static template. Using Octane, this endpoint is almost 3x faster and uses 35% less memory:

# Before Vapor's Octane integration
Request Duration: 11.32 ms, Memory Used: 165 MB
Request Duration: 11.35 ms, Memory Used: 165 MB
Request Duration: 11.29 ms, Memory Used: 165 MB
Request Duration: 11.29 ms, Memory Used: 165 MB
Request Duration: 11.36 ms, Memory Used: 165 MB
Request Duration: 11.43 ms, Memory Used: 165 MB

# After Vapor's Octane integration
Request Duration: 4.89 ms, Memory Used: 108 MB 
Request Duration: 4.89 ms, Memory Used: 108 MB 
Request Duration: 4.83 ms, Memory Used: 108 MB 
Request Duration: 4.66 ms, Memory Used: 108 MB 
Request Duration: 4.79 ms, Memory Used: 108 MB 
Request Duration: 4.91 ms, Memory Used: 108 MB

As you can see, using Octane decreases both request duration and memory usage. And, of course, because AWS applies 1ms billing granularity on Lambda, you will pay less for your HTTP function.

How to get started

First, ensure you are using latest version of Laravel, Vapor Core, and Vapor CLI:

Next, install Octane in your Vapor project. Octane may be installed via the Composer package manager:

composer require laravel/octane

After installing Octane, you may execute the octane:install Artisan command, which will install Octane's configuration file into your application:

php artisan octane:install

Next, if you haven't tried Octane before in your application, you may want to test it locally. Of course, don't forget to review important Octane documentation topics such as dependency injection and managing memory leaks.

Finally, you may instruct Vapor to use Octane by setting the octane configuration option within your application's vapor.yml file:

id: 1
name: my-application
environments:
    staging:
        memory: 1024
        runtime: 'php-8.0:al2'
        octane: true

In addition, if your project uses a database, you may use the octane-database-session-persist and octane-database-session-ttl options to instruct Octane that database connections should be reused between requests:

        database: my-database
        octane: true
        octane-database-session-persist: true
        octane-database-session-ttl: 10

We recommended that you specify an octane-database-session-ttl value; otherwise, the Lambda container will stay connected to your database until the Lambda container gets destroyed. This may take several minutes and may result in your database becoming overwhelmed with active connections.

Please review Vapor's Octane integration documentation for more details.

Conclusion

Also, we would like to thanks Aaron Francis, for the proposal and initial exploration on having Octane on Vapor. We care and study every proposal made by the community.

We hope you enjoy this new feature. At Laravel, we're committed to providing you with the most robust and developer-friendly PHP experience in the world. If you haven't checked out Vapor, now is a great time to start! You can create your account today at: vapor.laravel.com.

By Nuno Maduro

Laravel Team, Creator of Pest.

Follow the RSS Feed.