ডিপ্লয়মেন্ট প্ল্যাটফর্ম বেছে নেওয়ার সময় তাদের বাস্তব-বিশ্বের পারফরম্যান্স তুলনা করা প্রায়শই খুব কঠিন। এটি সার্ভারলেস প্ল্যাটফর্মের জন্য বিশেষভাবে সত্য, যারা গ্লোবাল এজ ডিপ্লয়মেন্টের কারণে অত্যন্ত কম লেটেন্সির দাবি করে। কিন্তু যদি আপনার ডেটা আনতে ধীর হয়, তবে কম লেটেন্সির কি লাভ? যদি আপনার API ব্যবহারকারীর ঠিক পাশে চলে কিন্তু ডেটা আনতে গ্লোব스의 অন্য প্রান্তে নেটওয়ার্ক রাউন্ডট্রিপ করতে হয়, তবে আপনি ভালো অভিজ্ঞতা পাবেন না।
পারাম্পরিকভাবে আপনার কম্পিউট এবং স্টোরেজ একটি একক সার্ভারে বা কমপক্ষে একই ডেটাসেন্টারে কোলোকেটেড থাকত। কিন্তু সার্ভারলেস এবং এজ ফাংশনগুলির উত্থানের সাথে, আমরা কম্পিউট এবং স্টোরেজের বিচ্ছিন্নতা দেখেছি। এটি স্কেলিং এবং উপলব্ধতার জন্য চমৎকার, কিন্তু এটি একটি নতুন সমস্যা সৃষ্টি করে: লেটেন্সি। আজকাল আপনার API-কে গ্লোবাল এজ নেটওয়ার্কে ডিপ্লয় করা একদম সহজ, কিন্তু আপনার ডেটার বিষয়ে কী? ডেটা এখনও পেছনে পড়ে আছে, তবে অবশ্যই ধরে ধরছে।
এই নিবন্ধে আমরা দুটি সার্ভারলেস ডেটাস্টোরের পারফরম্যান্স তুলনা করব: Cloudflare KV এবং Upstash Redis। উভয়ই সার্ভারলেস, উভয়ই গ্লোবালি ডিস্ট্রিবিউটেড, কিন্তু তাদের পদ্ধতি খুব ভিন্ন। Cloudflare KV একটি পুল-ভিত্তিক কি-ভ্যালু স্টোর, যখন Upstash হলো সক্রিয় রিপ্লিকেশন সহ একটি Redis-সামঞ্জস্যপূর্ণ সার্ভিস।
পুল-ভিত্তিক বনাম সক্রিয় রিপ্লিকেশন
পুল-ভিত্তিক: ডেটা সাধারণত একটি কেন্দ্রীয় অবস্থানে সংরক্ষিত থাকে এবং শুধুমাত্র ব্যবহারকারীর অনুরোধ করার সময় এজ-নোডগুলিতে স্থানান্তরিত হয়। Cloudflare KV এই পদ্ধতিটি অবলম্বন করে।
সক্রিয় রিপ্লিকেশন: ডেটা প্রতিটি এজ-লোকেশনে সংরক্ষিত থাকে এবং ডেটাস্টোর নিজে তা সিঙ্কে রাখে। ডেটার আপডেটগুলি অবিলম্বে সমস্ত অঞ্চলে রিপ্লিকেট হয়। Upstash এবং نتیجত Vercel এই পদ্ধতিটি অনুসরণ করে।
বেঞ্চমার্ক সেটআপ
ক্যাশিং আসলে কী-ভ্যালু জোড়াগুলো সংরক্ষণ করার একটি সহজ ধারণা, কিন্তু এটি খুব সাধারণ এবং পারফরম্যান্স তুলনার জন্য একটি চমৎকার উপায়। আমরা একটি সাধারণ ক্যাশিং পরিস্থিতি ব্যবহার করে Cloudflare KV এবং Upstash Redis-এর পারফরম্যান্স তুলনা করব।
আমরা কী পরীক্ষা করছি?
আমরা একটি Cloudflare Worker-এর দ্বারা Cloudflare KV এবং Upstash Redis থেকে একটি একক মান পড়ার সময় অনুভূত লেটেন্সি পরিমাপ করব।
- ১টি Cloudflare Worker
- ১,০০০টি কি
- ৪KB - ৬৪KB ডেটা আকার (র্যান্ডম)
- সব কিতে ৬০ সেকেন্ড TTL
- ২০টি অঞ্চল Worker আহ্বান করছে
- প্রতি সেকেন্ড ~১০টি অনুরোধ
আমি একটি অল্প কিস্পেস বেছে নিয়েছি, যাতে রিকোয়েস্ট পার সেকেন্ড (RPS) খুব বেশি না বাড়িয়ে ক্যাশ হিট পাওয়া যায়।
Worker কোড
Workerটি খুব সহজ, এটি শুধু Redis থেকে পড়ে, KV থেকে পড়ে এবং পরে মূল্যায়নের জন্য সেই লেটেন্সিগুলো ফেরত দেয়।
app.get("/test", async (c) => {
const redis = Redis.fromEnv(c.env);
const key = Math.floor(Math.random() * 1_000).toString();
const minValueSize = 4 * 1024;
const maxValueSize = 64 * 1024;
const ttlSeconds = 60;
const randomValue = new TextDecoder().decode(
crypto.getRandomValues(
new Uint8Array(
Math.floor(Math.random() * (maxValueSize - minValueSize)) + minValueSize,
),
),
);
const beforeRedis = performance.now();
const redisResponse = await redis.get(key);
const redisLatency = performance.now() - beforeRedis;
if (!redisResponse) {
await redis.set(key, randomValue, { ex: ttlSeconds });
}
const beforeKV = performance.now();
const kvResponse = await c.env.ANDREAS_KV_BENCHMARK.get(key);
const kvLatency = performance.now() - beforeKV;
if (!kvResponse) {
await c.env.ANDREAS_KV_BENCHMARK.put(key, randomValue, { expirationTtl: ttlSeconds });
}
return c.json({ kvLatency, redisLatency });
});
ফলাফল: গ্লোবাল লেটেন্সি
বেঞ্চмар্কটি ~৩০ মিনিট চালানোর পর, আমরা দুটি ডেটাস্টোরের মধ্যে কিছু উল্লেখযোগ্য পার্থক্য পর্যবেক্ষণ করতে পারি।
চিত্রটি বড় দেখতে ক্লিক করুন
আপনি দেখতে পাচ্ছেন Cloudflare KV सुसंगতভাবে Upstash Redis-এর চেয়ে ধীর। আমি এটি আশা করিনি, কারণ Cloudflare KV-কে কম-লেটেন্সি হিসেবে বিজ্ঞাপন দেয় এবং Worker-র সাথে একই প্ল্যাটফর্মে চালায়। হ্যাঁ, তারা ডিফল্টভাবে প্রতিটি অঞ্চলে ডেটা রাখে না, কিন্তু কয়েক মিনিটের পর, আমি আশা করতাম যে Worker চলছে সেসব অঞ্চলে ডেটা ক্যাশ হবে।
হয়তো লোড পর্যাপ্ত উচ্চ নয় তাদের সিস্টেমকে ডেটা কোলোকেট করার জন্য? আসুন একটি অঞ্চল বিচ্ছিন্ন করি এবং লোড ব্যাপকভাবে বাড়িয়ে দেখি কি এটি পার্থক্য আনতে পারে।
একক অঞ্চল (Single Region)
অবশ্যই বেশি RPS-এ একটি একক অঞ্চলের ফলাফল দেখা যাক। তত্ত্বतः Cloudflare এই অঞ্চলে তাদের সব ক্যাশ ওয়ার্ম করতে পারে এবং বিজ্ঞাপিত অতিশয় কম লেটেন্সি অর্জন করতে পারে।
এই পরীক্ষাটি প্রথমটির সমান, শুধু আমরা একটি একক অঞ্চল থেকে Worker কল করছি এবং ~৪০০ RPS-এ।
চিত্রটি বড় দেখতে ক্লিক করুন
KV-এর লেটেন্সি ব্যাপকভাবে উন্নত হয়েছে:
- P90: ৭৪২ms → ১১৫ms
- P99: ১,৩৩৬ms → ৫৬০ms
প্রতিত হচ্ছে Cloudflare আপনার ডেটা চলমান Worker-র কাছে আসলে রিপ্লিকেট করার আগে আপনাকে খুব বেশি লোড দিতে হয়। কিন্তু এটি এখনও Upstash Redis-এর লেটেন্সির চেয়ে দূরে বেশি। যদিও Cloudflare-এর P90 লেটেন্সি ১১৫ms খুব খারাপ নয়, P99 লেটেন্সি অর্ধেক সেকেন্ডের বেশি যা স্পষ্টভাবে লক্ষণীয়। মনে রাখবেন আমরা ~৪০০ রিকোয়েস্ট পার সেকেন্ড করছি যাতে ডেটা আসলে রিপ্লিকেট হয়, যা ইতিমধ্যে অধিকাংশ ছোট-মাঝারি API-র সাধারণ লোডের চেয়ে বেশি।
দিলচস্পভাবে, আপনি দেখতে পাচ্ছেন Cloudflare কখন ডেটা Worker-র কাছে বা দূরে সরিয়েছে এটি নিচের চিত্রে অনুক্রমণিকারিত:
চিত্রটি বড় দেখতে ক্লিক করুন
মূল্য নির্ধারণ
খরচের কথা না বলে এটি ন্যায্য তুলনা হবে না।
এখানে প্রধান চালিকাশক্তি হবে প্রতিটি ডেটাস্টোর অ্যাক্সেসের প্রতি-অনুরোধ খরচ।
Cloudflare প্রতি মিলিয়ন KV রিডের জন্য $০.৫০ চার্জ করে, যখন Upstash প্রতি মিলিয়ন Redis কমান্ডের জন্য $১ চার্জ করে। কিছু অন্যান্য পার্থক্যও আছে, যেখানে Cloudflare স্টোরেজে kostবহ, Upstash ব্যান্ডউইডথে kostবহ। কিন্তু এই পরিস্থিতিতে এগুলো প্রধান খরচের চালিকাশক্তি নয়।
Upstash আপনার জন্য উপযুক্ত কি?
এটি একটি প্রশ্ন শুধু আপনি উত্তর দিতে পারেন।
জाहিরায় আমরা আপনার পক্ষপাতपूर्ण রায় দিচ্ছি এবং আমাদের প্রোডাক্ট ও এর মান্যতায় বিশ্বাস করি, তাই এটাকে লবণ সমান গ্রহণ করুন।
আপনি যদি ছোট থেকে মাঝারি আকারের API চালান, তবে লেটেন্সি বিবেচনা করতে হবে কারণ খরচ নগণ্য হবে। যখন API-র ভারী ট্রাফিক হবে, Upstash ফিক্সড প্রাইসিং অফার করে যা Cloudflare KV-এর চেয়ে সস্তা।
আপনার যদি কেবল set, get বা list প্রয়োজন হয়, আপনি সবসময় Workers প্ল্যাটফর্মে থাকবেন এবং উচ্চ লেটেন্সি আপনার অ্যাপ্লিকেশনের জন্য গ্রহণযোগ্য, তবে Cloudflare KV সঠিক পছন্দ হতে পারে। সব কিছু একই জায়গায় হ্যান্ডেল হয় এবং আপনাকে যেকোনো বিষয়ে চিন্তা করতে হয় না।
আপনি যদি উপরের কোনো প্রশ্নের উত্তর 'না' দিয়ে দেন, তবে আমি আপনাকে Upstash চেষ্টা করার জন্য উৎসাহিত করব। Redis-এ Cloudflare KV-র নেই এমন অনেক ফিচার আছে, যেমন pub/sort, সোর্টেড সেট, হ্যাশ ইত্যাদি। Upstash এই সব সমর্থন করে। আপনি যদি ইতিমধ্যে Redis ব্যবহার করেন, তবে আপনি কেবল আপনার অ্যাপ্লিকেশনকে Upstash-এ পয়েন্ট করুন এবং এটি কাজ করবে। কিছুই পরিবর্তন করতে হবে না।
উপসংহার
Cloudflare KV একটি চমৎকার প্রোডাক্ট, কিন্তু এটি Redis-এর মত একটি সম্পূর্ণ ডেটাবেসের বিকল্প নয়। এটি সাধারণ ইউজ-কেসের জন্য উপযুক্ত, যেখানে লেটেন্সি চিন্তার বিষয় নয়।
আমাদের Discord-এ বা X-এ আসুন এবং এই বিষয়ে প্রশ্ন করুন।