近年来,通知功能已经成为许多应用程序中突出的特性。构建一个能每天发送数百万通知的可扩展系统绝非易事。这正是为什么我觉得有必要记录我在这方面踩坑之路。也叫用户触达系统。

完成这项任务要求对通知生态系统有深刻的理解,否则需求很容易变得模糊和不明确。

1 了解通知系统并确定设计范围

通知是用于向用户提供重要信息的一种方式,如产品更新、提醒事件、优惠等。已成为应用功能清单中的重要组成部分。

通知不仅是移动推送通知。通常,根据接收者的特征

1 通知格式分类

  • 移动推送通知
  • 短信
  • 电子邮件
  • 网页推送通知
  • 第三方应用通知(类似 Slack、钉钉的应用)

2 功能需求

  • 系统支持推送通知、短信、电子邮件和第三方应用通知。
  • 准实时系统。希望用户尽快收到通知。然而,若系统负载过高,轻微延迟也可接受
  • 支持的设备:移动设备(iOS 和 Android)以及笔记本电脑/台式机
  • 通知可以由客户端应用程序事件触发,也可以在服务器端进行计划
  • 用户可以选择不再接收将来的通知
  • 大致上,我希望每天发送1000万条推送通知、500万封电子邮件和100万条短信

3 顶层设计

首先,我们需要找出一个支持各种通知类型的高级设计:短信、电子邮件、iOS推送通知、Android推送通知和Slack应用通知。

然后,系统应该以以下组件结构化:

  • 不同通知类型的配置
  • 收集联系信息流
  • 通知发送和接收流

4 不同通知类型的高级设计与AWS

每种通知类型在高级层面上的工作原理。

4.1 短信

核心组件

  • Producer — 生产者构建并向【SMS Service】发送通知请求。为构建短信的通知请求,生产者应提供数据:带有国家代码的用户电话号码,JSON字典负载下的短信主题/内容。也就是公司内各业务部门
  • SMS Service,短信服务,用于处理自定义业务逻辑并触发短信发送
  • AWS SNS或第三方短信服务 — 这是AWS用于发送短信的服务,但为增加高可用性和韧性,我添加了第三方短信服务选项。默认,短信服务将调用AWS SNS,但若异常,可切换到其他短信服务
  • SMS device,短信设备 — 接收短信的终端客户端

4.2 📮

生产者应提供:

  • 用户的email地址
  • email内容

给到Email Service函数。

4.3 iOS推送通知

使用SNS + APNS的iOS推送通知

Producer将向Mobile Push Service(移动推送服务)提供用户信息,如:

  • 设备令牌
  • 通知内容

Mobile Push Service将构建并向SNS发送通知请求。iOS推送通知请求应构建以下数据:

  • 设备令牌 — 用于发送推送通知的唯一标识符
  • 负载 — 这是APNS定义接受的JSON字典格式

APNS — 这是由Apple提供的远程服务,用于向iOS设备传播推送通知。

4.4 Android推送通知

使用SNS + FCM的Android推送通知

Android有类似通知流。与使用APNS不同,使用Firebase Cloud Messaging(FCM)向Android设备发送推送通知。

4.5 Slack应用通知

producer将适当提供:

  • 消息内容
  • 主题/频道地址

给第三方应用推送服务。

SQS是用于控制速率限制的消息队列,因为许多第三方API都有这样的限制。我们要有礼貌地调用第三方API!

本文由博客一文多发平台 OpenWrite 发布!