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

Serverless کمپیوٹنگ لامحدود اسکیل اور زیرو اوور ہیڈ (zero overhead) کا وعدہ کرتی ہے۔ AWS Lambda یا Google Cloud Run جیسے پلیٹ فارمز آپ کے کمپیوٹ لیئرز کو فوری طور پر اسکیل کرتے ہیں۔

لیکن آپ کا بیک اینڈ (backend) پھر بھی کریش ہو جاتا ہے۔

مسئلہ آپ کے کمپیوٹ کا نہیں ہے۔ مسئلہ آپ کے ڈیٹا بیس کا ہے۔

جب آپ کے فنکشنز اسکیل اپ ہوتے ہیں، تو وہ کنکشن کا طوفان (connection storm) کھڑا کر دیتے ہیں۔ فنکشن کا ہر نیا انسٹنس آپ کے ڈیٹا بیس کے ساتھ ایک نیا کنکشن کھولنے کی کوشش کرتا ہے۔ اگر آپ کے پاس 1,000 فنکشنز ہیں، تو آپ کے Postgres یا MySQL انسٹنس پر ایک ساتھ 1,000 کنکشن کی درخواستیں پہنچتی ہیں۔

ریلیشنل ڈیٹا بیسز (Relational databases) کی سخت حدود ہوتی ہیں۔ ایک بار جب آپ اس حد تک پہنچ جاتے ہیں، تو نئے کنکشنز ناکام ہو جاتے ہیں۔ اس سے ہائی لیٹنسی (high latency) اور 5xx ایررز پیدا ہوتے ہیں۔ آپ کا کمپیوٹ تیار ہے، لیکن آپ کا ڈیٹا بیس بوجھ نہیں اٹھا پا رہا۔

آپ اسے تین حکمت عملیوں کے ذریعے ٹھیک کر سکتے ہیں:

  1. Use a Connection Proxy فنکشنز کو براہ راست اپنے ڈیٹا بیس سے نہ جوڑیں۔ AWS RDS Proxy یا Google Cloud SQL Proxy جیسا پراکسی استعمال کریں۔ یہ لیئر آپ کے فنکشنز اور ڈیٹا بیس کے درمیان کام کرتی ہے۔ یہ مستقل کنکشنز کے ایک چھوٹے پول (pool) کو مینیج کرتی ہے اور انہیں آپ کے متعدد فنکشنز کے درمیان تقسیم کرتی ہے۔

  2. Implement Data Proxy Layers ایڈوانسڈ پراکسیز صرف کنکشنز مینیج کرنے سے کہیں زیادہ کام کرتی ہیں۔ وہ یہ کر سکتے ہیں:

  • مختلف ڈیٹا بیس انسٹنسز پر ریڈز (reads) اور رائٹس (writes) کو تقسیم کرنا۔
  • ڈیٹا بیس کا بوجھ کم کرنے کے لیے کثرت سے ہونے والی کوئریز (queries) کو کیش (cache) کرنا۔
  • ڈیٹا بیس تک پہنچنے سے پہلے کوئریز کو آپٹیمائز کرنا۔
  1. Move to Asynchronous Writes ہر یوزر ایکشن کو سنکرونس (synchronous) ڈیٹا بیس رائٹ بنانے سے گریز کریں۔ بہت سے کاموں کے لیے فوری کنسسٹنسی (consistency) کی ضرورت نہیں ہوتی۔

اس کے بجائے: User Action -> Function -> Sync DB Write -> Response

یہ آزمائیں: User Action -> Function -> Push Event to Queue -> Fast Response

ایک الگ فنکشن اس ایونٹ کو لے سکتا ہے اور بعد میں ڈیٹا بیس میں لکھ سکتا ہے۔ یہ آپ کے ڈیٹا بیس کو اچانک ٹریفک کے دباؤ (traffic spikes) سے محفوظ رکھتا ہے۔

حقیقی اسکیل ایبلٹی (scalability) کے لیے صرف کمپیوٹ کو اسکیل کرنا کافی نہیں ہے۔ آپ کو ایلسٹک ڈیٹا ایکسیس (elastic data access) کے لیے ڈیزائن کرنا ہوگا۔ نظریاتی حد سے زیادہ (theoretical maximums) کے لیے وسائل فراہم کرنا بند کریں۔ اپنے تیزی سے بڑھنے والے فنکشنز اور اپنے ڈیٹا کے درمیان بفرز (buffers) بنانا شروع کریں۔

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