自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊多平臺消息推送服務(wù)的實(shí)踐

開發(fā) 前端
本文概述了信鴿服務(wù),它已經(jīng)成為新媒體業(yè)務(wù)體系中的核心組件,承擔(dān)著消息發(fā)送的統(tǒng)一服務(wù)職責(zé)。信鴿服務(wù)的核心目標(biāo)是實(shí)現(xiàn)消息的集中管理和高效傳遞。

1 背景

隨著各項(xiàng)業(yè)務(wù)線上化,觸達(dá)用戶的方式日益重要,而即時通訊服務(wù)成為了至關(guān)重要的溝通媒介。諸如企業(yè)微信和飛書等消息通知工具已經(jīng)成為我們與用戶互動的首選方式。隨著通知需求的不斷增加,我們的消息通知代碼也在各個服務(wù)中逐漸累積,然而,這也伴隨著一系列問題的出現(xiàn)。

圖片圖片

1.1 強(qiáng)耦合的消息和業(yè)務(wù)代碼

消息發(fā)送和業(yè)務(wù)流程代碼緊密相連,導(dǎo)致消息發(fā)送問題直接影響業(yè)務(wù)流程。例如,我們的部分流程依賴于用戶對發(fā)送的消息進(jìn)行審批,只有審批完成后,才能進(jìn)入下一流程節(jié)點(diǎn)。這種設(shè)計(jì)使得消息系統(tǒng)的任何故障都可能直接影響整個業(yè)務(wù)流程的運(yùn)行。

1.2 服務(wù)間代碼重復(fù),維護(hù)困難

不同服務(wù)均需消息發(fā)送功能,導(dǎo)致多個服務(wù)中存在重復(fù)的消息發(fā)送工具類。這不僅增加了代碼的重復(fù)性,也使得對消息發(fā)送功能的更新和迭代變得復(fù)雜。當(dāng)需要更新消息發(fā)送功能時,必須在各個服務(wù)中分別進(jìn)行修改,增加了維護(hù)的難度和出錯的可能性。

1.3 消息發(fā)送的偶發(fā)丟失問題

目前的架構(gòu)中,大量消息通過多個服務(wù)的工具類直接調(diào)用各消息平臺的HTTPS接口發(fā)送。這種設(shè)計(jì)在生產(chǎn)環(huán)境中導(dǎo)致了消息偶發(fā)性的丟失——消息雖然發(fā)送,但用戶未收到。由于代碼分散,排查此類問題非常困難,我們只能依賴于發(fā)送時的日志進(jìn)行追蹤,這大大增加了問題診斷的復(fù)雜性。

2 現(xiàn)狀和痛點(diǎn)

在我們實(shí)際業(yè)務(wù)中,多個服務(wù)常常需要向用戶發(fā)送不同形式的消息,包括但不限于企業(yè)微信、飛書、短信、郵件、微信通知和手機(jī)應(yīng)用通知等。如果每個服務(wù)都獨(dú)立開發(fā)一套消息發(fā)送代碼,這將導(dǎo)致維護(hù)難度大、錯誤率高,效率極低。為解決這一問題,我們開發(fā)了“信鴿平臺”,這是一個集中式的消息服務(wù)平臺,為其他服務(wù)提供統(tǒng)一的消息發(fā)送解決方案。與公司內(nèi)的其他中臺服務(wù)類似,信鴿服務(wù)的主要目標(biāo)是實(shí)現(xiàn)業(yè)務(wù)消息的優(yōu)雅傳遞。該服務(wù)專注于消息的全周期管理,確保消息發(fā)送的穩(wěn)定性,并提供業(yè)務(wù)分析功能,以更高效、可靠的方式處理各種業(yè)務(wù)通知需求。

圖片圖片

3 設(shè)計(jì)和實(shí)現(xiàn)

為了讓信鴿服務(wù)的接口能被使用的更方便,信鴿服務(wù)內(nèi)部需要完成多個步驟

  • 消息服務(wù)接口鑒權(quán)
  • 模版加載處理
  • 消息前置校驗(yàn)
  • 多消息通道頻控兼容
  • 消息重試處理
  • 消息生命周期監(jiān)控

圖片圖片

3.1 消息解耦的三元素

結(jié)合實(shí)際的業(yè)務(wù)場景,我們把消息拆分出了三個元素:場景、機(jī)器人、模版

圖片圖片

  • 場景:當(dāng)前發(fā)送的消息的業(yè)務(wù)場景
  • 機(jī)器人:發(fā)送當(dāng)前的機(jī)器人/應(yīng)用
  • 模版:當(dāng)前消息模版

通過以上三元素的簡單配置,來達(dá)到我們信鴿消息對象的完整配置

圖片圖片

3.2 生命周期

不同平臺的消息,在信鴿中都擁有著統(tǒng)一生命周期:

  • 初始化
  • 發(fā)送中
  • 消息發(fā)送成功
  • 消息重試中
  • 消息發(fā)送失敗

在實(shí)際生產(chǎn)環(huán)境中,若由于某種因素需要查看消息的狀態(tài),可根據(jù)消息唯一號,判斷消息的狀態(tài)。

圖片圖片

3.3 限流

3.31 對外部平臺頻控策略的適配

當(dāng)我們的消息發(fā)送頻率超出各平臺的限制時,會導(dǎo)致消息發(fā)送失敗并被丟棄。這對于那些依賴于消息傳達(dá)的關(guān)鍵場景來說,可能造成嚴(yán)重的影響。此外,先前提及的消息偶發(fā)丟失問題,大多也是由于這些外部平臺的頻率控制導(dǎo)致的。

