সাম্প্রতিক বছরে, সার্ভারলেস আর্কিটেকচার এবং এজ কম্পিউটিং অ্যাপ্লিকেশন ডিপ্লয়মেন্টের জন্য খুব জনপ্রিয় হয়ে উঠছে। কিন্তু একটি সার্ভারলেস এবং/অথবা এজ ফাংশনের ভেতরে অ্যাপ্লিকেশন স্টেট এবং ডেটা স্টোর করা একটি আলাদা গল্প। এখানে অনেক চ্যালেঞ্জ আছে যেমন: ডেটাবেস কানেকশন ম্যানেজ করা, একাধিক লোকেশন থেকে ফাস্ট অ্যাক্সেসের জন্য ডেটা উপলব্ধ করানো ইত্যাদি। সার্ভারলেস অ্যাক্সেস সাপোর্ট করে এমন ডেটাবেস সার্ভিসগুলো قليلًا, এবং এজ ফাংশনগুলোর জন্যও উপযুক্ত আরও কম। (আপনি একটি বিস্তারিত বিশ্লেষণ এখানে পড়তে পারেন।)
আপস্ট্যাশে, দিন এক থেকে, আমরা একটি সার্ভারলেস রেডিস-কম্প্যাটিবল ডেটাবেস প্রদান করছি কম লেটেন্সি এবং প্রতি-রিকোয়েস্ট প্রাইসিং মডেলের সাথে। এছাড়া আমরা একটি ফার্স্ট-ক্লাস রেস্ট এপিআই এক্সপোজ করি ডেটাবেসের ওপর সরাসরি তৈরি করা। রেস্ট এপিআই কানেকশন ম্যানেজমেন্টের ঝামেলা দূর করে, বিশেষ করে সার্ভারলেস ফাংশনে ব্যবহার করার সময়, কিন্তু এজ লোকেশন বা ওয়েব ব্রাউজার যেন রেস্ট্রিক্টেড এনভায়রনমেন্ট থেকেও অ্যাক্সেসযোগ্য।
আজ আমরা খুশি ঘোষণা করছি গ্লোবাল ডেটাবেস, যা ডেটাবেসকে গ্লোবালি উপলব্ধ করতে, ক্লায়েন্ট এবং এজ লোকেশনের কাছে روঝে আনার জন্য একটি কদম এগিয়ে, কম লেটেন্সি রিডের জন্য। গ্লোবাল ডেটাবেস ফ্রি টিয়ারে উপলব্ধ, আপনি কোনো খরচ ছাড়া ট্রাই করতে পারেন।
কখন ব্যবহার করবেন? 🤔
একটি গ্লোবাল ডেটাবেস একাধিক মহাদেশের একাধিক রিজনে ডিপ্লয় করা হয় এবং ক্লায়েন্ট রিকোয়েস্টগুলো নিকটতম রিজনে রাউট করা হয় লেটেন্সি মিনিমাইজ করার জন্য যখন ইউজাররা বিশ্বব্যাপী ডিস্ট্রিবিউটেড থাকে। আপস্ট্যাশ গ্লোবাল ডেটাবেসগুলো ব্যবহার করা যায়:
-
এজ ফাংশনস (ক্লাউডফ্লেয়ার ওয়ার্কার্স, ফাস্টলি কম্পিউট): বিল্ট-ইন রেস্ট এপিআই এবং সকল এজ লোকেশন থেকে কম লেটেন্সি অ্যাক্সেস এটিকে একটি পারফেক্ট সমাধান বানায়।
-
মাল্টি-রিজন সার্ভারলেস ডিপ্লয়মেন্টস: AWS Lambda, Vercel এবং Netlify ফাংশনগুলো একাধিক রিজনে ডিপ্লয় করা যায়। একটি গ্লোবাল ডেটাবেস লো লেটেন্সি ডেটা প্রদান করে আপনার সার্ভারলেস ফাংশনগুলো যেখানেই থাকে।
-
ওয়েব/মোবাইল প্ল্যাটফর্মস: রিড-অনلی রেস্ট এপিআই ব্যবহার করে, আপনি সরাসরি একটি ওয়েব/মোবাইল অ্যাপ্লিকেশন থেকে রেডিস ডেটাবেস অ্যাক্সেস করতে পারেন। একটি গ্লোবাল ডেটাবেস बेटার লেটেন্সি প্রদান করবে যেহেতু ইউজাররা যেকোনো জায়গা থেকে আসতে পারে।
গ্লোবাল ডেটাবেসের পেছনে আরেকটি লক্ষ্য হলো ডেটাবেসকে রিজন-ওয়াইড ফেইলিয়ার থেকে রেজিলিয়েন্ট করা। যখন একটি রিজন অবেইলেবল নয়, আপনার রিকোয়েস্টগুলো নিকটতম অবেইলেবল রিজনে রাউট করা হয়; তাই আপনার ডেটাবেস অবেইলেবল থাকে।
কীভাবে কাজ করে? ⚙️

