訊息通知(Notification)/使用者觸達系統設計

張哥說技術發表於2023-12-19

來源:JavaEdge


近年來,通知功能已經成為許多應用程式中突出的特性。構建一個能每天傳送數百萬通知的可擴充套件系統絕非易事。這正是為什麼我覺得有必要記錄我在這方面踩坑之路。也叫使用者觸達系統。

完成這項任務要求對通知生態系統有深刻的理解,否則需求很容易變得模糊和不明確。

1 瞭解通知系統並確定設計範圍

通知是用於向使用者提供重要資訊的一種方式,如產品更新、提醒事件、優惠等。已成為應用功能清單中的重要組成部分。

通知不僅是移動推送通知。通常,根據接收者的特徵

1 通知格式分類

  • 移動推送通知
  • 簡訊
  • 電子郵件
  • 網頁推送通知
  • 第三方應用通知(類似 Slack、釘釘的應用)

2 功能需求

  • 系統支援推送通知、簡訊、電子郵件和第三方應用通知。
  • 準實時系統。希望使用者儘快收到通知。然而,若系統負載過高,輕微延遲也可接受
  • 支援的裝置:移動裝置(iOS 和 Android)以及膝上型電腦/桌上型電腦
  • 通知可以由客戶端應用程式事件觸發,也可以在伺服器端進行計劃
  • 使用者可以選擇不再接收將來的通知
  • 大致上,我希望每天傳送1000萬條推送通知、500萬封電子郵件和100萬條簡訊

3 頂層設計

首先,我們需要找出一個支援各種通知型別的高階設計:簡訊、電子郵件、iOS推送通知、Android推送通知和Slack應用通知。

然後,系統應該以以下元件結構化:

  • 不同通知型別的配置
  • 收集聯絡資訊流
  • 通知傳送和接收流

4 不同通知型別的高階設計與AWS

每種通知型別在高階層面上的工作原理。

4.1 簡訊

訊息通知(Notification)/使用者觸達系統設計

核心元件

  • Producer — 生產者構建並向【SMS Service】傳送通知請求。為構建簡訊的通知請求,生產者應提供資料:帶有國家程式碼的使用者電話號碼,JSON字典負載下的簡訊主題/內容。也就是公司內各業務部門
  • SMS Service,簡訊服務,用於處理自定義業務邏輯並觸發簡訊傳送
  • AWS SNS或第三方簡訊服務 — 這是AWS用於傳送簡訊的服務,但為增加高可用性和韌性,我新增了第三方簡訊服務選項。預設,簡訊服務將呼叫AWS SNS,但若異常,可切換到其他簡訊服務
  • SMS device,簡訊裝置 — 接收簡訊的終端客戶端

4.2 📮

訊息通知(Notification)/使用者觸達系統設計

生產者應提供:

  • 使用者的email地址
  • email內容

給到Email Service函式。

4.3 iOS推送通知

訊息通知(Notification)/使用者觸達系統設計

使用SNS + APNS的iOS推送通知

Producer將向Mobile Push Service(移動推送服務)提供使用者資訊,如:

  • 裝置令牌
  • 通知內容

Mobile Push Service將構建並向SNS傳送通知請求。iOS推送通知請求應構建以下資料:

  • 裝置令牌 — 用於傳送推送通知的唯一識別符號
  • 負載 — 這是APNS定義接受的JSON字典格式

APNS — 這是由Apple提供的遠端服務,用於向iOS裝置傳播推送通知。

4.4 Android推送通知

訊息通知(Notification)/使用者觸達系統設計

使用SNS + FCM的Android推送通知

Android有類似通知流。與使用APNS不同,使用Firebase Cloud Messaging(FCM)向Android裝置傳送推送通知。

4.5 Slack應用通知

訊息通知(Notification)/使用者觸達系統設計

producer將適當提供:

  • 訊息內容
  • 主題/頻道地址

給第三方應用推送服務。

SQS是用於控制速率限制的訊息佇列,因為許多第三方API都有這樣的限制。我們要有禮貌地呼叫第三方API!


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024923/viewspace-3000560/,如需轉載,請註明出處,否則將追究法律責任。

相關文章