Skip to content

Notification System Design (LLD Deep-Dive)

একটি স্কেলেবল নোটিফিকেশন সিস্টেম ডিজাইন করা যা ইমেইল, এসএমএস এবং পুশ নোটিফিকেশন পাঠাতে পারে।


১. রিকোয়ারমেন্টস (Requirements)

  • ভিন্ন ভিন্ন চ্যানেল (SMS, Email, Push) সাপোর্ট করতে হবে।
  • প্রিয়োরিটি কিউ (Critical notifications like OTP vs Marketing SMS) থাকতে হবে।
  • রেট লিমিটিং (একই ইউজারকে যেন খুব বেশি নোটিফিকেশন না যায়) থাকতে হবে।
  • স্ট্যাটাস ট্র্যাকিং (Sent, Delivered, Failed)।

২. মেইন ক্লাস এবং এনটিটি

  • Notification: মেসেজ বডি, টাইপ, রিসিভার।
  • NotificationChannel (Interface): EmailChannel, SMSChannel, PushChannel এটা ইমপ্লিমেন্ট করবে।
  • NotificationService: পুরো প্রসেস এবং কিউইং হ্যান্ডেল করবে।
  • UserPreferences: ইউজার কোন মাধ্যমে নোটিফিকেশন পেতে চায়।

৩. ডিজাইন প্যাটার্ন ব্যবহার

  • Strategy Pattern: রান-টাইমে চ্যানেল সিলেক্ট করার জন্য।
  • Observer Pattern: সিস্টেমের কোনো ইভেন্ট (যেমন: Order Placed) ঘটলে সাবস্ক্রাইবারদের নোটিফাই করা।
  • Factory Pattern: নোটিফিকেশন অবজেক্ট তৈরির জন্য।
  • Decorator Pattern: নোটিফিকেশনে অতিরিক্ত ফিচার (যেমন: লোগো যোগ করা বা এনক্রিপশন) যুক্ত করার জন্য।

৪. আর্কিটেকচার এবং কিউইং

স্কেলেবিলিটির জন্য মেসেজ কিউ (Kafka বা RabbitMQ) ব্যবহার করা হয়। প্রসেস: ১. ইউজার রিকোয়েস্ট পাঠায়। ২. সিস্টেম রিকোয়েস্টটি ভ্যালিডেট করে কিউতে রাখে। ৩. ওয়ার্কাররা কিউ থেকে ডেটা নিয়ে থার্ড পার্টি এপিআই (যেমন: Twilio, SendGrid) এর মাধ্যমে পাঠায়।


৫. ক্লাস ডায়াগ্রাম (Mermaid)

mermaid
classDiagram
    class NotificationChannel {
        <<interface>>
        +send(Notification n)
    }
    class NotificationService {
        +sendNotification(Notification n)
    }
    NotificationChannel <|.. SMSChannel
    NotificationChannel <|.. EmailChannel
    NotificationService --> NotificationChannel : uses

Released under the MIT License.