← Semua pembelajaran / Astro Nol → Portal Berita
Fase 3 · Jalur API

"API menghemat koneksi database" — meluruskan argumennya

Menaruh API di antara Astro dan MySQL tidak mengurangi jumlah koneksi. Ia memindahkan pool-nya. Yang menentukan benar atau tidaknya adalah di mana Astro berjalan, bukan bahwa API itu ada.

Intisari

  • API tidak mengurangi koneksi database — ia memusatkan pool-nya di satu proses.
  • Kalau Astro berjalan sebagai proses panjang (ECS/EC2), pool-nya sudah terpusat. API menambah satu hop tanpa menyelesaikan apa pun.
  • Kalau Astro berjalan di Lambda, kekhawatirannya nyata — dan jawaban AWS-nya adalah RDS Proxy, bukan API buatan sendiri.
  • Alasan yang benar untuk memakai API: klien lain (aplikasi mobile), batas tim, dan menjaga kredensial DB jauh dari lapisan penyaji.
  • Untuk portalmu di ECS Fargate: baca publik langsung lewat Kysely, membership dan pembayaran lewat API.

Membongkar argumennya

Klaimnya: "kalau semua koneksi database dihandle API, kita hemat koneksi." Mari hitung.

TANPA API — Astro langsung ke MySQL
  12 task Astro × pool 10  =  120 koneksi

DENGAN API — Astro → API → MySQL
  12 task Astro × pool HTTP (bukan koneksi DB)  =  0 koneksi DB
   4 instance API × pool 10                     =  40 koneksi DB

Hemat 80 koneksi?

Bukan penghematan — pemindahan. Angkanya turun karena instance API-nya lebih sedikit, bukan karena ada API. Kalau kamu menjalankan 12 task Astro dengan pool 4 alih-alih 10, kamu mendapat angka yang sama tanpa membangun apa pun.

Dan API itu sendiri butuh kapasitas. 500 ribu request per jam yang tadinya langsung ke database sekarang jadi 500 ribu request HTTP ke API, ditambah 500 ribu kueri database dari API. Kamu menambah satu lapisan yang harus di-deploy, dipantau, di-scale, dan bisa mati sendiri — untuk beban yang sama.

Yang menyelesaikan masalah koneksi bukan API, tapi connection pooling. Dan pooling sudah kamu punya begitu Astro berjalan sebagai proses panjang. Yang tidak punya pooling efektif adalah runtime tanpa proses panjang — dan di sana ada solusi khusus yang jauh lebih murah daripada membangun API sendiri.

Kapan kekhawatiran itu benar-benar nyata

Astro berjalan diMasalah koneksi?Jawaban yang benar
ECS Fargate / EC2Tidak — pool hidup selama proses hidupKoneksi langsung, hitung connectionLimit dengan benar
LambdaYa, serius — tiap eksekusi bisa membuka pool sendiriRDS Proxy
Cloudflare WorkersYa — tidak ada koneksi TCP persistenHyperdrive
Vercel / Netlify serverlessYaRDS Proxy atau pooler pihak ketiga

RDS Proxy adalah layanan AWS yang duduk di depan RDS dan memelihara pool koneksi bersama. Ratusan eksekusi Lambda berbagi puluhan koneksi database sungguhan. Ia juga menangani failover lebih cepat dan bisa mengambil kredensial dari Secrets Manager, sehingga aplikasimu tidak pernah memegang sandi database.

Untuk portalmu di ECS Fargate, RDS Proxy tidak diperlukan — tapi ketahui bahwa ia ada, karena kalau suatu saat sebagian bebanmu pindah ke Lambda, inilah jawabannya. Bukan API.

Alasan yang benar untuk membangun API

AlasanBerlaku untukmu?
Ada klien selain website. Aplikasi mobile, mitra, ekspor data pelanggan. Kemungkinan besar ya — portal data biasanya punya konsumen lain
Logika bisnis tidak boleh digandakan. Aturan siapa yang boleh melihat apa harus hidup di satu tempat. Ya — aturan paywall dan langganan
Batas tim. Tim data memiliki data perusahaan; tim web memiliki tampilannya. Tergantung struktur timmu
Kredensial DB tidak boleh ada di lapisan penyaji. Relevan kalau lapisan penyajimu suatu saat pindah ke edge
Sumber datanya memang bukan MySQL-mu. Data pasar dari vendor, kurs, cuaca. Ya — dan di sini tidak ada pilihan lain
"Menghemat koneksi database" Tidak. Itu bukan alasan yang berdiri sendiri

Biaya yang jarang dihitung

Tiap hop menambah latensi, dan latensi itu berlipat di halaman yang butuh beberapa data.

Astro → MySQL (satu VPC)              ~1–3 ms per kueri
Astro → API → MySQL (satu VPC)        ~6–15 ms per kueri
Astro → API lintas region             ~50–150 ms per kueri

Halaman beranda dengan 6 kueri:
  langsung        ~12 ms
  lewat API       ~60 ms
  lintas region   ~500 ms  ← ini terasa oleh pembaca

Ditambah: satu layanan lagi yang bisa mati, satu deploy lagi yang bisa gagal, satu tempat lagi untuk mencari saat ada yang salah, dan kontrak tipe yang harus dijaga manual di antara keduanya.

Ini bukan argumen menentang API. Ini argumen menentang membangun API untuk alasan yang salah. Kalau kamu punya aplikasi mobile, bangun API-nya — dan itu keputusan yang benar meski latensinya bertambah. Yang tidak benar adalah menambah lapisan untuk menyelesaikan masalah koneksi yang tidak kamu miliki.

Rekomendasi untuk portalmu: hibrida

DataJalurAlasan
Artikel, kategori, tag, penulisKysely langsungVolume terbesar, latensi paling terasa, hanya website yang memakainya
Data perusahaan (tampilan)Kysely langsungSama — dan bisa di-cache di edge
Status langganan & hak aksesAPIAturannya harus satu, dipakai web dan mobile
Pembayaran & tagihanAPIMenyentuh uang; dipisahkan supaya bisa diaudit sendiri
Data pasar dari vendorAPI luarBukan datamu
PencarianAPI (OpenSearch)Bukan MySQL

Pembagiannya mengikuti satu pertanyaan: apakah data ini punya konsumen selain halaman yang sedang dirender? Kalau ya, API. Kalau tidak, langsung.

Kalau ternyata jawabannya API untuk semuanya

Kalau timmu memutuskan sebaliknya — misalnya karena aplikasi mobile sudah ada dan API-nya sudah dibangun — itu keputusan yang sah, dan sisa fase ini tetap berlaku sepenuhnya. Yang perlu kamu bawa:

Latihan: daftarkan sepuluh potong data yang muncul di beranda portalmu. Untuk tiap satu, jawab: apakah ada konsumen lain selain halaman ini? Berapa sering berubah? Boleh basi berapa lama? Tiga jawaban itu menentukan jalurnya dan strategi cache-nya. Simpan tabelnya — ia jadi rancangan arsitektur datamu untuk sisa roadmap ini.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.