ভূমিকা
আমরা QStash ঘোষণা করতে গর্বিত এবং উত্তেজিত 🔥🔥🔥
ফর্মালি বলতে, QStash হলো একটি মেসেজ কিউ এবং টাস্ক স্কিডিউলার যা সার্ভারলেস রানটাইমের জন্য ডিজাইন করা হয়েছে। অনফর্মালি বলতে, QStash হলো আপনার সার্ভারলেস ফাংশনগুলোর জন্য একটি গ্লু।
একটি ধারণা ছিল যে সার্ভারলেস শুধু সিম্পল টাস্কের জন্য ভালো। আর নয়। লোকেরা সার্ভারলেস স্ট্যাক দিয়ে পাওয়ারফুল সিস্টেম বিল্ড করছে। পাওয়ারফুল সিস্টেম একাধিক কম্পোনেন্ট নিয়ে গঠিত। সেসব কম্পোনেন্টের মাঝপথে কমিউনিকেশন একটি বড় ইঞ্জিনিয়ারিং সমস্যা। এই সমস্যার জন্য ইতিমধ্যে চমৎকার সমাধান আছে। কিন্তু আমরা মনে করি বিদ্যমান সমাধানগুলো সার্ভারলেস স্পেসে ফিট করে না। অথবা সেগুলো খুব কমপ্লেক্স অথবা স্টেটলেস রানটাইমের সাথে কাজ করার জন্য ডিজাইন করা নয়। তাই আমরা এমন একটি সমাধান চাই যা:
- কहींও কাজ করে সার্ভারলেস এবং এজ সহ।
- মেসেজিং-অ্যাজ-অ-সার্ভিস যেখানে ইউজারদের জন্য কোনো ব্যাকএন্ড চালাতে হয় না।
- লাইটওয়েট, বোঝা সহজ, শিখতে কিছু লাগে না।
- প্রাইস শূন্যে স্কেল করে।
একটি রিয়েল-ওয়ার্ল্ড উদাহরণ নিয়ে কথা বলি। আমাদের একটি ই-কমার্স অ্যাপ আছে এবং আমরা প্রতিটি পারচেজের পর একটি ইনফরমেশনাল ইমেইল পাঠাতে চাই। আমাদের একটি সার্ভিস (একটি API রুট) আছে নতুন পারচেজের জন্য (newPurchase) এবং একটি দ্বিতীয় সার্ভিস ইমেইল এবং নোটিফিকেশন পাঠানোর জন্য (sendEmail)। আমরা newPurchase সার্ভিস থেকে sendEmail সার্ভিসকে কল করতে পারি। কিন্তু কলটি ফেইল হলে কী হবে? কি আমরা রেসপন্সের জন্য অপেক্ষা করব এবং রিট্রাই করব? কী হয় যদি অনেক কল sendEmail সার্ভিসকে কনজেস্ট কর दे এবং সার্ভিস টাইমমতো রেসপন্ড না করে? এই সব কেস newPurchase সার্ভিসে হ্যান্ডেল করতে হবে। এর পড়া, আপনি যখন sendEmail সার্ভিসের কন্ট্র্যাক্ট পরিবর্তন করবেন; তখন আপনাকে newPurchase সার্ভিসটিও আপডেট করতে হবে।
যদি আপনি উপরের উদাহরণে QStash ব্যবহার করেন, তবে আপনি শুধু newPurchase সার্ভিস থেকে QStash-এ একটি রিকোয়েস্ট পাঠাবেন। QStash রিকোয়েস্টটি কিউতে রাখবে এবং sendEmail সার্ভিসকে কল করবে। যদি সার্ভিস রেসপন্ড না করে, তবে QStash একটি ব্যাকঅফ Страটেজি দিয়ে রিট্রাই করবে। sendEmail সার্ভিসের লেটেন্সি newPurchase সার্ভিসকে প্রভাবিত করবে না, কারণ এটি sendEmail সার্ভিস থেকে রেসপন্সের জন্য অপেক্ষা করবে না। QStash newPurchase এবং sendEmail সার্ভিসগুলোর ডিকাপল করে। আপনি উভয় সার্ভিসই مستقلভাবে আপডেট করতে পারবেন যতক্ষণ না মেসেজ ফরম্যাট কম্প্যাটিবল থাকে।
QStash-এ আপনি রিকোয়েস্টে delays যোগ করতে পারেন। শিপমেন্টের ৩ দিন পর ইমেইল পাঠান কাস্টমারকে রিভিউ যোগ করার জন্য রিমাইন্ড করতে। আপনি টাস্ক স্কিডিউলও করতে পারেন। CRON এক্সপ্রেশন দিয়ে রিকোয়েস্ট পাঠাতে পারেন, যাতে এটি বারবার রান হয়।

