网站消息通知设计
通知系統是一個成熟的 web 網站或者 app 最基本的功能,比如微博、知乎、掘金等。當然今天本文要討論的不是這種大網站、大流量的通知系統,而是一般用戶量的網站或者應用。
通知系統的組成
一個通知系統主要由:通知來源、通知控制、通知方式、通知模板和通知的目標五個部分組成。 后面詳細介紹各個組成的作用。組成結構如下圖所示:
通知來源
通知來源是指觸發本次通知事件的源頭,一般包括以下三種情況:
通知控制
通知控制用來進行權限控制、黑白名單過濾、用戶接收消息頻率控制、內容審查等。總之控制和過濾相關的都放在這里。
通知模板
通知模板用來與數據模型結合并最終展示給用戶,類似 MVC 模式中的 V,可以是純文本也可以是 Velocity 之類的模板。引入通知模板主要是為了滿足以下三點:
通知方式
常見的有站內信、郵件、短信、工作通知(釘釘、企業微信)等。其中像郵件、短信和工作通知都是基于第三方應用的,用的時候頂多在他們提供的接口上做一層封裝就可以了,所以沒什么可以講的。而站內信往往則需要網站或者應用自己設計和開發,所以很多網上介紹通知系統都只是介紹站內信的設計。
通知系統的分層
本文設計的通知系統流程圖如下,主要分為業務層、數據模型層、控制層、分發層、視圖層和發送層。分層可以降低各個模塊之間的耦合,每一層只做自己該做的事。
業務層
該層與業務相關,屬于通知系統中的通知來源部分。是調用通知系統服務的調用方,放在這里為了后面講解業務與通知系統的解耦。
數據模型層
相信很多寫 web 后臺的程序員對 MVC 模式很熟悉,這一層相當于 MVC 模式中的 M 層,主要負責收集模型數據的。該層理論上劃分為通知系統的通知來源。該層的數據模型與上層業務緊密關聯,不同的業務場景需要不同的通知數據。
控制/過濾層
即通知控制,用來進行權限控制、黑白名單過濾、用戶接收消息頻率控制、內容審查等。
分發層
不同的業務往往需要不同的方式發送通知消息,比如事件通知要進行站內信通知、而被封號往往會選擇郵件或者短信通知。消息到達分發層后,根據業務的不同選擇不同的發送策略。如果需要將發送的消息記錄進行存儲也可以放在這層。
視圖層
本層與數據模型層關系很大,數據到這一層后會與模板結合組成要發送的內容。
發送層
主要是調用短信、郵件、工作通知和站內信等接口將消息發送出去。我們將在第三部分講解該層中的站內信設計。
以上分層建議采用框架的方式將所有流程編排好,每層都采用接口或者抽象類的方式調用。每層都有一些基類和固定接口,一旦有新的業務來只需要繼承這些基類并實現相應接口就可以了。
結尾
本文通知系統設計就講到這里,雖然簡單但也是經驗之談吧。筆者在設計這塊的時候也是慢慢演化過來的。一開始業務少、功能簡單,直接將所有代碼壘在一起。后期增加功能改動非常之大,幾乎等于重構。采用這種設計后,如果需要新增業務,只需要新增一些類,流程就可以自動 run 起來。
轉載于:https://juejin.im/post/5d02629c5188253d592e0631
總結
- 上一篇: 【强化学习实战】基于gym和tensor
- 下一篇: 学习使用一款数据质控软件(Trimmom