ÉlőNyilvánosan ellenőrizhető

Mit tud egy 40 €-s szerver

Több mint 4 millió cég és tízmillió rekord. Egyetlen szerver. Nincs mikroszolgáltatás, nincs Kubernetes, nincsenek divatszavak.

Szerver8 vCPU, 16 GB RAM, 40 €/hónap
AdatbázisPostgreSQL 16 — 4M+ cég, tízmillió rekord
GyorsítótárRedis 7 — adattípusonkénti TTL
RuntimeBun + Fastify 5 — natív TypeScript

Élő teszt

100 valós lekérdezés, 20 egyidejűleg, az éles adatbázis ellen

Kattintson a gombra 100 valós lekérdezés futtatásához és a szerver kapacitásának méréséhez.

Módszertan

Mit mérünk

A kapacitásteszt 100 valós lekérdezést futtat (céglekérdezés, személykeresés, CUI-részletek, IBAN), 20-at egyszerre, az éles adatbázis ellen, amely több mint 4 millió céget, képviselőt és tízmillió összekapcsolt rekordot tartalmaz. Az egyidejű felhasználók becslése azt feltételezi, hogy egy valós felhasználó átlagosan 3 másodpercenként küld egy kérést (oldalbetöltés + gondolkodási idő).

Hogyan mérünk

A lekérdezési függvények közvetlenül a szerveren hívódnak meg (HTTP-overhead nélkül), és az időt performance.now() méri — ezredmilliszekundum felbontással. Az eredmények kizárólag a szerver feldolgozási idejét tartalmazzák, hálózati késleltetés nélkül.

Képlet

egyidejű felhasználók = lekérés/másodperc × 3 mp (átlagos műveletek közti idő)

Miért fontos

Egy jól indexelt adatbázissal és Bun runtime-mal ellátott 40 €/hónap szerver ezreket tud kiszolgálni egyidejűleg. Nincs szükség mikroszolgáltatásokra, Kubernetesre, milliós infrastruktúrára.

Mennyibe kerül máshol

Ugyanaz a szerver (8 vCPU, 16 GB RAM) különböző szolgáltatóknál — havi árak, kedvezmények nélkül

DemoANAF.ro
40/hó
Hetzner Cloud
16/hó
OVHcloud
26/hó
Vultr
44/hó
DigitalOcean
58/hó
AWS EC2
180/hó
Google Cloud
150/hó
Azure
258/hó
Hetzner Cloud: shared CPUAWS EC2: on-demandGoogle Cloud: on-demandAzure: on-demand

A nagy felhőszolgáltatók (AWS, Google, Azure) felügyelt szolgáltatásokat kínálnak, de jól indexelt adatbázissal rendelkező portál esetén egy egyszerű VPS ugyanolyan teljesítményt nyújt töredék áron.

Tesztelje saját maga

Telepítse a k6 (nyílt forráskódú, egyfájlos bináris) eszközt, és futtassa az alábbi szkriptet.

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);
}

Az eredmények tartalmazzák a hálózati késleltetést — a mi méréseinket közvetlenül a szerveren végezzük. A szkript 50 virtuális felhasználót alkalmaz 30 másodpercig, 0,5 mp szünettel a kérések között.