কম্পিউটার টিউটোরিয়াল

আপস্ট্যাশ: ক্লাউডফ্লেয়ার ওয়ার্কার্স এবং এজ অ্যাপ্লিকেশন için অপ্টিমাল সার্ভারলেস ডেটাবেস

আপস্ট্যাশ যাত্রা শুরু করেছিল আপনার AWS Lambda ফাংশনগুলির জন্য সেরা ডেটাবেস অপশন হতে লক্ষ্যে। অনদিকে, আমরা অন্য একটি দুর্দান্ত অপশন খুঁজে পেলাম আপনার সার্ভারলেস ফাংশন বিল্ড করার জন্য: ক্লাউডফ্লেয়ার ওয়ার্কার্স। এটি একটি এক্সাইটিং প্রোডাক্ট কারণ এটি পুরো বিশ্বে बेटার লেটেন্সি, কম খরচ এবং নো কোল্ড স্টার্টস وعدা দেয়। কিন্তু AWS Lambda-র সাথে তুলনা করলে এর অনেক লিমিটেশন আছে। এক্সট্রা লিমিটেশনগুলো ডেটাবেস অপশনগুলোর তালিকা ছোট করে দেয়। আমরা এটিকে একটি সুযোগ হিসেবে দেখেছিলাম আপস্ট্যাশকে একটি দুর্দান্ত সমাধান হিসেবে পজিশন করার জন্য এই প্রশ্নের: CF Workers are stateless. Where should I keep my data then?

চ্যালেঞ্জগুলো 🏔️

অ্যাক্সেসিবিলিটি 🔓

ক্লাউডফ্লেয়ার ওয়ার্কার্স একটি আরও ক্লোজড এনভায়রনমেন্ট। এটি AWS-এর মত নয়। আপনি আপনার নিজস্ব ডেটাবেস একই রিজনে সেটআপ করে VPC দিয়ে অ্যাক্সেস করতে পারবেন না। তাই আপনাকে ওয়ার্কার্স ফাংশন থেকে আপনার ডেটাবেস অ্যাক্সেস করতে হবে। ক্লাউডফ্লেয়ার ওয়ার্কার্স V8 আইসোলেটস ব্যবহার করে রানটাইম হিসেবে। এটি টিসিপি কানেকশন অনুমতি দেয় না। তাই ডেটাবেসটি HTTP-এর মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে।

গ্লোবাল রেপ্লিকেশন 🌍

ওয়ার্কার্সের সুবিধা হলো এটি সব জায়গায় ডিপ্লয় করা যায়। আপনার ফাংশন পুরো বিশ্ব থেকে কম লেটেন্সিতে অ্যাক্সেসযোগ্য থাকার সময়; আপনার ডেটাবেস অ্যাক্সেস করতে সैकডরা মিলিসেকেন্ড খরচ করা উচিত নয়। আপনার ডেটাবেস সেখানে থাকা উচিত যেখানে আপনার ফাংশন এক্সিকিউট হয়। এটি সম্ভব আপনার ডেটা একাধিক রিজন এবং মহাদেশে রেপ্লিকেট করে।

কম লেটেন্সি ⚡

ডেভেলপাররা এজ কম্পিউটিং সলিউশন পছন্দ করে কারণ সেগুলো সব জায়গায় কম লেটেন্সি দেয়। ডেটাবেস বটলনেক হওয়া উচিত নয়। রেডিসের মত ইন-মেমরি ডেটাবেস সাব-মিলিসেকেন্ড লেটেন্সি প্রদান করে।

আপস্ট্যাশের যাত্রা 🛤️

রেস্ট এপিআই 🌐

