Ce qu'un serveur à 40 € peut faire
Plus de 4 millions d'entreprises et des dizaines de millions de dossiers. Un seul serveur. Pas de microservices, pas de Kubernetes, pas de buzzwords.
Test en direct
100 vraies requêtes, 20 simultanées, contre la base de données de production
Appuyez sur le bouton pour lancer 100 vraies requêtes et mesurer la capacité du serveur.
Méthodologie
Ce que nous mesurons
Le test de capacité exécute 100 vraies requêtes (recherche d'entreprise, recherche de personnes, détails CUI, IBAN), 20 à la fois, contre la base de données de production avec plus de 4 millions d'entreprises, représentants et dizaines de millions de dossiers interconnectés. L'estimation des utilisateurs simultanés suppose qu'un utilisateur réel effectue en moyenne 1 requête toutes les 3 secondes (chargement de page + temps de réflexion).
Comment nous mesurons
Les fonctions de requête sont appelées directement sur le serveur (sans surcharge HTTP) et le temps est mesuré avec performance.now() — résolution sous-milliseconde. Les résultats incluent uniquement le temps de traitement serveur, sans la latence réseau.
Formule
utilisateurs simultanés = requêtes/seconde × 3s (temps moyen entre actions)
Pourquoi c'est important
Un serveur à 40 €/mois avec une base de données bien indexée et Bun comme runtime peut servir des milliers d'utilisateurs simultanés. Pas de microservices, pas de Kubernetes, pas d'infrastructure à plusieurs millions d'euros nécessaire.
Ce que ça coûte ailleurs
Le même serveur (8 vCPU, 16 Go RAM) chez différents hébergeurs — tarifs mensuels, sans remises
Les hyperscalers (AWS, Google, Azure) proposent des services gérés, mais pour un portail avec une base de données bien indexée, un simple VPS offre les mêmes performances à une fraction du coût.
Testez-le vous-même
Installez k6 (open source, binaire unique) et exécutez le script ci-dessous.
import http from 'k6/http';
import { check, sleep } from 'k6';
// 50 utilizatori virtuali, 30 secunde
export const options = {
stages: [
{ duration: '10s', target: 50 },
{ duration: '15s', target: 50 },
{ duration: '5s', target: 0 },
],
};
const BASE = 'https://demoanaf.ro';
const SEARCHES = ['construct', 'transport', 'consult', 'auto', 'euro'];
const PEOPLE = ['pop', 'ion', 'maria', 'gheorghe'];
const CUIS = [33503335, 4221306, 14399840, 18189442];
function pick(arr) { return arr[Math.floor(Math.random() * arr.length)]; }
export default function () {
const roll = Math.random();
let res;
if (roll < 0.4)
res = http.get(BASE + '/api/search?q=' + pick(SEARCHES) + '&limit=10');
else if (roll < 0.65)
res = http.get(BASE + '/api/company/' + pick(CUIS));
else if (roll < 0.85)
res = http.get(BASE + '/api/search/people?q=' + pick(PEOPLE) + '&limit=10');
else
res = http.get(BASE + '/api/iban?q=timis');
check(res, {
'status 200': (r) => r.status === 200,
'response < 500ms': (r) => r.timings.duration < 500,
});
sleep(0.5);
}Vos résultats incluront la latence réseau — les nôtres sont mesurés directement sur le serveur. Le script utilise 50 utilisateurs virtuels pendant 30 secondes, avec une pause de 0,5s entre les requêtes.