# Aurora Serverless v2 după șase luni: pragul de 0,5 ACU și mitul auto-pause

Aurora Serverless v2 se vinde cu o singură propoziție: plătești capacitatea de bază de date pe care o folosești, scalată în fracțiuni de secundă. Șase luni de rulat în producție, staging și dev pentru o platformă a unui client din SUA ne-au învățat că propoziția e adevărată și că ascunde două întrebări care decid dacă e baza de date potrivită pentru tine: care e cea mai mică capacitate pe care ai voie s-o folosești și ce se întâmplă când nu folosești deloc.

Versiunea scurtă: e alegerea corectă pentru dev și staging, pentru workload-uri de producție cu vârfuri și pentru oricine preferă să nu se gândească la clase de instanțe. E alegerea greșită pentru o încărcare de producție mică și constantă, unde o instanță RDS plictisitoare e mai ieftină, și pentru una mare și constantă, unde Aurora provisioned e mai ieftină. Am alege-o din nou pentru proiectul ăsta. Iată aritmetica.

## Ce e un ACU și ce cumperi cu 0,5 dintr-unul

O Aurora Capacity Unit e cam 2 GiB de memorie cu CPU și rețea proporționale. Setezi un minim și un maxim per cluster, iar clusterul scalează între ele în funcție de încărcare. Prețul e per ACU-oră: $0,12 în us-east-1, deci un ACU care rulează toată luna e cam $88, iar jumătate de ACU e cam $44.

Minimul obișnuia să fie 0,5 ACU, punct. De la sfârșitul lui 2024 îl poți seta la 0, ceea ce activează auto-pause: după o perioadă de inactivitate configurabilă, clusterul încetează să taxeze compute-ul și se reia la următoarea conexiune. Asta e funcția la care se referă marketingul când zice „plătești ce folosești”. Tot aici trăiește și nuanța.

**În dev și staging am setat minimul 0.** Clusterele se opresc peste noapte și în weekend, iar reluarea durează cam 15 secunde. Primul request după o pauză așteaptă, sau pică și reîncearcă, și e în regulă pentru un mediu în care primul request de dimineață e al unui developer. Două clustere non-producție au trecut de la cam $90 pe lună la 0,5 ACU fiecare la cam $20.

**În producție nu putem.** O blocare de 15 secunde la primul request după o perioadă liniștită e o pană vizibilă pentru utilizatori pe o aplicație orientată spre consumatori, și ar pica și health check-ul App Runner care lovește baza de date. Așa că producția rulează cu minim 0,5 ACU, non-stop, indiferent dacă o folosește cineva sau nu. Ăsta e pragul: $44 pe lună înainte de primul query. Mare parte din timp clusterul nostru de producție stă între 0,5 și 1,5 ACU, iar factura lunară de compute ajunge pe la $90.

<div class="article-figure">
<svg viewBox="0 0 900 260" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Două grafice de arie cu ACU pe 24 de ore. Producție: niciodată sub 0,5 ACU, urcă la cam 1,5 în timpul zilei, cu un vârf la 4 în timpul unui job batch nocturn. Dev: la 0 mare parte din noapte și weekend, sare la 0,5–1 în orele de lucru, cu o reluare de 15 secunde marcată la prima conexiune de dimineață.">
<g font-family="Inter,system-ui,sans-serif" font-size="12">
<text x="20" y="22" fill="#f1f3ff" font-size="14" font-weight="700">ACU într-o zi lucrătoare</text>
<text x="20" y="48" fill="#9aa3c7">prod · min 0,5</text>
<line x1="20" y1="130" x2="880" y2="130" stroke="#2a3150"/>
<line x1="20" y1="110" x2="880" y2="110" stroke="#2a3150" stroke-dasharray="3,3"/><text x="884" y="114" fill="#9aa3c7" font-size="10">0,5</text>
<line x1="20" y1="70" x2="880" y2="70" stroke="#2a3150" stroke-dasharray="3,3"/><text x="884" y="74" fill="#9aa3c7" font-size="10">1,5</text>
<path d="M20,110 L120,110 L140,60 L160,110 L300,110 L340,84 L420,78 L520,72 L640,80 L720,92 L800,108 L880,110 L880,130 L20,130 Z" fill="#7b8cff" opacity="0.55"/>
<text x="140" y="52" text-anchor="middle" fill="#ffd166" font-size="10">02:00 batch · 4 ACU</text>
<text x="20" y="160" fill="#9aa3c7">dev · min 0, auto-pause</text>
<line x1="20" y1="240" x2="880" y2="240" stroke="#2a3150"/>
<line x1="20" y1="220" x2="880" y2="220" stroke="#2a3150" stroke-dasharray="3,3"/><text x="884" y="224" fill="#9aa3c7" font-size="10">0,5</text>
<path d="M20,240 L330,240 L330,220 L340,205 L420,210 L470,240 L500,240 L500,215 L620,212 L700,220 L700,240 L880,240 Z" fill="#4fffb0" opacity="0.55"/>
<line x1="330" y1="175" x2="330" y2="238" stroke="#ff6b8a" stroke-dasharray="4,3"/><text x="336" y="182" fill="#ff6b8a" font-size="10">09:00 prima conexiune · reluare ~15 s</text>
<text x="880" y="256" text-anchor="end" fill="#9aa3c7" font-size="10">00:00 → 24:00</text>
</g>
</svg>
</div>