আমরা আপস্ট্যাশ লঞ্চ করলাম নেটিভ রেডিস এপিআই সাপোর্ট সহ। সকল রেডিস ক্লায়েন্ট সাপোর্টেড, যা লিগেসি রেডিস অ্যাপ্লিকেশন জন্য পারফেক্ট। কিন্তু শীঘ্রই আমরা দেখতে পেলাম ইউজাররা সার্ভারলেস ফাংশনসে কানেকশন সমস্যা ফেস করছে। এছাড়া এটি ক্লাউডফ্লেয়ার ওয়ার্কার্স থেকে অ্যাক্সেসযোগ্য নয়। তাই আমরা প্রথমে GraphQL API ইমপ্লিমেন্ট করলাম। কিন্তু আমরা GraphQL API-র সাথে খুশি নueilাম, কারণ প্রক্সি লেয়ারের কারণে পারফরম্যান্স ওভারহেড ছিল। এছাড়া GraphQL রেডিস কমান্ড রান করার সবচেয়ে সহজ উপায় নয়। আমরা ডেটাবেস ইঞ্জিনের ভেতরে একটি রেস্ট সার্ভার বিল্ড করার সিদ্ধান্ত নিলাম পারফরম্যান্স ওভারহেড মিনিমাইজ করার জন্য। আমরা মনে করি রেস্ট রেডিসের জন্য बेटার ফিট। আমরা রেস্ট এপিআই লঞ্চ করলাম এবং দেখলাম এটি ডেভেলপারদের মধ্যে খুব জনপ্রিয় যারা ক্লাউডফ্লেয়ার ওয়ার্কার্স এবং ওয়েবঅ্যাসেম্বলি থেকে রেডিস অ্যাক্সেস করতে চান।

এজ ক্যাশিং 🚀

রেস্ট এপিআইর জন্য ধন্যবাদ, আপস্ট্যাশ ওয়ার্কার্স থেকে অ্যাক্সেসযোগ্য হয়েছিল কিন্তু লেটেন্সি আইডিয়াল নয়। কিছু ডেভেলপার ক্লাউডফ্লেয়ার নিজস্ব ক্যাশিং ব্যবহার করার চেষ্টা করেছিল রেডিস রেসপন্স ক্যাশ করতে। কিন্তু এটি একটি কমপ্লেক্স সমাধান। রেডিস ইতিমধ্যে খুব ফাস্ট, তাই অন্য জায়গায় cache Redis করুন ভালো লাগে না। তাই আমরা এজ ক্যাশিং বিল্ড করার সিদ্ধান্ত নিলাম যেখানে আমরা রেডিস রেস্ট রেসপন্স সকল এজ লোকেশনেই ক্যাশ করি। আমরা CDN প্রোভাইডাররা ব্যবহার করলাম রেডিস রেসপন্স ক্যাশ করতে। এটি এজ লেটেন্সিতে একটি বES্ত উন্নতি আনায়, ৮০% পর্যন্ত পারফরম্যান্স গেইন।

গ্লোবাল ডেটাবেস 🌐

এজ ক্যাশিং গ্লোবাল লেটেন্সি সমস্যার একটি দুর্দান্ত সমাধান ছিল কিন্তু এর কিছু ড্রব্যাক আছে কিছু ইউজ কেসের জন্য। প্রথমে, এটি ক্যাশ ইনভ্যালিডেশন (পার্জ) সাপোর্ট করে না। যদি ক্যাশের এক্সপাইরেশন টাইম ৩০ সেকেন্ড হয়; তাহলে একটি ৩০ সেকেন্ডের উইন্ডো থাকে যেখানে আপনার ক্লায়েন্টরা পুরনো ডেটা পড়তে পারে। অনেক ওয়েব ইউজ কেস এটি টলারেট করতে পারে কিন্তু সব নয়। দ্বিতীয়, এজ ক্যাশিং শুধু রেস্ট এপিআইর জন্য সাপোর্টেড। রেডিস ক্লায়েন্টরা এজ ক্যাশিংর বেনিফিট পায় না। তাই আমরা একটি নতুন ডেটাবেস টাইপ ডিজাইন করার সিদ্ধান্ত নিলাম যেটি ডেটা একাধিক রিজনে রেপ্লিকেট করে। এটি হাইলি অবেইলেবল এবং কনসিস্টেন্ট ডিজাইন করা খুব চ্যালেঞ্জিং ছিল। বর্তমানে আপস্ট্যাশের একটি গ্লোবাল ডেটাবেস অফারিং আছে যা আপনার ডেটা ৫টি ভিন্ন AWS রিজনে রেপ্লিকেট করে (ইস্ট এবং 웨স্ট নর্থ আমেরিকা, ইউরোপ, এশিয়া, সাউথ আমেরিকা)। গ্লোবাল ডেটাবেস একটি ক্যাশ নয় তাই এর ক্যাশ-ইনভ্যালিডেশন সমস্যা নেই। রাইটস ইনস্ট্যান্টলি সব রেপ্লিকাতে রেপ্লিকেট হয়। পারফরম্যান্স এবং অবেইলেবিলিটির জন্য, গ্লোবাল ডেটাবেস ইভেনচুয়ালি কনসিস্টেন্ট ডিজাইন করা হয়েছে।

