पाठ 30 / 32

एक नोटिफ़िकेशन सिस्टम डिज़ाइन करें

स्केल पर विश्वसनीय रूप से पुश, ईमेल और SMS तक फ़ैन-आउट।

आवश्यकताएँ

कई आंतरिक सेवाओं को यूज़र को पुश, ईमेल या SMS के ज़रिए सूचित करना है (ऑर्डर भेजा गया, कमेंट का जवाब, कीमत गिरी), यूज़र की प्राथमिकताओं का सम्मान करते हुए और एक ही इवेंट को दो बार स्पैम करने से बचते हुए।

क्यू से डीकपल्ड

प्रोड्यूसिंग सेवाएँ प्रदाताओं को सीधे कॉल करने के बजाय क्यू में notification requested इवेंट प्रकाशित करती हैं। एक नोटिफ़िकेशन सेवा इसे कंज़्यूम करती है, यूज़र प्राथमिकताएँ और शांत घंटे जाँचती है, चैनल चुनती है, और सही तृतीय-पक्ष प्रदाता (APNs, FCM, SendGrid, Twilio) को कॉल करती है।

आइडेम्पोटेंसी और रिट्राई

रिट्राई किया गया भेजना यूज़र को दोबारा सूचित नहीं करना चाहिए। भेजने से पहले एक स्थिर नोटिफ़िकेशन ID से डुप्लिकेट हटाएँ।

on notification_requested(event):
  if seen(event.notification_id): return  # dedupe
  channel = pick_channel(user.prefs)
  provider[channel].send(event)
  mark_seen(event.notification_id)

Output:

Provider outages are isolated per channel with their own retry/backoff

स्पैम से बचने के लिए बैच करें

बातूनी स्रोतों के लिए (एक मिनट में कई कमेंट), हर इवेंट के लिए एक पुश भेजने के बजाय संबंधित इवेंट को एक छोटी विंडो में एक डाइजेस्ट नोटिफ़िकेशन में बैच करें।