## Ce e bine

**Scalarea e reală și e rapidă.** Un job batch nocturn care atinge mare parte din tabela de comenzi duce clusterul de la 0,5 la 4 ACU în sub un minut și înapoi în următoarele cincisprezece. N-am dimensionat niciodată o instanță pentru el. Pe RDS provisioned am plăti vârful job-ului toată ziua.

**E Postgres.** Extensii, `pg_dump`, orice ORM, orice unealtă. Data API și autentificarea IAM sunt acolo dacă le vrei; noi folosim IAM auth din Lambda-uri și sărim peste gestiunea parolelor pentru ele.

**Stocarea e separată și plictisitoare.** $0,10 per GB-lună, crește singură, niciun volum de redimensionat, niciun IOPS de provizionat. Backup-urile din fereastra de retenție sunt incluse.

**Auto-pause în non-producție e o funcție de cost autentică.** Două clustere, $70 pe lună economisiți, zero configurare dincolo de un minim de 0 și un timeout de inactivitate. A făcut [mediile de preview per PR](/ro/blog/preview-environments-per-pull-request-on-aws) practice: un cluster comun pe pauză, o bază de date per PR, zero cost de compute per PR.

## Ce e rău

**Pragul e prețul.** Pentru un workload de producție mic, 0,5 ACU non-stop înseamnă $44 plus stocare. O instanță RDS PostgreSQL `db.t4g.medium`, 2 vCPU și 4 GiB, e cam $47 on-demand și $30 rezervată, nu scalează, dar nici nu are nevoie. Dacă încărcarea ta de producție e constantă și mică, Serverless v2 e modul mai scump de a cumpăra același lucru.

**Scalarea în jos e lentă, și scalarea în jos e momentul în care cad conexiunile.** Capacitatea urcă în secunde și coboară în minute, intenționat. Când coboară, memoria instanței se micșorează, iar conexiunile care țineau working set-uri mari sunt omorâte. Am văzut erori sporadice de `connection reset` o săptămână înainte să le corelăm cu evenimentele de scale-in. RDS Proxy în față a rezolvat pentru Lambda-uri; pentru App Runner am setat timeout-ul de inactivitate al pool-ului sub intervalul de scale-in.

**ACU maxim e o limită de memorie pe care o poți lovi în momentul nepotrivit.** Am setat max 4 ca să plafonăm costul. Un query de raportare care avea nevoie de mai multă memorie decât dau 4 ACU n-a devenit mai lent, a picat. Pe RDS provisioned același query ar fi făcut swap și s-ar fi târât, ceea ce e, poate, mai rău, dar s-ar fi terminat.

**Reluarea după auto-pause nu e 15 secunde pentru toată lumea.** E 15 secunde pentru cluster. Adaugă cold start-ul Lambda din față și pool-ul de conexiuni al instanței App Runner care se restabilește, și primul request de dimineață în dev poate lua 30 de secunde. Acceptabil acolo. Nu e o funcție de producție, orice ar sugera pagina de prețuri.

## Costul, sincer

Comparația pe care o vrea lumea e Serverless v2 față de alternative la o încărcare medie dată. La preț de listă în us-east-1, doar compute:

| Încărcare medie | Aurora Serverless v2 | RDS PostgreSQL (t4g / r6g on-demand) | Aurora provisioned (r6g.large) |
|---|---|---|---|
| Inactiv, pe pauză | $0 | $47 (t4g.medium) | $200 |
| 0,5 ACU constant | $44 | $47 | $200 |
| 1 ACU constant | $88 | $47 | $200 |
| 2 ACU constant | $175 | $95 (t4g.large) | $200 |
| 4 ACU constant | $350 | $190 (r6g.large) | $200 |
| 8 ACU constant | $700 | $380 (r6g.xlarge) | $400 (r6g.xlarge) |
| 4 ACU medie, 16 vârf | $350 | $760 (dimensionat pe vârf) | $800 (dimensionat pe vârf) |

Punctul de încrucișare e clar. Sub cam 1 ACU medie, o instanță RDS mică e mai ieftină sau egală. Peste cam 2 ACU *constant*, Aurora provisioned e mai ieftină. Serverless v2 câștigă la mijloc, și câștigă decisiv când vârful e de câteva ori media, adică ultimul rând, cel care descrie majoritatea aplicațiilor reale cu utilizatori într-un singur fus orar.