এজ ক্যাশিং বনাম গ্লোবাল ডেটাবেস (অথবা উভয়) ⚖️

যদি আপনার এজ সলিউশনের জন্য শুধু একটি ক্যাশ দরকার হয় তবে এজ ক্যাশিং একটি ভালো সমাধান হতে পারে। কিন্তু যদি আপনার রাইটস ইনস্ট্যান্টলি ক্যাশ ইনভ্যালিডেট করতে চান, তবে আপনার গ্লোবাল ডেটাবেস পছন্দ করা উচিত। ক্যাশিংর বাইরেও, গ্লোবাল ডেটাবেস একটি হাইলি অবেইলেবল গ্লোবাল ডেটাস্টোর হিসেবে ব্যবহার করা যায়। মনে রাখবেন এজ ক্যাশিং শুধু রেস্ট কলের জন্য উপলব্ধ। যদি আপনি রেডিস ক্লায়েন্ট ব্যবহার করেন, এজ-এ কম লেটেন্সির সাথে গ্লোবাল ডেটাবেস একমাত্র অপশন।

এজ ক্যাশিং এবং গ্লোবাল ডেটাবেস দুটোই রিড লেটেন্সি মিনিমাইজ করার জন্য ডিজাইন করা। যদি আপনার ইউজ কেস ৯০% রাইট হয় তবে একটি সিঙ্গল রিজন সেটআপ বেশি সেন্স মেক করবে। রাইটস দুই টাইপের ডেটাবেসের জন্য একই লেটেন্সি, কিন্তু গ্লোবাল সেটআপে ৫ গুণ বেশি ব্যয়বহুল।

যখন এজ ক্যাশিং ইনাবল থাকে, আপস্ট্যাশ প্রথম রিকোয়েস্ট অরিজিন থেকে ফেচ করে তারপর এজ-এ ক্যাশ করে। যদি অরিজিন নিকটে না থাকে, তবে লেটেন্সি হাই হবে। যদি সব কেসের জন্য সেরা লেটেন্সি চান; আপনি উভয় ব্যবহার করতে পারেন গ্লোবাল ডেটাবেসে এজ ক্যাশিং ইনাবল করে।

বেনচмар্ক অ্যাপ্লিকেশন দেখুন যা এজ ক্যাশিং এবং গ্লোবাল ডেটাবেসের লেটেন্সি তুলনা করে।

आगे কী? 🔮

এখানে কিছু বিষয় যা আমরা আপস্ট্যাশকে এজ-এ উন্নত করার জন্য কাজ করতে পারি:

  • রাইটের জন্য কম লেটেন্সি: বর্তমানে, গ্লোবাল ডেটাবেস সিঙ্গল লিডার আর্কিটেকচার দিয়ে রিড লেটেন্সি অপ্টিমাইজ করার জন্য ডিজাইন করা। আমরা মনে করি এটি অধিকাংশ ইউজ কেস কভার করে। কিন্তু আপনার ফিডব্যাক এবং নতুন ইউজ কেসের ওপর নির্ভর করে আমরা এমন একটি আর্কিটেকচারে কাজ করতে পারি যা রাইটস এবং রিডস দুটোই জন্য কম লেটেন্সি দেবে।
  • কাফকা সাপোর্ট: আমরা কাফকা লঞ্চ করার পরিকল্পনা করছি রেডিসের পাশাপাশি আগামী সপ্তাহগুলোতে। কাফকা এজ-এ নতুন ইউজ কেস ইনাবল করবে যেমন ক্লিকস্ট্রিম অ্যানালিসিস বা সার্ভারলেস/এজ ফাংশন থেকে লগ কাফকা-এ পুশ করা।

আমরা আপনার ফিডব্যাক দ্বারা গাইডেড আপস্ট্যাশ উন্নত এবং ডেভেলপ করতেই থাকব। টুইটার বা ডিসকর্ড-এ আপনার মতামত জানান।

  1. গ্লোবাল সার্ভারলেস এবং এজ ডেটাবেস: সিমলেস, স্কেলেবল স্টোরেজ

  2. Pipeline REST API দিয়ে সার্ভারলেস Redis এক্সেস বাড়ান

  3. Cloudflare Workers-এ Redis ব্যবহার করে এজ কম্পিউটিং-এর শক্তি ব্যবহার করুন

  4. সার্ভারলেস ডেটাবেস বেঞ্চмар্ক: DynamoDB, FaunaDB এবং Upstash (Redis)-এর লেটেন্সি তুলনা