Lo que puede hacer un servidor de 40 €
Más de 4 millones de empresas y decenas de millones de registros. Un solo servidor. Sin microservicios, sin Kubernetes, sin palabras de moda.
Prueba en vivo
100 consultas reales, 20 concurrentes, contra la base de datos de producción
Pulsa el botón para ejecutar 100 consultas reales y medir la capacidad del servidor.
Metodología
Qué medimos
La prueba de capacidad ejecuta 100 consultas reales (búsqueda de empresa, búsqueda de personas, detalles de CUI, IBAN), 20 a la vez, contra la base de datos de producción con más de 4 millones de empresas, representantes y decenas de millones de registros interconectados. La estimación de usuarios concurrentes asume que un usuario real realiza de media 1 solicitud cada 3 segundos (carga de página + tiempo de reflexión).
Cómo medimos
Las funciones de consulta se llaman directamente en el servidor (sin overhead HTTP) y el tiempo se mide con performance.now() — resolución por debajo del milisegundo. Los resultados incluyen solo el tiempo de procesamiento del servidor, no la latencia de red.
Fórmula
usuarios concurrentes = solicitudes/segundo × 3s (tiempo medio entre acciones)
Por qué importa
Un servidor de 40 €/mes con una base de datos bien indexada y Bun como runtime puede servir a miles de usuarios concurrentes. Sin microservicios, sin Kubernetes, sin infraestructura millonaria.
Lo que cuesta en otros proveedores
El mismo servidor (8 vCPU, 16 GB RAM) en distintos proveedores — precios mensuales, sin descuentos
Los grandes proveedores en la nube (AWS, Google, Azure) ofrecen servicios gestionados, pero para un portal con una base de datos bien indexada, un VPS simple ofrece el mismo rendimiento a una fracción del coste.
Pruébalo tú mismo
Instala k6 (código abierto, binario único) y ejecuta el script siguiente.
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);
}Tus resultados incluirán la latencia de red — los nuestros se miden directamente en el servidor. El script utiliza 50 usuarios virtuales durante 30 segundos, con una pausa de 0,5 s entre solicitudes.