<div class="article-figure">
<svg viewBox="0 0 900 260" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Grafic liniar al costului lunar de compute în funcție de încărcarea medie în ACU, de la 0 la 8. Aurora Serverless v2 e o linie dreaptă de la 0 la 700 de dolari. RDS on-demand e o scară de la 47 la 380 de dolari. Aurora provisioned r6g.large e plată la 200 de dolari până la 4 ACU, apoi 400. Serverless v2 e cea mai ieftină sub cam 1 ACU doar când e pe pauză, și între linii când încărcarea are vârfuri; provisioned câștigă peste 2 ACU constant.">
<g font-family="Inter,system-ui,sans-serif" font-size="12">
<text x="20" y="22" fill="#f1f3ff" font-size="14" font-weight="700">Compute lunar vs încărcare medie (constantă)</text>
<line x1="70" y1="230" x2="870" y2="230" stroke="#9aa3c7"/><line x1="70" y1="40" x2="70" y2="230" stroke="#9aa3c7"/>
<text x="70" y="248" text-anchor="middle" fill="#9aa3c7" font-size="10">0</text><text x="270" y="248" text-anchor="middle" fill="#9aa3c7" font-size="10">2 ACU</text><text x="470" y="248" text-anchor="middle" fill="#9aa3c7" font-size="10">4 ACU</text><text x="670" y="248" text-anchor="middle" fill="#9aa3c7" font-size="10">6 ACU</text><text x="870" y="248" text-anchor="middle" fill="#9aa3c7" font-size="10">8 ACU</text>
<text x="62" y="234" text-anchor="end" fill="#9aa3c7" font-size="10">$0</text><text x="62" y="140" text-anchor="end" fill="#9aa3c7" font-size="10">$350</text><text x="62" y="46" text-anchor="end" fill="#9aa3c7" font-size="10">$700</text>
<polyline points="70,230 870,42" fill="none" stroke="#7b8cff" stroke-width="2.5"/>
<text x="700" y="70" fill="#7b8cff" font-weight="700">Serverless v2 · $88 per ACU</text>
<polyline points="70,217 170,217 170,217 270,204 270,204 370,179 370,179 470,179 470,128 570,128 570,128 670,128 670,128 770,128 770,128 870,128" fill="none" stroke="#4fffb0" stroke-width="2.5"/>
<text x="480" y="112" fill="#4fffb0" font-weight="700">RDS on-demand, dimensionat corect</text>
<polyline points="70,176 470,176 470,122 870,122" fill="none" stroke="#ffd166" stroke-width="2.5" stroke-dasharray="6,4"/>
<text x="90" y="168" fill="#ffd166" font-weight="700">Aurora provisioned r6g.large · $200</text>
<rect x="70" y="40" width="100" height="190" fill="#4fffb0" opacity="0.06"/><text x="120" y="56" text-anchor="middle" fill="#4fffb0" font-size="10">v2 câștigă dacă e pe pauză</text>
<rect x="270" y="40" width="600" height="190" fill="#ffd166" opacity="0.05"/><text x="570" y="56" text-anchor="middle" fill="#ffd166" font-size="10">încărcare constantă: provisioned sau RDS câștigă</text>
</g>
</svg>
</div>

## Setări pe care le-am copia în orice cluster nou

- **Producție:** min 0,5, max dimensionat după cel mai mare query pe care l-ai văzut plus unu, nu după buget. Deletion protection pornit. RDS Proxy pentru orice are formă de Lambda.
- **Non-producție:** min 0, auto-pause după 10 minute, max 2. Accepți blocajul de dimineață.
- **Ambele:** timeout de inactivitate al pool-ului de conexiuni sub 5 minute, ca evenimentele de scale-in să nu te surprindă. Stocare I/O-Optimized doar dacă taxele de I/O depășesc cam 25 % din factură, ceea ce la noi nu se întâmplă.
- **Urmărește `ServerlessDatabaseCapacity` și `ACUUtilization`** în CloudWatch. A doua la 100 % mai mult de câteva minute înseamnă că ACU maxim e prea mic și ceva urmează să pice, nu să încetinească.

## Verdict

| | Scor | Notă |
|---|---|---|
| Potrivire pentru dev și staging | 5/5 | Auto-pause o face aproape gratuită |
| Potrivire pentru producție cu vârfuri | 5/5 | Raportul vârf/medie e locul unde își câștigă prețul |
| Potrivire pentru producție mică și constantă | 2/5 | Pragul de 0,5 ACU costă mai mult decât o instanță t4g care face aceeași treabă |
| Potrivire pentru producție mare și constantă | 2/5 | Aurora provisioned e mai ieftină peste cam 2 ACU |
| Surprize operaționale | 3/5 | Căderile de conexiuni la scale-in și prăpastia de max ACU, ambele rezolvabile odată știute |
| Am alege-o din nou | Da | Pentru workload-ul ăsta, cu min 0,5 în prod și min 0 în rest |

Pagina de prețuri zice că plătești ce folosești. Versiunea exactă e: plătești cel puțin jumătate de ACU în producție, nu plătești nimic când e pe pauză în altă parte, și plătești o primă per ACU în schimbul faptului că nu dimensionezi nimic. Dacă prima merită depinde în întregime de forma încărcării tale, și acum ai tabelul.

Alegi între Serverless v2, RDS și Aurora provisioned pentru ceva real? [Facem aritmetica împreună](/contact).
