ধরুন, আপনি একটি Payment System নিয়ে কাজ করছেন।
একজন User সফলভাবে Payment করলেন।
সবকিছু ঠিকঠাক।
কিন্তু কয়েক মিনিট পর Customer Support থেকে ফোন এল—
“একই Payment-এর জন্য Customer-এর কাছে ৫টা SMS আর ৫টা Email গেছে!”
প্রথমে মনে হতে পারে,
“Notification Service-এ নিশ্চয়ই Bug আছে।”
কিন্তু একজন অভিজ্ঞ Software Engineer জানেন, সমস্যাটা শুধু Notification Service-এ নাও হতে পারে।
প্রথমে Investigation করব
আমি নিজেকে কয়েকটি প্রশ্ন করব—
- Payment কি একবার হয়েছে, নাকি একাধিকবার?
- Notification Service কি একাধিক request পেয়েছে?
- Message Queue-তে কি একই message একাধিকবার publish হয়েছে?
- Retry mechanism কি duplicate event তৈরি করেছে?
- Consumer কি একই message বারবার process করেছে?
প্রথমে Root Cause খুঁজে বের করতে হবে।
সম্ভাব্য কারণগুলো
১. Duplicate API Request
User বারবার Pay বাটনে ক্লিক করেছেন।
অথবা Network timeout হওয়ায় Mobile App আবার একই request পাঠিয়েছে।
সমাধান:
Idempotency Key ব্যবহার করুন।
একই Payment Request একাধিকবার এলেও শুধুমাত্র একটি Payment Process হবে।
২. Message Queue Retry
RabbitMQ, Azure Service Bus বা Kafka অনেক সময় failed message আবার পাঠায়।
যদি Consumer Idempotent না হয়,
তাহলে একই Notification বারবার চলে যেতে পারে।
৩. Database-এ Duplicate Event
একই Payment-এর জন্য একাধিক Event Insert হয়েছে।
Notification Service সব Event-ই Process করেছে।
৪. Consumer Crash
Consumer Notification পাঠানোর পর Crash করেছে।
কিন্তু Message Acknowledge করার আগেই Restart হয়েছে।
ফলে একই Message আবার Process হয়েছে।
তাহলে সমাধান কী?
✅ Idempotency
প্রতিটি Payment Event-এর একটি Unique Id রাখুন।
যদি একই Event আবার আসে,
সেটি Ignore করুন।
✅ Deduplication
Notification পাঠানোর আগে Database-এ Check করুন—
এই PaymentId-এর জন্য Notification ইতোমধ্যে পাঠানো হয়েছে কি না।
✅ Message Acknowledgement
Notification সফলভাবে পাঠানোর পরই Message Acknowledge করুন।
✅ Logging & Monitoring
প্রতিটি ধাপ Log করুন—
- Payment Received
- Event Published
- Notification Sent
- Retry Count
এতে Root Cause খুঁজে পাওয়া অনেক সহজ হয়।
আমার শেখা একটি বিষয়
Distributed System-এ একটি গুরুত্বপূর্ণ নীতি হলো—
“Network is unreliable.”
তাই একই Request বা Event একাধিকবার আসতেই পারে।
ভালো System সেইটিই, যা Duplicate Request পেলেও একই কাজ বারবার করে না।
শেষ কথা
একজন Senior Engineer-এর কাজ শুধু Bug Fix করা নয়।
এমনভাবে System Design করা, যাতে একই সমস্যা ভবিষ্যতে আর না ঘটে।
Payment System-এর মতো Critical Application-এ Idempotency, Deduplication এবং Proper Monitoring কোনো Luxury নয়—এগুলো Requirement।




