Payment করার পর User-এর কাছে একাধিক Notification চলে গেল! আসল সমস্যা কোথায়?

ধরুন, আপনি একটি 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।

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *