成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」

v1 / 2511人閱讀

摘要:原文鏈接消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)上篇由于文章篇幅較長(zhǎng),而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來(lái)寫(xiě)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。更新于關(guān)聯(lián)文章消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)下篇如果本文對(duì)您有用請(qǐng)不要吝嗇你們的與這會(huì)大大支持我們繼續(xù)創(chuàng)作

原文鏈接:Bluesun | 消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」

由于文章篇幅較長(zhǎng),而作者精力有限,不希望這么早就精盡人亡,故分成上下篇來(lái)寫(xiě)消息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。上篇主要講的是一些概念,搞清楚我們要做的這個(gè)消息系統(tǒng)的主要內(nèi)容。而下篇主要講具體的實(shí)現(xiàn),會(huì)包括架構(gòu)設(shè)計(jì),數(shù)據(jù)庫(kù)設(shè)計(jì),業(yè)務(wù)流程詳細(xì)的實(shí)現(xiàn)等。

整個(gè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),并非我一人之力就可以完成的。這其中是同事們大家一起討論與商討的結(jié)果,而我只是把它細(xì)化,呈現(xiàn)出來(lái)。

我只是一個(gè)會(huì)思考的idea搬運(yùn)工。

產(chǎn)品分析

首先我們來(lái)看一下市場(chǎng)上關(guān)于消息的實(shí)現(xiàn)是怎么樣的。

簡(jiǎn)書(shū)

簡(jiǎn)書(shū)的消息系統(tǒng)主要分了兩種

簡(jiǎn)信

提醒

簡(jiǎn)信
簡(jiǎn)信的性質(zhì)其實(shí)跟私信是一樣的,是用戶(hù)發(fā)送給用戶(hù)的一則消息,有具體的信息內(nèi)容。

提醒
而提醒,則是系統(tǒng)發(fā)送的一則消息,其文案格式是固定的,并且對(duì)特殊對(duì)象一般擁有超鏈接。

知乎

知乎跟簡(jiǎn)書(shū)一樣,主要分了兩種:

私信

消息

私信
跟簡(jiǎn)書(shū)一樣,使用戶(hù)發(fā)送給用戶(hù)的一則消息,也可以是管理員發(fā)送給用戶(hù)的消息。

消息
知乎的消息比簡(jiǎn)書(shū)的提醒有過(guò)之而無(wú)不及,知乎會(huì)對(duì)多條相似的消息進(jìn)行聚會(huì),以達(dá)到減輕用戶(hù)閱讀壓力的體驗(yàn)。

消息的三種分類(lèi)

通過(guò)兩種產(chǎn)品的簡(jiǎn)單分析,得出他們的消息有兩種分類(lèi),在這基礎(chǔ)上,我們?cè)偌由弦环N:公告。
公告的主要性質(zhì)是系統(tǒng)發(fā)送一則含有具體內(nèi)容的消息,站內(nèi)所有用戶(hù)都能讀取到這條消息。
所以,消息有三種分類(lèi):

公告 Announce

提醒 Remind

私信 Message

提醒的語(yǔ)言分析

我們從簡(jiǎn)書(shū)取一組提醒樣本:

3dbe1bd90774 關(guān)注了你

magicdawn 喜歡了你的文章 《單點(diǎn)登錄的三種實(shí)現(xiàn)方式》

無(wú)良程序 喜歡了你的文章 《基于RESTful API 怎么設(shè)計(jì)用戶(hù)權(quán)限控制?》

alexcc4 喜歡了你的文章 《在Nodejs中貫徹單元測(cè)試》

你在《基于RESTful API 怎么設(shè)計(jì)用戶(hù)權(quán)限控制?》中收到一條 cnlinjie 的評(píng)論

你的文章《Session原理》已被加入專(zhuān)題 《ios開(kāi)發(fā)》

分析句子結(jié)構(gòu),提醒的內(nèi)容無(wú)非就是