飛書限流規(guī)則:

  • 所有接口每個應(yīng)用最高請求頻率 50次/秒
  • 發(fā)送消息接口每個應(yīng)用最高頻率是1000次/分鐘
  • 群聊機(jī)器人Webhook最高頻率是100次/分鐘
  • 機(jī)器人給同一用戶或同一群發(fā)的最高頻率是5次/秒

企微限流規(guī)則:

  • 每個機(jī)器人發(fā)送的消息不能超過20條/分鐘

對每個機(jī)器人/應(yīng)用作對外適配的頻率限制:

因此,信鴿平臺采用了簡易的分布式限流算法,并結(jié)合模板方法和策略模式,實(shí)現(xiàn)了兩種限流機(jī)制:計(jì)數(shù)器算法和令牌桶算法。通過自定義注解,我們可以在項(xiàng)目中靈活地切換限流配置,從而有效適應(yīng)不同平臺的頻率控制策略。這樣的設(shè)計(jì)不僅提高了系統(tǒng)的適應(yīng)性,也確保了消息傳遞的穩(wěn)定性和效率。

圖片圖片

限流后帶來的堆積排隊(duì)問題

在企業(yè)微信應(yīng)用中設(shè)定了每分鐘最多向每個用戶發(fā)送30條消息的限制。假設(shè)在某一時刻,場景A產(chǎn)生了210條消息,那么按照這個發(fā)送頻率,至少需要7分鐘才能完成所有消息的發(fā)送。此外,如果在這個過程中,場景B產(chǎn)生了一條消息,這條消息將不得不等待場景A的所有消息發(fā)送完畢后才能被發(fā)送。這樣的處理機(jī)制可能導(dǎo)致消息傳遞的延遲,特別是在高峰時段或多場景并發(fā)時。

圖片圖片

所以我們進(jìn)行了改造:基于場景分區(qū),消費(fèi)者會根據(jù)分區(qū)輪詢消費(fèi)。而不是等待A隊(duì)列消費(fèi)完成后再消費(fèi)B隊(duì)列。這樣有效降低了同一機(jī)器人下的限流堆積問題。當(dāng)然,如果有更大體量的消息,還是建議使用多個機(jī)器人來提高消費(fèi)的速率。

圖片圖片

3.32 信鴿接口的限流

考慮到服務(wù)是通過SCF層進(jìn)行接入的,我們可以利用SCF提供的配置來實(shí)現(xiàn)接口限流。這意味著,通過簡單地配置SCF接口,我們就能輕松實(shí)現(xiàn)上線接口的限流功能。這種方法簡化了限流的實(shí)現(xiàn)過程,確保服務(wù)在高并發(fā)情況下的穩(wěn)定運(yùn)行,同時降低了系統(tǒng)復(fù)雜性和維護(hù)成本

圖片圖片

3.4 消息模版

為了方便各服務(wù)快速發(fā)送基本消息,信鴿平臺提供了一套消息模板。這些模板旨在簡化消息發(fā)送流程,用戶只需填充必要的參數(shù)并進(jìn)行接口調(diào)用,即可輕松發(fā)送一條消息。這種設(shè)計(jì)極大地提高了消息發(fā)送的效率,同時降低了服務(wù)集成的復(fù)雜性。下面提供的是一個用于飛書消息發(fā)送的模板示例,展示了如何便捷地使用這些模板發(fā)送消息。

圖片圖片

4 總結(jié)

本文概述了信鴿服務(wù),它已經(jīng)成為新媒體業(yè)務(wù)體系中的核心組件,承擔(dān)著消息發(fā)送的統(tǒng)一服務(wù)職責(zé)。信鴿服務(wù)的核心目標(biāo)是實(shí)現(xiàn)消息的集中管理和高效傳遞。展望未來,我們計(jì)劃進(jìn)一步增強(qiáng)信鴿服務(wù)的功能,包括事務(wù)消息處理、消息的優(yōu)先級排序,以及夜間消息發(fā)送的屏蔽控制。這些改進(jìn)將使信鴿服務(wù)更加全面和強(qiáng)大,更好地服務(wù)于業(yè)務(wù)需求。

關(guān)于作者

吳冰寒,現(xiàn)任轉(zhuǎn)轉(zhuǎn)乾數(shù)據(jù)技術(shù)部后端研發(fā)工程師。

責(zé)任編輯:武曉燕 來源: 轉(zhuǎn)轉(zhuǎn)技術(shù)
相關(guān)推薦

2024-08-18 14:09:24

2024-07-05 09:24:11

2023-12-06 21:44:28

RocksDBvivo

2022-05-09 08:34:01

FeignhttpJava

2017-05-09 09:26:48

微服務(wù)消息推送

2023-07-19 22:13:25

一體化推送平臺

2023-11-06 08:26:11

Spring微服務(wù)架構(gòu)

2019-01-10 10:20:00

消息推送平臺APP后端

2009-07-23 10:25:39

WCF的Duplex服

2022-01-10 08:17:40

異地設(shè)計(jì)實(shí)踐

2023-01-27 19:33:10

消息中心管理平臺

2023-04-28 08:06:04

低代碼AI智能

2013-04-10 18:48:56

微信公眾平臺技巧

2010-08-05 09:36:03

NFS服務(wù)

2023-09-11 08:50:03

Maven工具關(guān)系管理

2020-05-14 18:04:20

Spring BootSaaS平臺

2023-12-18 08:36:39

消息隊(duì)列微服務(wù)開發(fā)

2025-01-02 09:23:05

2020-10-24 17:28:04

DockerKafka服務(wù)分布式

2020-10-16 08:57:51

云平臺之多租戶的實(shí)踐
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號