একটি স্থাপনার প্ল্যাটফর্ম নির্বাচন করার সময়, তাদের মধ্যে বাস্তব-বিশ্বের কর্মক্ষমতা তুলনা করা প্রায়শই খুব কঠিন। এটি সার্ভারহীন প্ল্যাটফর্মগুলির জন্য বিশেষভাবে সত্য, যারা বিশ্বব্যাপী প্রান্ত স্থাপনের কারণে খুব কম বিলম্বের বিজ্ঞাপন দেয়। কিন্তু আপনার ডেটা আনয়ন এখনও ধীর হলে একটি কম লেটেন্সি কি ভাল? যদি আপনার এপিআই ব্যবহারকারীর ঠিক পাশেই চলে কিন্তু ডেটা আনার জন্য সারা বিশ্বে নেটওয়ার্ক রাউন্ডট্রিপ করতে হয়, তাহলে আপনার ভালো সময় কাটবে না৷
ঐতিহ্যগতভাবে আপনার গণনা এবং আপনার সঞ্চয়স্থান একটি একক সার্ভারে বা অন্তত একই ডেটাসেন্টারে colocated করা হবে, কিন্তু সার্ভারহীন এবং প্রান্ত ফাংশন বৃদ্ধির সাথে, আমরা গণনা এবং স্টোরেজ একটি ডিকপলিং দেখেছি। এটি স্কেলিং এবং প্রাপ্যতার জন্য দুর্দান্ত, তবে এটি একটি নতুন সমস্যা প্রবর্তন করে:লেটেন্সি৷ এই দিনগুলিতে একটি গ্লোবাল এজ নেটওয়ার্কে আপনার এপিআই স্থাপন করা তুচ্ছভাবে সহজ, তবে আপনার ডেটার কী হবে? ডেটা এখনও পিছিয়ে আছে, কিন্তু নিশ্চিতভাবে ধরা পড়ছে৷
৷এই নিবন্ধে আমরা দুটি সার্ভারহীন ডেটাস্টোরের কর্মক্ষমতা তুলনা করব:ক্লাউডফ্লেয়ার কেভি এবং আপস্ট্যাশ রেডিস। উভয়ই সার্ভারহীন, উভয়ই বিশ্বব্যাপী বিতরণ করা হয়, তবে তারা তাদের পদ্ধতিতে খুব আলাদা। ক্লাউডফ্লেয়ার কেভি হল একটি পুল-ভিত্তিক কী-ভ্যালু স্টোর, অন্যদিকে আপস্ট্যাশ হল একটি রেডিস-সামঞ্জস্যপূর্ণ পরিষেবা যার সাথে সক্রিয় প্রতিলিপি।
টান-ভিত্তিক :ডেটা সাধারণত একটি কেন্দ্রীয় অবস্থানে সংরক্ষণ করা হয় এবং ব্যবহারকারীর অনুরোধের সময় শুধুমাত্র প্রান্ত-নোডগুলিতে সরানো হয়। এটি ক্লাউডফ্লেয়ার কেভি দ্বারা নেওয়া পদ্ধতি।
সক্রিয় প্রতিলিপি :ডেটা প্রতিটি প্রান্ত-অবস্থানে সংরক্ষিত হয় এবং ডেটাস্টোর নিজেই সিঙ্ক করে রাখে৷ ডেটার আপডেটগুলি অবিলম্বে সমস্ত অঞ্চলে প্রতিলিপি করা হয়৷ এটি আপস্ট্যাশ এবং ফলস্বরূপ Vercel দ্বারা নেওয়া পদ্ধতি।
ক্যাশিং আসলেই একগুচ্ছ কী এবং তাদের মান সংরক্ষণ করে। এটি একটি সাধারণ ধারণা, কিন্তু এটি একটি খুব সাধারণ একটি। এটি দুটি ডেটাস্টোরের কর্মক্ষমতা তুলনা করার একটি দুর্দান্ত উপায়। ক্লাউডফ্লেয়ার কেভি এবং আপস্ট্যাশ রেডিসের পারফরম্যান্সের তুলনা করার জন্য আমরা একটি সাধারণ ক্যাশিং দৃশ্য ব্যবহার করব৷
বেঞ্চমার্ক
আমরা আসলে কি পরীক্ষা করছি?
ক্লাউডফ্লেয়ার কেভি এবং আপস্ট্যাশ রেডিস থেকে একটি একক মান পড়ার সময় আমরা ক্লাউডফ্লেয়ার কর্মীর দ্বারা অভিজ্ঞ দেরী পরিমাপ করব৷
- 1 ক্লাউডফ্লেয়ার কর্মী
- 1000 কী
- 4KB - 64KB ডেটা সাইজ (এলোমেলো)
- সমস্ত কীগুলিতে 60s TTL
- 20টি অঞ্চল কর্মীকে আহ্বান করে
- ~10টি অনুরোধ প্রতি সেকেন্ডে
আমি একটি বরং ছোট কীস্পেস বেছে নিয়েছি, যাতে আমরা RPS কে খুব বেশি ক্র্যাঙ্ক না করে কিছু ক্যাশে হিট পাচ্ছি।
শ্রমিক কোড
কর্মী নিজেই খুব সহজ, এটি শুধু রেডিস থেকে পড়ে, কেভি থেকে পড়ে এবং তারপর সেই বিলম্বগুলিকে পরে মূল্যায়ন করার জন্য ফেরত দেয়৷
worker.tsapp.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,
});
}); ফলাফল - গ্লোবাল লেটেন্সি
~30 মিনিটের জন্য বেঞ্চমার্ক চালানোর পরে, আমরা ইতিমধ্যে দুটি ডেটাস্টোরের মধ্যে কিছু উল্লেখযোগ্য পার্থক্য লক্ষ্য করতে পারি৷
পূর্ণ আকারের জন্য ছবিতে ক্লিক করুন
আপনি দেখতে পাচ্ছেন যে ক্লাউডফ্লেয়ার কেভি আপস্ট্যাশ রেডিসের চেয়ে ধারাবাহিকভাবে ধীর। আমি এটা আশা করিনি, যেহেতু ক্লাউডফ্লেয়ার KV-কে কম লেটেন্সি হিসেবে বিজ্ঞাপন দেয় এবং শ্রমিকদের মতো একই প্ল্যাটফর্মে চলে। হ্যাঁ, তারা ডিফল্টরূপে প্রতিটি একক অঞ্চলে ডেটা রাখে না, তবে কয়েক মিনিট পরে, আমি আশা করব যে কর্মী যে অঞ্চলে চলছে সেখানে ডেটা ক্যাশে করা হবে৷
হয়ত লোডটি তাদের সিস্টেমে ডেটা সংযোজন করার জন্য যথেষ্ট বেশি নয়? আসুন একটি অঞ্চলকে বিচ্ছিন্ন করি এবং লোডটি ব্যাপকভাবে বৃদ্ধি করি যাতে এটি কোনও পার্থক্য করে কিনা।
একক অঞ্চল
অনেক বেশি RPS সহ একটি একক অঞ্চলের ফলাফল দেখুন। তাত্ত্বিকভাবে ক্লাউডফ্লেয়ার এই অঞ্চলে তাদের সমস্ত ক্যাশে উষ্ণ করতে সক্ষম হওয়া উচিত এবং বিজ্ঞাপনের মতো খুব কম লেটেন্সি পেতে হবে৷
এই পরীক্ষাটি প্রথমটির সাথে অভিন্ন, আমরা একক অঞ্চল থেকে এবং ~400 RPS সহ কর্মীকে কল করছি।
পূর্ণ আকারের জন্য ছবিতে ক্লিক করুন
KV এর লেটেন্সি ব্যাপকভাবে উন্নত হয়েছে:
- P90: 742ms -> 115ms
- P99: 1,336ms ->560ms
ক্লাউডফ্লেয়ার প্রকৃতপক্ষে চলমান কর্মীদের কাছাকাছি আপনার ডেটা প্রতিলিপি করার আগে দৃশ্যত আপনার একটি বরং উচ্চ লোড প্রয়োজন। যদিও এটি এখনও Upstash Redis-এর লেটেন্সি থেকে অনেক উপরে। যদিও 115ms এর Cloudflare-এর P90 লেটেন্সি এতটা খারাপ নয়, অর্ধেক সেকেন্ডের বেশি P99 লেটেন্সি স্পষ্টভাবে লক্ষণীয়। মনে রাখবেন আমরা প্রতি সেকেন্ডে প্রায় 400টি অনুরোধ করছি যাতে ডেটা আসলে প্রতিলিপি করা হয় তা নিশ্চিত করতে, যা সাধারণত বেশির ভাগ API-এর থেকে বেশি লোড হয়।
আকর্ষণীয়ভাবে আপনি দেখতে পাচ্ছেন যখন ক্লাউডফ্লেয়ার নিম্নলিখিত চিত্রে টীকা করা কর্মী থেকে ডেটা কাছাকাছি বা দূরে সরে গেছে:
পূর্ণ আকারের জন্য ছবিতে ক্লিক করুন
মূল্য
জিনিসের দাম সম্পর্কে কথা না বলে এটি একটি ন্যায্য তুলনা হবে না।
এখানে প্রধান ড্রাইভিং ফ্যাক্টর হবে ডেটাস্টোর অ্যাক্সেস করার জন্য প্রতি-অনুরোধের খরচ।
ক্লাউডফ্লেয়ার প্রতি মিলিয়ন KV রিডের জন্য $0.50 চার্জ করে, যেখানে Upstash প্রতি মিলিয়ন Redis কমান্ডের জন্য $1 চার্জ করে। আরও কিছু পার্থক্য রয়েছে, যেখানে ক্লাউডফ্লেয়ার স্টোরেজের ক্ষেত্রে বেশি ব্যয়বহুল, যেখানে Upstash ব্যান্ডউইথের ক্ষেত্রে বেশি ব্যয়বহুল। যাইহোক, এই পরিস্থিতিতে এই প্রধান খরচ ড্রাইভার নয়.
- ক্লাউডফ্লেয়ার মূল্য
- Upstash মূল্য
আপস্ট্যাশ কি আপনার জন্য সঠিক?
এটি একটি প্রশ্ন শুধুমাত্র আপনি উত্তর দিতে পারেন৷৷
স্পষ্টতই আমরা এখানে পক্ষপাতদুষ্ট এবং সত্যিই আমাদের পণ্য এবং এর মূল্যে বিশ্বাস করি, তাই এটিকে লবণের দানা দিয়ে নিন।
আপনি যদি একটি ছোট থেকে মাঝারি আকারের API চালাচ্ছেন, তাহলে আপনাকে বিলম্ব বিবেচনা করতে হবে কারণ খরচটি নগণ্য হবে। যখন API-তে ভারী ট্র্যাফিক থাকে, তখন Upstash স্থির মূল্য অফার করে যা Cloudflare KV এর চেয়ে সস্তা।
যদি আপনার যা প্রয়োজন হয় তা set এর মতই সহজ , get অথবা list , আপনি সর্বদা কর্মীদের প্ল্যাটফর্মে থাকতে যাচ্ছেন এবং আপনার আবেদনের জন্য উচ্চ বিলম্ব গ্রহণযোগ্য, তাহলে Cloudflare KV হতে পারে সঠিক পছন্দ। সবকিছু একই জায়গায় পরিচালনা করা হয় এবং আপনাকে কিছু নিয়ে চিন্তা করতে হবে না।
আপনি যদি এই প্রশ্নের উত্তর 'না' দিয়ে দেন , তাহলে আমি আপনাকে Upstash চেষ্টা করার জন্য উৎসাহিত করব। Redis-এর অনেকগুলি বৈশিষ্ট্য রয়েছে যা Cloudflare KV-তে নেই, যেমন পাব/সাব, সাজানো সেট, হ্যাশ, ইত্যাদি। এবং Upstash এগুলিকে সমর্থন করে। আপনি যদি ইতিমধ্যে Redis ব্যবহার করে থাকেন, তাহলে আপনি আপনার অ্যাপ্লিকেশনটিকে Upstash-এ নির্দেশ করতে পারেন এবং এটি কাজ করবে। কিছু পরিবর্তন করার দরকার নেই।
উপসংহার
ক্লাউডফ্লেয়ার কেভি একটি দুর্দান্ত পণ্য, তবে এটি রেডিসের মতো সম্পূর্ণরূপে উন্নত ডেটাবেসের প্রতিস্থাপন নয়। এটি সাধারণ ব্যবহারের ক্ষেত্রে উপযুক্ত, যেখানে লেটেন্সি কোনো উদ্বেগের বিষয় নয়।
হাই বলুন এবং আমাদের ডিসকর্ডে বা X-তে এইগুলির যে কোনও বিষয়ে প্রশ্ন করুন৷
৷