「誰(shuí)對(duì)一樣屬于誰(shuí)的事物做了什么操作」

「someone do something in someone"s something」

someone = 提醒的觸發(fā)者,或者發(fā)送者,標(biāo)記為sender
do something = 提醒的動(dòng)作,評(píng)論、喜歡、關(guān)注都屬于一個(gè)動(dòng)作,標(biāo)記為action
something = 提醒的動(dòng)作作用對(duì)象,這就具體到是哪一篇文章,標(biāo)記為target
someone"s = 提醒的動(dòng)作作用對(duì)象的所有者,標(biāo)記為targetOwner

這就清楚了,sender和targetOwner就是網(wǎng)站的用戶(hù),而target是具體到哪一篇文章,如果提醒的對(duì)象不僅僅局限于文章,還有其他的話(huà),就需要增加一項(xiàng)targetType,來(lái)標(biāo)記目標(biāo)是文章還是其他的什么。而action,則是固定的,整個(gè)網(wǎng)站會(huì)觸發(fā)提醒的動(dòng)作可能就只有那幾樣:評(píng)論、喜歡、關(guān)注.....(或者其他業(yè)務(wù)需要提醒的動(dòng)作)

消息的兩種獲取方式

推 Push

拉 Pull

以知乎為例
推的比較常見(jiàn),需要針對(duì)某一個(gè)問(wèn)題維護(hù)著一張關(guān)注者的列表,每當(dāng)觸發(fā)這個(gè)問(wèn)題推送的條件時(shí)(例如有人回答問(wèn)題),就把這個(gè)通知發(fā)送給每個(gè)關(guān)注者。

拉的相對(duì)麻煩一點(diǎn),就是推的反向,例如每個(gè)用戶(hù)都有一張關(guān)注問(wèn)題的列表,每當(dāng)用戶(hù)上線(xiàn)的時(shí)候,對(duì)每個(gè)問(wèn)題進(jìn)行輪詢(xún),當(dāng)問(wèn)題的事件列表出現(xiàn)了比我原本時(shí)間戳大的信息就進(jìn)行拉取。

而我們則根據(jù)消息的不同分類(lèi)采用不同的獲取方式
通告和提醒,適合使用拉取的方式,消息產(chǎn)生之后,會(huì)存在消息表中,用戶(hù)在某一特定的時(shí)間根據(jù)自己關(guān)注問(wèn)題的表進(jìn)行消息的拉取,然后添加到自己的消息隊(duì)列中,

信息,適合使用推的方式,在發(fā)送者建立一條信息之后,同時(shí)指定接收者,把消息添加到接收者的消息隊(duì)列中。

訂閱

根據(jù)提醒使用拉取的方式,需要維護(hù)一個(gè)關(guān)注某一事物的列表。
這種行為,我們稱(chēng)之為:「訂閱」Subscribe

一則訂閱有以下三個(gè)核心屬性

訂閱的目標(biāo) target

訂閱的目標(biāo)類(lèi)型 targetType

訂閱的動(dòng)作 action

比如我發(fā)布了一篇文章,那么我會(huì)訂閱文章《XXX》的評(píng)論動(dòng)作,所以文章《XXX》每被人評(píng)論了,就需要發(fā)送一則提醒告知我。

訂閱的規(guī)則還可以擴(kuò)展
我喜歡了一篇文章,和我發(fā)布了一篇文章,訂閱的動(dòng)作可能不一樣。
喜歡了一篇文章,我希望我訂閱這篇文章更新、評(píng)論的動(dòng)作。
而發(fā)布了一篇文章,我希望我只是訂閱這篇文章的評(píng)論動(dòng)作。

這時(shí)候就需要多一個(gè)參數(shù):subscribReason
不同的subscribReason,對(duì)應(yīng)著一個(gè)動(dòng)作數(shù)組,
subscribReason = 喜歡,對(duì)應(yīng)著 actions = [更新,評(píng)論]
subscribReason = 發(fā)布,對(duì)應(yīng)著 actions = [評(píng)論]

