প্রায় 2 সপ্তাহ আগে আমরা Cloudflare KV এবং Upstash Redis-এর কর্মক্ষমতা এবং খরচ তুলনা করেছি। এবার আমরা Deno KV-এর দিকে নজর দেব, একটি Deno-নেটিভ কী ভ্যালু স্টোর যা তাদের গ্লোবাল এজ নেটওয়ার্কে চলছে।
Deno KV এর স্থাপত্যে Upstash Redis এর মতই। উভয় স্টোরেরই একটি প্রাথমিক অঞ্চল রয়েছে যেখানে সমস্ত লেখা পাঠানো হয় এবং তারপরে অন্য সমস্ত অঞ্চলে প্রতিলিপি করা হয়। রিডগুলি নিকটতম অঞ্চল থেকে ক্লায়েন্টের কাছে পরিবেশন করা হয়৷ উপলব্ধ বৈশিষ্ট্যগুলির মধ্যে অনেক পার্থক্য রয়েছে কারণ Redis-এর অনেকগুলি বৈশিষ্ট্য রয়েছে যা KV-এর নেই, কিন্তু আমরা আপাতত সাধারণ পঠন এবং লেখাগুলিতে ফোকাস করব৷
আমরা দুটি ভিন্ন বেঞ্চমার্ক পরিচালনা করব, উভয়ই কোড চালানোর জন্য Deno Deploy ব্যবহার করে। উভয় ক্ষেত্রেই, KV স্টোর এবং Redis-এ সমস্ত উপলব্ধ রিড অঞ্চল সক্রিয় থাকবে।
- planetfall.io ব্যবহার করে বিশ্বের ২০টি অঞ্চল থেকে আহ্বান করা হচ্ছে।
- অনেক বেশি লোড সহ একটি একক অঞ্চল থেকে আহ্বান করা।
তারপরে, আমরা ফলাফলের তুলনা করব এবং ট্রেড-অফ এবং মূল্য সম্পর্কে কথা বলব।
বেঞ্চমার্ক
সেটআপটি দেখতে কেমন তা এখানে, এটি মূলত ক্লাউডফ্লেয়ারের মতোই, ডেনো কেভি ব্যবহার করার জন্য এইমাত্র আপডেট করা হয়েছে৷
- 1000 কী
- 4 KB - 64 KB ডেটা সাইজ (এলোমেলো)
- সমস্ত কীগুলিতে 60s TTL
- 20টি অঞ্চল ফাংশনটি আহ্বান করে
- ~10টি অনুরোধ প্রতি সেকেন্ডে
আমি একটি বরং ছোট কীস্পেস বেছে নিয়েছি, যাতে আমরা RPS কে খুব বেশি ক্র্যাঙ্ক না করে কিছু ক্যাশে হিট পাচ্ছি।
কোড
ফাংশন নিজেই খুব সহজ; এটি শুধুমাত্র Redis থেকে পড়ে, KV থেকে পড়ে এবং তারপর সেই বিলম্বগুলিকে পরে মূল্যায়ন করার জন্য ফেরত দেয়৷
main.tsapp.get("/test", async (c) => {
const key = Math.floor(Math.random() * 1_000).toString()
const minValueSize = 4 * 1024
const maxValueSize = 64 * 1024
const data = randomBytes(minValueSize, maxValueSize)
const ttlSeconds = 60
const beforeRedis = performance.now()
const redisResponse = await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
},
body: JSON.stringify(["GET", key])
})
const redisLatency = performance.now() - beforeRedis
if (!redisResponse) {
await fetch(Deno.env.get("UPSTASH_REDIS_REST_URL")!, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${Deno.env.get("UPSTASH_REDIS_REST_TOKEN")}`,
},
body: JSON.stringify(["SET", key, data, "EX", ttlSeconds])
})
}
const kv = await Deno.openKv();
const beforeKV = performance.now()
const kvResponse = await kv.get([key])
const kvLatency = performance.now() - beforeKV
if (!kvResponse.value) {
const setRes = await kv.set([key], data, { expireIn: ttlSeconds })
console.log({ setRes })
}
return c.json({
redisLatency,
kvLatency,
});
}); ফলাফল - গ্লোবাল লেটেন্সি
30 মিনিট পরে, এখানে ফলাফল আছে. এখানে যে লেটেন্সি পরিমাপ করা হয়েছে তা শুধুমাত্র Deno Deploy-এর ফাংশন থেকে স্টোর পর্যন্ত, ফাংশনটি চালু করার জন্য নেটওয়ার্ক রাউন্ডট্রিপ সহ নয়৷
পূর্ণ আকারের জন্য ছবিতে ক্লিক করুন
KV থেকে ডেটা পড়ার সময় Deno KV যথেষ্ট ধীর হয়। আমার প্রথম চিন্তা ছিল যে তাদের হয়তো সারা বিশ্বে বিতরণ করা যথেষ্ট পঠিত অঞ্চল নেই৷ এই বেঞ্চমার্কের সময়, তাদের gpc-us-east4 ছিল , gpc-asia-southeast1 , gcp-europe-west3 , gcp-southamerica-east1 এবং gcp-us-west2 .
ডেটা আনার জন্য সম্ভবত একটি উল্লেখযোগ্য সংখ্যক অনুরোধ একাধিক অঞ্চল জুড়ে যেতে হবে, যা উচ্চ লেটেন্সি ব্যাখ্যা করবে, একই ক্লাউড এবং সম্ভাব্য ডেটাসেন্টারে কম্পিউট এবং স্টোরেজ উভয়ই নিয়ন্ত্রণ করার ডেনোর সুবিধা কার্যকরভাবে দূর করবে। অন্যদিকে আপস্ট্যাশ AWS-এ চলছে এবং ডেনো থেকে রেডিস পর্যন্ত সমস্ত অনুরোধ ক্লাউড প্রদানকারীর সীমানা পেরিয়ে যাচ্ছে।
একক অঞ্চল
এই তত্ত্বটি পরীক্ষা করার জন্য, আমি একটি দ্বিতীয় বেঞ্চমার্ক চালিয়েছি, যেখানে আমি শুধুমাত্র একটি অবস্থান (আমার বাড়ি) থেকে ফাংশনটি আহ্বান করছি এবং সমস্ত অনুরোধ ফ্রাঙ্কফুর্টের মাধ্যমে যায়। Deno KV এবং Upstash Redis উভয়েরই gcp-europe-west3 পঠিত প্রতিরূপ রয়েছে এবং eu-central-1 যথাক্রমে GCP এবং AWS এর জন্য।
পূর্ণ আকারের জন্য ছবিতে ক্লিক করুন
এই পরিস্থিতিতে উভয় পরিষেবাই অনেক দ্রুত, কিন্তু Deno KV এখনও Upstash Redis এর চেয়ে ধীর। এখানে বন্ধনীতে ডেল্টা থেকে গ্লোবাল লেটেন্সি সহ, একটি একক অঞ্চলের জন্য বিলম্ব রয়েছে:
154 ms অবশ্যই 494 ms থেকে অনেক ভালো, কিন্তু এটা ধরে নেওয়া হচ্ছে যে আমার সমস্ত ট্র্যাফিক একটি একক অঞ্চল থেকে আসছে, যা একটি গ্লোবাল এজ নেটওয়ার্কের সম্পূর্ণ ধারণার বিরুদ্ধে যায়৷ আপনি যদি একটি গ্লোবাল API চালাচ্ছেন, তাহলে আপনার কাছে সারা বিশ্ব থেকে ট্র্যাফিক আসবে এবং KV-তে ডেটা অ্যাক্সেসের প্রয়োজন এমন প্রতিটি অনুরোধের গতি কমে যাবে৷
মূল্য
Deno এবং Upstash উভয়ই আপনাকে মূলত ব্যবহারের জন্য বিলিং করছে। উভয়েরই ভাল বিনামূল্যের স্তর রয়েছে, তাই আপনি কিছু পরিশোধ না করেই সেগুলি ব্যবহার করে দেখতে পারেন৷
প্রধান পার্থক্য হল Deno-এর মূল্য আমি যতটা আশা করেছিলাম ততটা স্বচ্ছ নয় কারণ খরচ গণনা করার জন্য আমার অনুরোধগুলি কত বড় হতে চলেছে তা জানতে হবে। Upstash-এর সাথে এটি কোনও সমস্যা নয়, যেহেতু সমস্ত অনুরোধের বিল একই। আপস্ট্যাশে ডিফল্টরূপে আপনি প্রতি অনুরোধে 1MB পর্যন্ত পড়তে বা লিখতে পারেন এবং আমরা আপনাকে ফ্ল্যাট ফিতে এটি বাড়াতে অনুমতি দিই।
মূল কথা হল আপনি যদি প্রতি অনুরোধে 8kb-এর বেশি পড়ছেন, Upstash সম্ভবত সস্তা।
উপসংহার
একই প্ল্যাটফর্মে থাকায় Deno KV ব্যবহার করা বেশ ভালো লাগে; আপনাকে একটি পৃথক অ্যাকাউন্ট পরিচালনা করতে হবে না, এবং এটি ব্যবহার করার জন্য কোনো অতিরিক্ত সেটআপের প্রয়োজন নেই৷ যাইহোক, পারফরম্যান্স এবং খরচ Upstash এর কাছাকাছি কোথাও নেই। আপনি এটি দিয়ে কি করতে পারেন তাও সীমিত। মান নির্ধারণ করা এবং পাওয়া, সবচেয়ে সাধারণ ক্রিয়াকলাপ হওয়া সত্ত্বেও, আপনি Redis দিয়ে করতে পারেন না। Redis এর জন্য অনেক ধারনা এবং ইউজকেস খুঁজে পেতে আমাদের উদাহরণগুলি দেখুন৷
৷হাই বলুন এবং আমাদের ডিসকর্ডে বা X-তে এইগুলির যে কোনও বিষয়ে প্রশ্ন করুন৷
৷