R
Rəşad QuliyevMüəllif
rashad.quliyev@example.comNeon Serverless PostgreSQL və Connection Pooling Memarlığı
Bulud əsaslı serverless arxitekturalarda verilənlər bazası bağlantılarının tükənməsinin qarşısını almaq yolları.
Serverless arxitekturalar (AWS Lambda, Vercel, Cloudflare) veb tətbiqlərin miqyaslanmasını inanılmaz dərəcədə asanlaşdırdı. Saytınıza birdən-birə 10,000 istifadəçi daxil olduqda sistem saniyələr içində yüzlərlə yeni funksiya nüsxəsi açır və heç bir istifadəçi gecikmə hiss etmir.
Lakin bu möhtəşəm arxitekturanın bir böyük "düşməni" var idi: Ənənəvi Verilənlər Bazası Əlaqələri.
📌 1. Bağlantı Tükənməsi (Connection Exhaustion) Nədir?
Klassik PostgreSQL serverləri hər bir qoşulan istifadəçi üçün ayrıca bir proses açır və bu proses yaddaşda (RAM) təxminən 10MB yer tutur. PostgreSQL standart olaraq maksimum 100-200 bağlantıya icazə verir.
Əgər eyni anda 500 serverless funksiya işə düşüb hərəsi bazaya 1 bağlantı açmağa çalışsa, baza dərhal 'Too Many Connections' xətası ilə çökəcək.
📌 2. Neon və PgBouncer Həlli
Neon PostgreSQL bu problemi 'Connection Pooling' (Bağlantı Hovuzu) texnologiyası ilə həll edir.
Funksiyalar birbaşa bazaya deyil, arada dayanan yüksək sürətli PgBouncer proksisinə qoşulur. Minlərlə serverless funksiya cəmi 20-30 real baza bağlantısını bir-biri ilə paylaşır (Multiplexing). Bir sorğu bitən kimi həmin bağlantı növbədə gözləyən digər funksiyaya verilir.
📌 3. Prisma ilə Düzgün İnteqrasiya
Layihəmizdəki 'src/lib/prisma.ts' konfiqurasiyasında:
- '@prisma/adapter-pg' ilə birbaşa 'Pool' obyekti yaradılır.
- 'DATABASE_URL' bağlantı hovuzunun portuna (PgBouncer) yönləndirilir.
- Migrasiyalar və seed əməliyyatları üçün isə 'DIRECT_URL' (birbaşa baza portu) istifadə olunur.
Bu arxitektura sayəsində bloqumuz hər hansı ani trafik partlayışı zamanı qətiyyən yavaşlamır və bazanı qoruyur.
←Bütün yazılara qayıtKateqoriya: Database