Blog

From 0 to 600 Transactions per Second in 4 Days

Chargement...

10 min read

From 0 to 600 Transactions per Second in 4 Days

Behind the scenes of the rapid deployment of jeveuxaider.gouv.fr during the COVID-19 crisis, from scaling challenges to handling massive traffic spikes in just a few days.

""

Or the crazy story behind the deployment of jeveuxaider.gouv.fr, announced on Sunday, March 22 by Secretary of State Gabriel Attal, and later by the President of the Republic Emmanuel Macron.

Context and challenges

In response to the health crisis linked to COVID-19, nonprofit organizations needed younger volunteers and additional support, as 45% of their volunteers are over 65 and must limit their movements.

To better support these organizations on the front lines, it was decided that the platform developed by the government startup Réserve Civique would be used to mobilize volunteers. This meant the platform would have to handle an extraordinary level of demand compared to its usual activity.

As part of Scalingo’s effort to support projects addressing the health crisis, we offered our services to the Réserve Civique team, focusing on infrastructure to improve the platform’s robustness ahead of the official announcement of this intergenerational solidarity initiative.

From the start, we approached this as a “commando project”, offering our setup, support, and coaching services pro bono. We also stepped outside our usual scope to ease the workload of the development team, proposing changes to the codebase when it could improve scalability, deployability, or long-term maintainability.

Day -4: All hands on deck

The business owner informed us that the platform would be announced in four days during a major TV appearance, either by the President or a Secretary of State. Several other TV appearances were also planned.

The pressure was at its highest.

All teams were mobilized:

The business team worked to align the platform with the needs of associations and define the missions they would offer, as well as how volunteers would be recruited.

The development team had to quickly take ownership of a new codebase and adapt it to new requirements.

The ops team also had to understand the codebase, suggest improvements for scalability, and provision the infrastructure needed to deploy the platform.

Any downtime or malfunction during media exposure would have reflected poorly on the initiative, despite the outstanding work of people on the ground. Ensuring availability was critical.

Initial estimates suggested the platform would need to handle between 500,000 and 3,000,000 unique visitors within 30 minutes. Visitors would either be organizations looking for volunteers or individuals signing up. In both cases, account creation was required.

We had four days to deliver a platform capable of handling an extraordinary load. It was clearly a commando project, even if we occasionally forgot what that implied over the next few days.

We decided to bring in additional help. Fabien Arcellier from OCTO Technology joined us to lead load testing. We had previously worked with him on iledefrance-mobilites.fr, another high-scale project.

Day -3: Pre-production environment setup

We began by reviewing the codebase. It was built with Laravel 6, using Laravel Mix to separate backend (Laravel) and frontend (Vue).

This architecture made scalability easier, especially since the frontend could be served via a CDN. We relied heavily on Cloudflare, configuring:

  • A Web Application Firewall to block suspicious traffic

  • Cache rules using Origin Cache Control

  • Load balancing across two dedicated IPs

  • Always Online fallback

  • Geographic traffic restrictions

  • HTTPS via edge certificates

  • Automatic HTTP to HTTPS redirection

We then deployed the application on Scalingo, connecting it to GitHub for automatic deployments. Each commit triggered a new deployment.

The application was hosted in our osc-secnum-fr1 region, based on Outscale’s SecNumCloud-certified datacenter.

The codebase was not fully cloud-ready, but Laravel made it easy to fix. We submitted several pull requests:

  • Environment-based configuration for Passport

  • Optional dev dependencies in production

  • Multi-buildpack setup for Node.js and PHP

  • Automatic database migrations on deployment

There were some tensions between teams, as changes were proposed quickly. Communication had to be very explicit, something we occasionally overlooked in the rush. Fortunately, the shared goal kept everyone aligned.

The project initially used MySQL, but we migrated to PostgreSQL for better performance under heavy load. Laravel made this transition easy.

We also replaced SendGrid with Sendinblue, a French alternative, which proved beneficial for support and communication.

During scalability discussions, we discovered the application did not use cache headers or versioned assets. To address this, we added a reverse proxy (Nginx) to inject caching headers and handle rate limiting.

Capacity planning and load testing

Capacity planning meant determining how many containers, how much memory, and what database size would be needed to support 600 transactions per second.

We also coordinated with external services like Algolia and Sendinblue to ensure they could handle the expected load.

Day -2: First production deployment

A first deployment was scheduled to allow associations to register and create missions.

We configured the domain covid19.reserve-civique.gouv.fr, coordinating DNS changes with government services.

Dedicated IPs were set up for security and isolation.

Sendinblue required domain verification for email deliverability, which also involved DNS updates.

The platform went live on March 20 at 2pm with limited access.

First load tests

We tested homepage access to validate caching efficiency. Most traffic was handled by Cloudflare, reducing load on the application.

We confirmed no session cookies were set, which allowed effective CDN usage.

The volunteer signup test was the most critical. We tested progressively up to 600 registrations per second.

Issues found:

Rate limiting misconfiguration due to proxy layers

Missing database indexes causing slowdowns

Database limitations at high throughput

After fixes and scaling the database to a 32 CPU, 64GB cluster, performance stabilized.

The final setup used 50 application containers.

Day -1: A major change

The public domain changed to jeveuxaider.gouv.fr.

Cloudflare could not be used for redirection due to policy constraints, so we implemented redirection directly on Scalingo.

We tested up to 8,000 requests per second and scaled routing infrastructure accordingly.

A degraded mode was also implemented to reduce functionality if needed, though it was never used.

Day 0: Official announcement

On Sunday evening, Gabriel Attal announced the platform on national TV.

The team monitored everything in real time.

The platform handled the traffic perfectly, with excellent response times and full availability.

Day +1 and beyond

Media coverage increased traffic steadily.

Each spike was absorbed without issues, matching load test predictions.

The President later mentioned the platform again, generating the highest traffic peak, still within tested limits.

Conclusion and learnings

The platform successfully handled all traffic, even at peak load.

In a commando project, decisions must be made quickly. Clear roles and communication are essential, especially in cross-functional teams.

Coordination between communication and technical teams is critical when anticipating traffic spikes.

Testing and preparation made the difference.

Finally, database performance was limited by CPU rather than memory, leading to future improvements in Scalingo’s offerings.

If you face similar challenges, our team can help design a solution tailored to your needs.

Photo of Yann Klis, author of Scalingo blog posts

Yann Klis

Yann Klis co-founded Scalingo. Scalingo's vision is to offer a european sovereign cloud housting platform for developers. Today Scalingo hosts thousands of web applications from customers located all over the world. Before that Yann founded Novelys a web studio specialised in Ruby on Rails technology.

Stay Updated

Get articles and platform updates in your inbox.

Ready to Deploy with Confidence?

Experience zero-downtime deployments, intelligent auto-scaling, and fully managed infrastructure. Start deploying your applications on Scalingo today.

No credit card required • Deploy in minutes • Cancel anytime

""

Deploy your first app or database

Let's start building together

Join developers who chose a platform built for fast delivery and calm production, with European values and human support.

""

Deploy your first app or database

Let's start building together

Join developers who chose a platform built for fast delivery and calm production, with European values and human support.

""

Deploy your first app or database

Let's start building together

Join developers who chose a platform built for fast delivery and calm production, with European values and human support.