訂閱的規(guī)則還還可以擴(kuò)展
用戶(hù)可能會(huì)有一個(gè)自己的訂閱設(shè)置,比如對(duì)于所有的喜歡的動(dòng)作,我都不希望接收。
比如Knewone的提醒設(shè)置

所以我們需要再維護(hù)一個(gè)表:SubscriptionConfig,來(lái)存放用戶(hù)的提醒設(shè)置。
并且,當(dāng)用戶(hù)沒(méi)有提醒設(shè)置的時(shí)候,可以使用系統(tǒng)提供的一套默認(rèn)設(shè)置:defaultSubscriptionConfig

聚合

如果我發(fā)布了一篇文章《XXX》,在我不在線(xiàn)的時(shí)候,被評(píng)論了10遍,當(dāng)我一上線(xiàn)的時(shí)候,應(yīng)該是收到十條信息類(lèi)似于:「誰(shuí)誰(shuí)誰(shuí)評(píng)論了你的文章《XXX》」?
還是應(yīng)該收到一條信息:「甲、乙、丙、丁...評(píng)論了你的文章《XXX》」?

知乎在聚合上做的很優(yōu)秀,要知道他們要實(shí)現(xiàn)這個(gè)還是挺有技術(shù)的:
知乎的消息機(jī)制,在技術(shù)上如何設(shè)計(jì)與規(guī)劃?
網(wǎng)站的消息(通知)系統(tǒng)一般是如何實(shí)現(xiàn)的?

關(guān)于這部分功能,我們還沒(méi)有具體的實(shí)現(xiàn)方法,暫時(shí)也無(wú)法講得更加詳細(xì)?!雪n⊙

五個(gè)實(shí)體

通過(guò)上面的分析,大概知道做這個(gè)消息系統(tǒng),需要哪些實(shí)體類(lèi):

用戶(hù)消息隊(duì)列 UserNotify

用戶(hù) User

訂閱 Subscription

訂閱設(shè)置 SubscriptionConfig

消息 Notify

通告 Announce

提醒 Remind

信息 Message

行為分解

說(shuō)了這么多,整理一下整個(gè)消息流程的一些行為:

系統(tǒng)或者管理員,創(chuàng)建消息

createNotify (make announce | remind | message)

用戶(hù),訂閱消息,取消訂閱

subscribe, cancelSubscription

用戶(hù)管理訂閱設(shè)置

getSubscriptionConfig, updateSubscriptionConfig

用戶(hù),拉取消息

pullNotify (pull announce | remind | message | all)

用戶(hù),查詢(xún)消息隊(duì)列

getUserNotify(get announce | remind | message | all)

用戶(hù)閱讀消息

read

在本文的「下篇」我們來(lái)探討一下:模型怎么做、數(shù)據(jù)庫(kù)怎么設(shè)計(jì)、代碼結(jié)構(gòu)怎么來(lái)、一些邏輯上的時(shí)序圖應(yīng)該是怎么樣的。

---------------------- 更新于 2015/11/15 -----------------------

關(guān)聯(lián)文章:消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「下篇」

如果本文對(duì)您有用
請(qǐng)不要吝嗇你們的Follow與Start
這會(huì)大大支持我們繼續(xù)創(chuàng)作

「Github」
MZMonster :@MZMonster
JC_Huang :@JerryC8080

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78925.html

