𝗬𝗼𝘂𝗿 𝗦𝗲𝗿𝘃𝗲𝗿𝗹𝗲𝘀𝘀 𝗜𝘀 𝗟𝘆𝗶𝗻𝗴 𝗧𝗼 𝗬𝗼𝘂 𝗔𝗯𝗼𝘂𝘁 𝗦𝗰𝗮𝗹𝗲

सर्वरलेस कंप्यूटिंग अनंत स्केलिंग और शून्य ओवरहेड का वादा करती है। AWS Lambda या Google Cloud Run जैसे प्लेटफॉर्म आपके कंप्यूट लेयर्स को तुरंत स्केल कर देते हैं।

लेकिन आपका बैकएंड फिर भी क्रैश हो जाता है।

समस्या आपका कंप्यूट नहीं है। समस्या आपका डेटाबेस है।

जब आपके फंक्शन्स स्केल होते हैं, तो वे 'कनेक्शन स्टॉर्म' (connection storm) पैदा करते हैं। प्रत्येक नया फंक्शन इंस्टेंस आपके डेटाबेस के साथ एक नया कनेक्शन खोलने की कोशिश करता है। यदि आपके पास 1,000 फंक्शन्स हैं, तो आपके Postgres या MySQL इंस्टेंस पर एक साथ 1,000 कनेक्शन रिक्वेस्ट पहुँचती हैं।

रिलेशनल डेटाबेस की कुछ निश्चित सीमाएँ (hard limits) होती हैं। एक बार जब आप उस सीमा तक पहुँच जाते हैं, तो नए कनेक्शन विफल हो जाते हैं। इससे हाई लेटेंसी (high latency) और 5xx एरर आते हैं। आपका कंप्यूट तैयार है, लेकिन आपका डेटाबेस दबाव नहीं झेल पा रहा है।

आप इसे तीन रणनीतियों के साथ ठीक कर सकते हैं:

  1. कनेक्शन प्रॉक्सी (Connection Proxy) का उपयोग करें फंक्शन्स को सीधे अपने डेटाबेस से न जोड़ें। AWS RDS Proxy या Google Cloud SQL Proxy जैसे प्रॉक्सी का उपयोग करें। यह लेयर आपके फंक्शन्स और डेटाबेस के बीच स्थित होती है। यह पर्सिस्टेंट कनेक्शन्स (persistent connections) के एक छोटे पूल को मैनेज करती है और उन्हें आपके कई फंक्शन्स के बीच साझा करती है।

  2. डेटा प्रॉक्सी लेयर्स लागू करें एडवांस्ड प्रॉक्सी केवल कनेक्शन मैनेज करने से कहीं अधिक काम करती हैं। वे यह कर सकते हैं:

  • अलग-अलग डेटाबेस इंस्टेंस पर रीड (reads) और राइट्स (writes) को विभाजित करना।
  • डेटाबेस लोड कम करने के लिए बार-बार होने वाली क्वेरीज़ को कैश (cache) करना।
  • डेटाबेस तक पहुँचने से पहले क्वेरीज़ को ऑप्टिमाइज़ करना।
  1. एसिंक्रोनस राइट्स (Asynchronous Writes) पर जाएँ हर यूजर एक्शन को सिंक्रोनस डेटाबेस राइट (synchronous database write) बनाना बंद करें। कई कार्यों के लिए तत्काल कंसिस्टेंसी (instant consistency) की आवश्यकता नहीं होती है।

इसके बजाय: User Action -> Function -> Sync DB Write -> Response

इसे आज़माएँ: User Action -> Function -> Push Event to Queue -> Fast Response

एक अलग फंक्शन उस इवेंट को उठा सकता है और बाद में डेटाबेस में लिख सकता है। यह आपके डेटाबेस को अचानक आने वाले ट्रैफिक स्पाइक्स (traffic spikes) से बचाता है।

वास्तविक स्केलेबिलिटी के लिए केवल कंप्यूट को स्केल करना ही काफी नहीं है। आपको इलास्टिक डेटा एक्सेस (elastic data access) के लिए डिज़ाइन करना चाहिए। सैद्धांतिक अधिकतम (theoretical maximums) के लिए प्रोविजनिंग करना बंद करें। अपने बस्टिंग फंक्शन्स (bursting functions) और अपने डेटा के बीच बफ़र्स (buffers) बनाना शुरू करें।

Source: https://dev.to/prabashanadev/your-serverless-is-lying-to-you-about-scale-4cga