• CHAPTER 10: DESIGN A NOTIFICATION SYSTEM


    Step 1 - Understand the problem and establish design scope

    Candidate: What types of notifications does the system support?
    Interviewer: Push notification, SMS message, and email.
    Candidate: Is it a real-time system?
    Interviewer: Let us say it is a soft real-time system. We want a user to receive notifications as soon as possible. However, if the system is under a high workload, a slight delay is acceptable.
    Candidate: What are the supported devices?
    Interviewer: iOS devices, android devices, and laptop/desktop.
    Candidate: What triggers notifications?
    Interviewer: Notifications can be triggered by client applications. They can also be
    scheduled on the server-side.
    Candidate: Will users be able to opt-out?
    Interviewer: Yes, users who choose to opt-out will no longer receive notifications.
    Candidate: How many notifications are sent out each day?
    Interviewer: 10 million mobile push notifications, 1 million SMS messages, and 5 million emails.

    Step 2 - Propose high-level design and get buy-in

    • Different types of notifications
    • Contact info gathering flow
    • Notification sending/receiving flow

    Different types of notifications

    在这里插入图片描述
    Android push notification
    在这里插入图片描述
    SMS message
    在这里插入图片描述
    Email
    在这里插入图片描述
    在这里插入图片描述

    Contact info gathering flow

    在这里插入图片描述
    在这里插入图片描述

    Notification sending/receiving flow

    在这里插入图片描述
    Three problems are identified in this design:
    • Single point of failure (SPOF): A single notification server means SPOF.
    • Hard to scale: The notification system handles everything related to push notifications in one server. It is challenging to scale databases, caches, and different notification
    processing components independently.
    • Performance bottleneck: Processing and sending notifications can be resource intensive.
    For example, constructing HTML pages and waiting for responses from third party
    services could take time. Handling everything in one system can result in the system
    overload, especially during peak hours.

    High-level design (improved)

    • Move the database and cache out of the notification server.
    • Add more notification servers and set up automatic horizontal scaling.
    • Introduce message queues to decouple the system components.
    在这里插入图片描述

    Step 3 - Design deep dive

    Reliability

    How to prevent data loss?
    persists notification data in a database and implements a retry mechanism.
    在这里插入图片描述
    Will recipients receive a notification exactly once?

    Although notification is delivered exactly once most of the time, the distributed nature could result in duplicate notifications.

    we introduce a dedupe mechanism and handle each failure case carefully.

    When a notification event first arrives, we check if it is seen before by checking the event ID. If it is seen before, it is discarded.

    Additional components and considerations

    Notification template
    Notification setting
    Before any notification is sent to a user, we first check if a user is opted-in to receive this type of notification.

    Rate limiting
    Retry mechanism
    Security in push notifications
    Monitor queued notifications

    A key metric to monitor is the total number of queued notifications. If the number is large, the notification events are not processed fast enough by workers. To avoid delay in the notification delivery, more workers are needed.

    Events tracking
    在这里插入图片描述

    Updated design

    在这里插入图片描述

    Step 4 - Wrap up

    Besides the high-level design, we dug deep into more components and optimizations.
    • Reliability: We proposed a robust retry mechanism to minimize the failure rate.
    • Security: AppKey/appSecret pair is used to ensure only verified clients can send
    notifications.
    • Tracking and monitoring: These are implemented in any stage of a notification flow to
    capture important stats.
    • Respect user settings: Users may opt-out of receiving notifications. Our system checks
    user settings first before sending notifications.
    • Rate limiting: Users will appreciate a frequency capping on the number of notifications
    they receive.

  • 相关阅读:
    电脑文件自动备份到百度网盘 实时备份
    AWS:EC2实例创建步骤
    牛客月赛60 F.被抓住的小竹(数学&推式子)
    SpringBoot如何避免SQL注入漏洞呢?
    辛普森一家,有趣的句子
    大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
    用对配音软件,轻松制作专业配音~
    基于Dijkstra和A*算法的机器人路径规划(Matlab代码实现)
    【毕业设计】大数据客户价值分析(RFM模型)
    分布式系统原理-分布式系统的麻烦
  • 原文地址:https://blog.csdn.net/HuiFeiDeTuoNiaoGZ/article/details/133227709