এখন QStash-এর ফিচারগুলো সংক্ষেপে দেখি:
সব জায়গায় কাজ করে
ট্র্যাশনাল পুল-ভিত্তিক মেসেজিং-এর পরিবর্তে যেখানে আপনাকে একটি লং-রানিং প্রসেস লাগে কিউ থেকে কনসাম করার জন্য, QStash আপনার API-তে মেসেজ পুশ করে। এটি আপনাকে সার্ভারলেস ফাংশন ব্যবহার করে সেগুলো প্রসেস করার অনুমতি দেয়। আমরা রিট্রাই, কাস্টম ডিলে এবং স্কিডিউলিং হ্যান্ডেল করি। আপনার শুধু একটি পাবলিকলি এক্সেসযোগ্য HTTP API লাগবে।
প্রাইস শূন্যে স্কেল করে
QStash-এর দাম হলো প্রতি ১০০,০০০ রিকোয়েস্টের জন্য $১। ভালো কথা হলো কোনো মিনিমাম বা ফিক্সড পেমেন্ট নেই। আপনি শুধু যতটা ব্যবহার করবেন ততটার টাকা দেবেন। আপনি যদি মিলিয়ন রিকোয়েস্ট এক্সপেক্ট করেন, তবে আমরা আপনাকে লোয়ার পার-রিকোয়েস্ট প্রাইসের সাথে একটি এন্টারপ্রাইজ প্ল্যান অফার করব।
আপডেট - সেপ্টেম্বর ২০২২
আমরা QStash প্রাইসিং কমিয়ে দিয়েছি প্রতি ১০০K রিকোয়েস্টের জন্য $১। লেটেস্ট প্রাইসিং ইনফরমেশনের জন্য QStash Pricing পেজ দেখুন।
এন্ডপয়েন্ট এবং টপিক
আপনি QStash-এ মেসেজের সাথে একটি এন্ডপয়েন্ট ইনক্লুড করেন। তাই QStash মেসেজটিকে এই এন্ডপয়েন্টে পাঠায়। এছাড়া, আপনি একটি টপিক ডিফাইন করতে পারেন যা এক বা একাধিক এন্ডপয়েন্টকে একটি সিঙ্গল নেমস্পেসে গ্রুপ করার অনুমতি দেয়। টপিক অ্যাবস্ট্রাকশনের فضلেই, আপনি ব্যাকএন্ড ইমপ্লিমেন্টেশন ছুঁয়ে না এন্ডপয়েন্ট মডিফাই করতে পারেন। নিচের উদাহরণটি user-apis টপিকে রিকোয়েস্ট পাঠায়। মেসেজটির একটি কপি প্রতিটি এন্ডপয়েন্টে ডেলিভার হবে।
এন্ডপয়েন্টে পাঠানো
curl -XPOST \
"https://qstash.upstash.io/v1/publish/https://example.com" \
-H "Authorization: Bearer XXX" \
-H "Content-Type: application/json" \
-d "{ \"hello\" : \"world\" }"
টপিকে পাঠানো
curl -XPOST \
"https://qstash.upstash.io/v1/publish/user-apis" \
-H "Authorization: Bearer XXX" \
-H "Content-Type: application/json" \
-d "{ \"hello\" : \"world\" }"
স্কিডিউল
QStash আপনার টাস্কটি একটি স্কিডিউলে রিপিট করে পাঠাতে পারে। CRON এক্সপ্রেশনকে Upstash-Cron হেডারের ভ্যালু হিসেবে সেট করুন। নিচের উদাহরণটি QStash-কে প্রতি মিনিটে API কল করার ইনস্ট্রাকশন দেয়।
curl -XPOST \
'https://qstash.upstash.io/v1/publish/https://example.com' -H 'Authorization: Bearer XXX' \
-H "Content-type: application/json" \
-H "Upstash-Cron: * * * * *" \
-d '{ "hello": "world" }' \
আরো কিছু
- রিট্রাই: যদি আপনার API সাকসেস স্ট্যাটাস কোড দিয়ে রেসপন্ড না করে, তবে QStash রিকোয়েস্টটি রিট্রাই করবে যাতে প্রতিটি মেসেজ ডেলিভার্ড হয়।
- ডিলে: ৯০ দিন পর্যন্ত মেসেজ ডেলিভারি ডিলে করা যায়।
- ডিডুপ্লিকেশন: Deduplication-Id বা অটোমেটিক কন্টেন্ট-ভিত্তিক ডিডুপ্লিকেশন ব্যবহার করে ডুপ্লিকেট মেসেজ প্রিভেন্ট করা যায়।
- রিকোয়েস্ট সাইনিং: আপনার API-গুলো পাবলিক হতে হবে। আপনি প্রতিটি ইনকামিং রিকোয়েস্টের সিগনেচার ভেরিফাই করে অথেনসিটি যাচাই করতে পারেন।
- JS/TS SDK: REST API সিম্পল, কিন্তু আপনি যদি JS/TS-এ বিল্ড করেন, তবে আমাদের SDK আরও সিম্পল।
শেষ কথা
QStash সার্ভারলেস ওয়ার্ল্ডের জন্য সেরা মেসেজিং সার্ভিস প্রদান করার লক্ষ্যে কাজ করছে। এটি আমাদের প্রথম রিলিজ, তাই আমাদের আপনার ফিডব্যাক এবং কন্ট্রিবিউশন খুব দরকার। QStash ডকুমেন্টেশন চেক করুন। ডিসকর্ড এবং টুইটারে আপনার কমেন্ট এবং সাজেশন দিয়ে আমাদের সাথে যোগাযোগ করুন।