तुमचे Serverless तुम्हाला स्केलिंगबद्दल खोटे सांगत आहे
Serverless computing अनंत स्केलिंग आणि शून्य ओव्हरहेडचे आश्वासन देते. AWS Lambda किंवा Google Cloud Run सारखे प्लॅटफॉर्म तुमचे कम्प्युट लेयर्स त्वरित स्केल करतात.
पण तरीही तुमचा बॅकएंड क्रॅश होतो.
समस्या तुमच्या कम्प्युटमध्ये नाही. समस्या तुमच्या डेटाबेसमध्ये आहे.
जेव्हा तुमचे फंक्शन्स स्केल होतात, तेव्हा ते 'कनेक्शन स्टॉर्म' (connection storm) तयार करतात. प्रत्येक नवीन फंक्शन इन्स्टन्स तुमच्या डेटाबेसशी नवीन कनेक्शन उघडण्याचा प्रयत्न करतो. जर तुमच्याकडे १,००० फंक्शन्स असतील, तर एकाच वेळी तुमच्या Postgres किंवा MySQL इन्स्टन्सवर १,००० कनेक्शन विनंत्या (requests) येत आहेत.
Relational डेटाबेसवर ठराविक मर्यादा असतात. एकदा का तुम्ही त्या मर्यादेपर्यंत पोहोचलात की, नवीन कनेक्शन्स अयशस्वी होतात. यामुळे हाय लॅटन्सी (high latency) आणि 5xx एरर्स येतात. तुमचे कम्प्युट तयार असते, पण तुमचा डेटाबेस कोलमडतो.
तुम्ही या तीन धोरणांनी (strategies) हे सुधारू शकता:
Connection Proxy वापरा फंक्शन्स थेट तुमच्या डेटाबेसशी कनेक्ट करू नका. AWS RDS Proxy किंवा Google Cloud SQL Proxy सारखा प्रॉक्सी वापरा. ही लेयर तुमच्या फंक्शन्स आणि डेटाबेसच्या मध्ये असते. ती काही मोजक्या पर्सिस्टंट कनेक्शन्सचा (persistent connections) पूल व्यवस्थापित करते आणि ते तुमच्या अनेक फंक्शन्समध्ये शेअर करते.
Data Proxy Layers लागू करा प्रगत प्रॉक्सी केवळ कनेक्शन्स व्यवस्थापित करण्यापेक्षा अधिक काम करू शकतात. ते:
- रीड्स (reads) आणि राइट्स (writes) वेगवेगळ्या डेटाबेस इन्स्टन्सेसमध्ये विभागू शकतात.
- डेटाबेसवरील लोड कमी करण्यासाठी वारंवार येणाऱ्या क्वेरीज (queries) कॅश (cache) करू शकतात.
- डेटाबेसवर पोहोचण्यापूर्वी क्वेरीज ऑप्टिमाइझ करू शकतात.
- Asynchronous Writes कडे वळा प्रत्येक युजर ॲक्शन ही सिंक्रोनस (synchronous) डेटाबेस राईट बनवणे थांबवा. अनेक कामांसाठी त्वरित सुसंगततेची (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) तयार करण्यास सुरुवात करा.
स्त्रोत: https://dev.to/prabashanadev/your-serverless-is-lying-to-you-about-scale-4cga