গ্লোবাল ডেটাবেস মডেলে, একই ডেটাবেসের একাধিক রেপ্লিকা থাকে এবং সেগুলো মিলে একটি ক্লাস্টার তৈরি করে। প্রতিটি রেপ্লিকা অন্য ক্লাস্টার মেম্বারদের সাথে কানেক্টেড থাকে এবং একটি ফেইলার ডিটেক্টর ব্যবহার করে उनদের লাইভনেস ট্র্যাক করে। ক্লাস্টার মেম্বারশিপ এবং ফেইলার ডিটেকশন দুটোই একটি গসিপ-বেসড কমিউনিকেশন প্রোটোকল ব্যবহার করে ম্যানেজ করা হয়। (দেখুন SWIM: scalable weakly-consistent infection-style process group membership protocol.)
ডেটা রেপ্লিকেট করতে (বিশেষত, ইনডিভিজুয়াল রাইট/আপডেট/ডিলিট), সিঙ্গল লিডার রেপ্লিকেশন মডেল ব্যবহার করা হয়। একটি কি গ্রুপ একটি লিডার রেপ্লিকাকে অ্যাসাইন করা হয়, যেটি একটি লিডার ইলেকশন মেকানিজম ব্যবহার করে নির্বাচিত হয় একটি মেম্বারশিপ চেঞ্জের পর। বাকি রেপ্লিকাগুলো সেই কি গ্রুপের জন্য সেই লিডারের ব্যাকআপ হয়ে যায়। যখন লিডার রেপ্লিকা ফেইলার ডিটেক্টর দ্বারা ফেলড হিসেবে ডিটেক্ট করা হয়, বাকি রেপ্লিকাগুলো একটি নতুন লিডার ইলেকশন রাউন্ড শুরু করে এবং একটি নতুন লিডার নির্বাচন করে। ইলেকশন প্রসেস চলার সময়, ডেটাবেস একটি সংক্ষিপ্ত সময়ের জন্য অনুপলব্ধ থাকে এবং সব রিকোয়েস্ট ব্লক থাকে যতক্ষণ না ইলেকশন কমপ্লিট হয়।
শুধু লিডার রেপ্লিকা রাইট রিকোয়েস্ট অ্যাসেপ্ট এবং প্রসেস করে, ব্যাকআপ রেপ্লিকাগুলো ইন্টারন্যালি রাইটস ফরওয়ার্ড করে লিডারকে ক্লায়েন্টকে নোটিফাই করা ছাড়া। তাই রেপ্লিকা টাইপ যেকোনো হোক, লিডার বা ব্যাকআপ, একটি ক্লায়েন্ট রাইট রিকোয়েস্ট পাঠাতে পারে। রাইট রিকোয়েস্ট প্রসেস করার পর, লিডার রেপ্লিকা সেটি ব্যাকআপ রেপ্লিকাগুলোর মধ্যে প্রোপাগেট করে।
কনসিস্টেন্সি সম্পর্কে আরও 📊
বর্তমানে, গ্লোবাল ডেটাবেসগুলো উইক्ली কনসিস্টেন্ট, এগুলো এখনো স্ট্রอง কনসিস্টেন্সি সাপোর্ট করে না। একটি রাইট রিকোয়েস্টের রেসপন্স ক্লায়েন্টকে রিটার্ন করা হয় লিডার রেপ্লিকা অপারেশন প্রসেস করার পর, ব্যাকআপের মেজোরিটি থেকে ACK এর জন্য অপেক্ষা করা ছাড়া। রাইটের রেজাল্ট ব্যাকআপ রেপ্লিকাগুলোতে অ্যাসিনক্রোনাসলি পেরালেলে রেপ্লিকেট হয়।
রিড রিকোয়েস্টগুলো যেকোনো রেপ্লিকা দ্বারা প্রসেস করা হয়, যা बेटার রিড স্কেলেবিলিটি দেয় কিন্তু এটিও মানে একটি রিড রিকোয়েস্ট পুরনো ভ্যালু রিটার্ন করতে পারে যতক্ষণ না একই কির জন্য একটি রাইট অপারেশনের রেজাল্ট ব্যাকআপ রেপ্লিকাতে পৌঁছায়।
কনফ্লিক্ট না থাকলে সহজ হতো! 😅
ক্লাস্টার-ওয়াইড ফেইলিয়ারের কেসে যেমন নেটওয়ার্ক পার্টিশন, একই কির জন্য একাধিক লিডার নির্বাচিত হয়তে পারে। অর্থাৎ একাধিক রেপ্লিকা রাইট অ্যাসেপ্ট করে এবং ডেটা ভিন্ন রেপ্লিকাতে ডাইভার্জ করে। কনফ্লিক্টগুলো শুরুতেই প্রিভেন্ট করা সম্ভব হতো একটি স্ট্রংগার মডেল ব্যবহার করে ক্যালভিন বা স্প্যানার (হয়তো প্যাক্সোস, রাফটও) প্রোটোকল দিয়ে, কিন্তু এটা আমরা এই মুহূর্তে ফলো করতে চাই না।
বদলে, গ্লোবাল ডেটাবেস কনফ্লিক্ট হোনোর অনুমতি দেয় এবং সেগুলো রেজলভ করে LWW (লাস্ট-রাইট-উইনস) অ্যালগরিদম ব্যবহার করে এবং রেপ্লিকাগুলোকে ইভেনচুয়ালি একই স্টেটে কনভার্জ করে। আপস্ট্যাশ ডেটাবেসে প্রতিটি রাইটের একটি ইউনিক, মনোটনিক সিকোয়েন্স নম্বর থাকে। প্রতিবার একটি রেপ্লিকা লিডার হলে, এটি সেটি প্রসেস করা প্রথম রাইটের সিকোয়েন্স মার্ক করে। যখন দুটি লিডার রেপ্লিকা একে অপরকে আবিষ্কার করে, সেগুলো লিডার হওয়ার পর তাদের রাইটস শেয়ার করে, এবং তাদের কনফ্লিক্ট রেজলভ করে।
সকল রেপ্লিকা সমান নয় ⚖️
কিছু রেপ্লিকা অন্যদের চেয়ে বেশি সমান। কারণ শুধু কিছুটা লিডার হিসেবে নির্বাচিত হতে পারে। একটি গ্লোবাল ডেটাবেস ক্লাস্টারে, একটি রেপ্লিকাকে লার্নার হিসেবে মার্ক করা যায়, যা সেটিকে লিডার ইলেকশনের জন্য অনুপযুক্ত করে। লার্নার রেপ্লিকাগুলো সবসময় রিড-অনلی থাকে এবং লিডারশিপের জন্য ক্যান্ডিডেট হতে পারে না।
লার্নার রেপ্লিকা যোগ করা ক্লাস্টারের স্ট্যাবিলিটি প্রভাবিত করে না এবং সেগুলো স্প্লিট হলে রাইট কনফ্লিক্ট কেইন না। এমনকি যখন সেগুলো লিডার থেকে স্প্লিট হয়, সেগুলো রিড রিকোয়েস্ট অ্যালো করতে থাকে এবং রিমেইনিং রাইটস সিঙ্ক করে স্প্লিট হিল হওয়ার পর। তাই লার্নার রেপ্লিকাগুলো আমাদের জন্য একটি খুব ভালো ইউটিলিটি আরও এজ লোকেশন এক্সপ্যান্ড করার জন্য।
আরও রিজন, আরও রেপ্লিকা? 🌍
আমাদের ইনিশিয়াল রিলিজে, আমরা গ্লোবাল ডেটাবেস পাঁচটি রেপ্লিকা এবং পাঁচটি রিজনে অফার করছি। এবং US এবং EU রিজনের বাইরের রেপ্লিকাগুলো লার্নার হিসেবে মার্ক করা থাকে, তাই শুধু US এবং EU রিজনের রেপ্লিকাগুলো লিডার হিসেবে নির্বাচিত হতে পারে। এটি নেটওয়ার্ক পার্টিশনের সময় রাইট-কনফ্লিক্টের সম্ভাবনা 좁ায়। কিন্তু এছাড়া আমাদের আরও রিজন লার্নার রেপ্লিকা হিসেবে যোগ করার সুযোগ দেয় নেটওয়ার্ক পার্টিশনের চিন্তা ছাড়া।
আরও পথ বাকি 🛣️
বর্তমানে গ্লোবাল ডেটাবেসগুলো শুধু রিড অপারেশনদের লেটেন্সি অপ্টিমাইজ/মিনিমাইজ করার জন্য ডিজাইন করা। সেগুলো রাইট-হেভি লোডের জন্য ভালো ফিট নয়। আমরা রাইট অপারেশনদের লেটেন্সি উন্নত করার জন্য একটি बेटার ডিজাইন নিয়ে কাজ করছি।
ইনিশিয়াল পাঁচ রিজন সেটআপের পাশাপাশি, আমরা ভবিষ্যতে আরও রিজন এবং/অথবা ভিন্ন রিজন গ্রুপ খোলার কথা বিবেচনা করছি ডিমান্ড এবং আমাদের ইউজারদের ফিডব্যাকের ওপর ভিত্তি করে।
আপনি আমাদের সাথে টুইটার এবং ডিসকর্ড-এ যোগাযোগ করতে পারেন আপনার মতামত/আইডিয়া শেয়ার করতে এবং আপনার প্রশ্নের জন্য।