相關(guān)文章

  • Android通知欄介紹適配總結(jié)(上篇

    摘要:修改記錄版本的通知欄消息功能上并未發(fā)生變化,右上角的縮減為了。增加了,允許可穿戴設(shè)備遠(yuǎn)程控制通知欄消息。鎖屏狀態(tài)下,可以控制通知欄消息的隱私程度。但是谷歌規(guī)定,自定義布局展示的通知欄消息最大高度是。具體適配不正常的機(jī)型有。 此文已由作者黎星授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪(fǎng)問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 由于歷史原因,Android在發(fā)布之初對(duì)通知欄Notification的設(shè)...

    fai1017 評(píng)論0 收藏0
  • 消息推送異常重發(fā)需要注意的點(diǎn)(上篇

    摘要:無(wú)證連接進(jìn)行異常記錄并關(guān)閉連接。離線(xiàn)消息檢測(cè)到上線(xiàn)立即推送這是消息推送需要實(shí)現(xiàn)的基本功能之一了,詳見(jiàn)代碼。主要功能協(xié)助進(jìn)行初始化,心跳包檢測(cè),斷線(xiàn)自動(dòng)重連消息推送的第二種方式在下篇中再編寫(xiě) 消息重發(fā)中需要注意的問(wèn)題 由于最近工作中接觸了比較多關(guān)閉消息推送以及異常重發(fā)機(jī)制的問(wèn)題,終于得空總結(jié)一下經(jīng)驗(yàn) 目前接觸的消息推送分為兩種 主動(dòng)推送:一般為websocket建立長(zhǎng)連接實(shí)現(xiàn),此處網(wǎng)上...

    terro 評(píng)論0 收藏0
  • 消息系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)「下篇」

    摘要:比如消息小明喜歡了文章則文章指明所屬類(lèi)型是文章小明當(dāng)然,還支持存儲(chǔ)公告和信息。如小明關(guān)注了產(chǎn)品的評(píng)論,數(shù)據(jù)表現(xiàn)為產(chǎn)品的小明的這樣,產(chǎn)品下產(chǎn)生的每一條評(píng)論,都會(huì)產(chǎn)生通知給小明了。 原文鏈接:BlueSun | 消息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)「上篇」 模型設(shè)計(jì) Notify id : {type: integer, primaryKey: true}, // 主鍵 ...

    simon_chen 評(píng)論0 收藏0
  • 架構(gòu) - 收藏集 - 掘金

    摘要:淺談秒殺系統(tǒng)架構(gòu)設(shè)計(jì)后端掘金秒殺是電子商務(wù)網(wǎng)站常見(jiàn)的一種營(yíng)銷(xiāo)手段。這兩個(gè)項(xiàng)目白話(huà)網(wǎng)站架構(gòu)演進(jìn)后端掘金這是白話(huà)系列的文章。 淺談秒殺系統(tǒng)架構(gòu)設(shè)計(jì) - 后端 - 掘金秒殺是電子商務(wù)網(wǎng)站常見(jiàn)的一種營(yíng)銷(xiāo)手段。 不要整個(gè)系統(tǒng)宕機(jī)。 即使系統(tǒng)故障,也不要將錯(cuò)誤數(shù)據(jù)展示出來(lái)。 盡量保持公平公正。 實(shí)現(xiàn)效果 秒殺開(kāi)始前,搶購(gòu)按鈕為活動(dòng)未開(kāi)始。 秒殺開(kāi)始時(shí),搶購(gòu)按鈕可以點(diǎn)擊下單。 秒殺結(jié)束后,按鈕按鈕變...

    Riddler 評(píng)論0 收藏0
  • 架構(gòu)~微服務(wù) - 收藏集 - 掘金

    摘要:它就是史上最簡(jiǎn)單的教程第三篇服務(wù)消費(fèi)者后端掘金上一篇文章,講述了通過(guò)去消費(fèi)服務(wù),這篇文章主要講述通過(guò)去消費(fèi)服務(wù)。概覽和架構(gòu)設(shè)計(jì)掘金技術(shù)征文后端掘金是基于的一整套實(shí)現(xiàn)微服務(wù)的框架。 Spring Boot 配置文件 – 在坑中實(shí)踐 - 后端 - 掘金作者:泥瓦匠鏈接:Spring Boot 配置文件 – 在坑中實(shí)踐版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處本文提綱一、自動(dòng)配置二、自定義屬性三、ran...

    church 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<