𝗬𝗼𝘂𝗿 𝗦𝗲𝗿𝘃𝗲𝗿𝗹𝗲𝘀𝘀 𝗜𝘀 𝗟𝘆𝗶𝗻𝗴 𝗧𝗼 𝗬𝗼𝘂 𝗔𝗯𝗼𝘂𝘁 𝗦𝗰𝗮𝗹𝗲
স্কেলিং নিয়ে আপনার সার্ভারলেস আপনাকে মিথ্যা বলছে
সার্ভারলেস কম্পিউটিং অসীম স্কেল এবং শূন্য ওভারহেডের (zero overhead) প্রতিশ্রুতি দেয়। AWS Lambda বা Google Cloud Run-এর মতো প্ল্যাটফর্মগুলো আপনার কম্পিউট লেয়ারগুলোকে তাৎক্ষণিকভাবে স্কেল করতে পারে।
কিন্তু আপনার ব্যাকএন্ড তবুও ক্র্যাশ করছে।
সমস্যাটি আপনার কম্পিউটে নয়। সমস্যাটি আপনার ডাটাবেসে।
যখন আপনার ফাংশনগুলো স্কেল আপ হয়, তখন তারা একটি কানেকশন স্টর্ম (connection storm) তৈরি করে। প্রতিটি নতুন ফাংশন ইনস্ট্যান্স আপনার ডাটাবেসে একটি নতুন কানেকশন খোলার চেষ্টা করে। আপনার যদি ১,০০০টি ফাংশন থাকে, তবে একসাথে ১,০০০টি কানেকশন রিকোয়েস্ট আপনার Postgres বা MySQL ইনস্ট্যান্সে আঘাত হানবে।
রিলেশনাল ডাটাবেসের নির্দিষ্ট সীমা (hard limits) থাকে। একবার সেই সীমায় পৌঁছে গেলে, নতুন কানেকশনগুলো ব্যর্থ হয়। এর ফলে হাই ল্যাটেন্সি (high latency) এবং 5xx এরর দেখা দেয়। আপনার কম্পিউট প্রস্তুত থাকলেও আপনার ডাটাবেসটি চাপের মুখে ভেঙে পড়ছে।
আপনি তিনটি কৌশলের মাধ্যমে এটি সমাধান করতে পারেন:
একটি কানেকশন প্রক্সি ব্যবহার করুন ফাংশনগুলোকে সরাসরি আপনার ডাটাবেসের সাথে যুক্ত করবেন না। AWS RDS Proxy বা Google Cloud SQL Proxy-এর মতো একটি প্রক্সি ব্যবহার করুন। এই লেয়ারটি আপনার ফাংশন এবং ডাটাবেসের মাঝে অবস্থান করে। এটি কিছু স্থায়ী কানেকশনের একটি ছোট পুল (pool) পরিচালনা করে এবং সেগুলোকে আপনার অনেকগুলো ফাংশনের মধ্যে শেয়ার করে।
ডাটা প্রক্সি লেয়ার ইমপ্লিমেন্ট করুন উন্নত প্রক্সিগুলো শুধু কানেকশন পরিচালনা করার চেয়েও বেশি কিছু করতে পারে। সেগুলো করতে পারে:
- রিড (read) এবং রাইট (write) অপারেশনগুলোকে আলাদা আলাদা ডাটাবেস ইনস্ট্যান্সে ভাগ করা।
- ডাটাবেসের লোড কমাতে ঘনঘন ব্যবহৃত কুয়েরিগুলো (queries) ক্যাশ (cache) করা।
- ডাটাবেসে পৌঁছানোর আগেই কুয়েরিগুলোকে অপ্টিমাইজ করা।
- অ্যাসিনক্রোনাস রাইটে (Asynchronous Writes) চলে যান প্রতিটি ইউজার অ্যাকশনকে সিনক্রোনাস ডাটাবেস রাইট হিসেবে করা বন্ধ করুন। অনেক কাজের জন্য তাৎক্ষণিক কনসিস্টেন্সি (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) এবং ডাটার মাঝে বাফার (buffer) তৈরি করা শুরু করুন।
উৎস: https://dev.to/prabashanadev/your-serverless-is-lying-to-you-about-scale-4cga