ওয়েবহুকস ব্যাখ্যা: সাইনড পেলোড এবং রিট্রাই স্ট্র্যাটেজি
আপনি এইমাত্র একটি পেমেন্ট গেটওয়ে বা CI/CD সার্ভিস ইন্টিগ্রেট করেছেন, এবং এখন আপনাকে রিয়েল-টাইম ইভেন্ট接收 করতে হবে। আপনি একটি এন্ডপয়েন্ট সেট আপ করেছেন, কিন্তু শীঘ্রই দুটি গুরুত্বপূর্ণ প্রশ্নের সম্মুখীন হবেন: কীভাবে নিশ্চিত করবেন যে অনুরোধটি সত্যিই সার্ভিস থেকে এসেছে? আর যদি কোনো ইভেন্ট ঘটার সময় আপনার সার্ভার ডাউন থাকে তাহলে কী হবে? এই নিবন্ধটি সাইনড পেলোড এবং রিট্রাই স্ট্র্যাটেজি ব্যাখ্যা করে উভয় প্রশ্নের উত্তর দেয়—যা নির্ভরযোগ্য ওয়েবহুকসের মূল ভিত্তি।
ওয়েবহুকস কী?
ওয়েবহুকস হলো ব্যবহারকারী-সংজ্ঞায়িত HTTP কলব্যাক। যখন কোনো সোর্স সিস্টেমে (যেমন, নতুন কমিট, পেমেন্ট সফল) একটি ইভেন্ট ঘটে, তখন এটি আপনার দেওয়া URL-এ একটি HTTP POST অনুরোধ পাঠায়। পোলিংয়ের বিপরীতে, ওয়েবহুকস প্রায় রিয়েল-টাইমে ডেটা পুশ করে, যা লেটেন্সি এবং সার্ভার লোড কমায়। তবে, এই পুশ মডেলটি চ্যালেঞ্জ নিয়ে আসে: সত্যতা যাচাই এবং ডেলিভারি ব্যর্থতা সামলানো।
সাইনড পেলোড কেন গুরুত্বপূর্ণ
যে কেউ আপনার এন্ডপয়েন্টে HTTP অনুরোধ পাঠাতে পারে। যাচাই ছাড়া, আক্রমণকারীরা ইভেন্ট জাল করতে পারে, যা অননুমোদিত কাজের দিকে পরিচালিত করে। সাইনড পেলোড একটি শেয়ার্ড সিক্রেট ব্যবহার করে অনুরোধ বডির উপর গণনা করা একটি ক্রিপ্টোগ্রাফিক সিগনেচার অন্তর্ভুক্ত করে এটি সমাধান করে। রিসিভার সিগনেচারটি পুনরায় গণনা করে এবং তুলনা করে, নিশ্চিত করে যে পেলোডটি পরিবর্তিত হয়নি এবং প্রত্যাশিত প্রেরকের কাছ থেকে এসেছে।
HMAC সিগনেচার কীভাবে কাজ করে
বেশিরভাগ সার্ভিস HMAC-SHA256 ব্যবহার করে। প্রেরক একটি সিক্রেট কী দিয়ে পেলোড হ্যাশ করে একটি সিগনেচার তৈরি করে এবং এটি একটি হেডারে (যেমন, X-Signature) অন্তর্ভুক্ত করে। রিসিভার একই কাজ করে এবং টাইমিং অ্যাটাক প্রতিরোধে একটি কনস্ট্যান্ট-টাইম ফাংশন ব্যবহার করে তুলনা করে।
ধাপে ধাপে: একটি সাইনড পেলোড যাচাই করা
- সিগনেচারটি বের করুন হেডার থেকে (যেমন,
X-Signature)। - কাঁচা অনুরোধ বডি পান স্ট্রিং বা বাফার হিসেবে—প্রথমে এটি পার্স করবেন না, কারণ ফরম্যাটিং পরিবর্তন সিগনেচার ভেঙে দেয়।
- প্রত্যাশিত সিগনেচার গণনা করুন আপনার সিক্রেট কী দিয়ে HMAC-SHA256 ব্যবহার করে।
- সিগনেচার তুলনা করুন একটি কনস্ট্যান্ট-টাইম তুলনা ফাংশন ব্যবহার করে।
- অনুরোধ প্রত্যাখ্যান করুন HTTP 401 দিয়ে যদি তারা মেলে না।
এখানে Express ব্যবহার করে একটি Node.js উদাহরণ:
const crypto = require('crypto');
const express = require('express');
const app = express();
app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => {
const signature = req.headers['x-signature'];
const secret = process.env.WEBHOOK_SECRET;
const payload = req.body; // raw buffer
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('Invalid signature');
}
// Process the event
const event = JSON.parse(payload);
// ... handle event
res.status(200).send('OK');
});
দ্রষ্টব্য: যাচাইয়ের জন্য সর্বদা কাঁচা বডি ব্যবহার করুন। যে মিডলওয়্যার JSON পার্স করে তা পেলোড পরিবর্তন করবে, যার ফলে সিগনেচার মিলবে না।
রিট্রাই স্ট্র্যাটেজি ডিজাইন করা
সাইনড পেলোড থাকা সত্ত্বেও, নেটওয়ার্ক সমস্যা বা সার্ভার ডাউনটাইম ডেলিভারি ব্যর্থতার কারণ হতে পারে। একটি শক্তিশালী রিট্রাই স্ট্র্যাটেজি নিশ্চিত করে যে ইভেন্টগুলি হারিয়ে না যায়। মূল বিবেচ্য বিষয়গুলি:
১. দ্রুত স্বীকার করুন
সিগনেচার যাচাই এবং প্রসেসিংয়ের জন্য ইভেন্টটি সারিবদ্ধ করার সাথে সাথেই 2xx স্ট্যাটাস দিয়ে সাড়া দিন। এটি প্রেরককে টাইমআউট এবং অপ্রয়োজনীয়ভাবে পুনরায় চেষ্টা করা থেকে বিরত রাখে।
২. ইডেম্পোটেন্সি
রিট্রাই একই ইভেন্ট একাধিকবার ডেলিভার করতে পারে। ডুপ্লিকেট এড়াতে একটি ইডেম্পোটেন্সি কী (প্রায়শই পেলোড বা হেডারে অন্তর্ভুক্ত) ব্যবহার করুন। প্রসেস করা ইভেন্ট আইডি সংরক্ষণ করুন এবং ডুপ্লিকেট উপেক্ষা করুন।
৩. জিটার সহ এক্সপোনেনশিয়াল ব্যাকঅফ
যদি আপনার এন্ডপয়েন্ট একটি ত্রুটি (নন-2xx) ফেরত দেয়, তাহলে প্রেরককে ক্রমবর্ধমান বিলম্বের সাথে পুনরায় চেষ্টা করা উচিত। এক্সপোনেনশিয়াল ব্যাকঅফ (যেমন, ১ সেকেন্ড, ২ সেকেন্ড, ৪ সেকেন্ড, ৮ সেকেন্ড) আউটেজের সময় লোড কমায়। র্যান্ডম জিটার যোগ করা থান্ডারিং হার্ড সমস্যা প্রতিরোধ করে।
সাধারণ রিট্রাই সময়সূচি:
| প্রচেষ্টা | বিলম্ব |
|---|---|
| ১ | তাৎক্ষণিক |
| ২ | ১ মিনিট |
| ৩ | ৫ মিনিট |
| ৪ | ৩০ মিনিট |
| ৫ | ২ ঘন্টা |
৪. ডেড লেটার কিউ
সর্বোচ্চ রিট্রাইয়ের পরে, ম্যানুয়াল পরিদর্শনের জন্য ইভেন্টটি একটি ডেড লেটার কিউতে সরান। এটি অন্তহীন রিট্রাই এবং ডেটা ক্ষতি প্রতিরোধ করে।
৫. মনিটরিং এবং অ্যালার্ট
ডেলিভারি সফলতার হার, লেটেন্সি এবং ব্যর্থতার কারণ ট্র্যাক করুন। সমস্যাগুলি তাড়াতাড়ি সনাক্ত করতে ব্যর্থতার বৃদ্ধির জন্য অ্যালার্ট সেট আপ করুন।
সাধারণ ভুল এবং সেরা অনুশীলন
- সর্বদা সিগনেচার যাচাই করুন—অন্ধভাবে আগত ডেটা বিশ্বাস করবেন না।
- HTTPS ব্যবহার করুন ট্রানজিটে পেলোড সুরক্ষিত রাখতে।
- নিয়মিত সিক্রেট রোটেট করুন এবং রোটেশনের সময় একাধিক সক্রিয় সিক্রেট সমর্থন করুন।
- ওয়েবহুক ইভেন্ট লগ করুন (সংবেদনশীল ডেটা মুছে ফেলে) ডিবাগিংয়ের জন্য।
- নমুনা পেলোড দিয়ে পরীক্ষা করুন ওয়েবহুক ডেলিভারি সিমুলেট করে এমন টুল ব্যবহার করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
ওয়েবহুকসে সাইনড পেলোড কী?
একটি সাইনড পেলোডে একটি ক্রিপ্টোগ্রাফিক সিগনেচার (সাধারণত HMAC) থাকে যা রিসিভারকে অনুরোধের সত্যতা এবং অখণ্ডতা যাচাই করতে দেয়।
একটি ওয়েবহুক কতবার পুনরায় চেষ্টা করা উচিত?
কোনো নির্দিষ্ট সংখ্যা নেই; সাধারণ অনুশীলন ৩ থেকে ১০ বার রিট্রাই এক্সপোনেনশিয়াল ব্যাকঅফের সাথে। এর পরে, ইভেন্টগুলি প্রায়শই ডেড লেটার কিউতে পাঠানো হয়।
আমি কি সিগনেচার ছাড়া ওয়েবহুক ব্যবহার করতে পারি?
এটি সম্ভব কিন্তু অত্যন্ত নিরুৎসাহিত। সিগনেচার ছাড়া, আপনার এন্ডপয়েন্ট জাল অনুরোধ এবং ডেটা লঙ্ঘনের ঝুঁকিতে থাকে।
আপনার ওয়েবহুক পেলোড পরীক্ষা করতে প্রস্তুত? দ্রুত JSON পেলোড পরিদর্শন এবং যাচাই করতে আমাদের JSON ফরম্যাটার ব্যবহার করুন।