偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

圖片圖片

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

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

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

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

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

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

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

在我們實(shí)際業(yè)務(wù)中,多個(gè)服務(wù)常常需要向用戶發(fā)送不同形式的消息,包括但不限于企業(yè)微信、飛書(shū)、短信、郵件、微信通知和手機(jī)應(yīng)用通知等。如果每個(gè)服務(wù)都獨(dú)立開(kāi)發(fā)一套消息發(fā)送代碼,這將導(dǎo)致維護(hù)難度大、錯(cuò)誤率高,效率極低。為解決這一問(wèn)題,我們開(kāi)發(fā)了“信鴿平臺(tái)”,這是一個(gè)集中式的消息服務(wù)平臺(tái),為其他服務(wù)提供統(tǒng)一的消息發(fā)送解決方案。與公司內(nèi)的其他中臺(tá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)部需要完成多個(gè)步驟

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

圖片圖片

3.1 消息解耦的三元素

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

圖片圖片

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

通過(guò)以上三元素的簡(jiǎn)單配置,來(lái)達(dá)到我們信鴿消息對(duì)象的完整配置

圖片圖片

3.2 生命周期

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

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

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

圖片圖片

3.3 限流

3.31 對(duì)外部平臺(tái)頻控策略的適配

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

飛書(shū)限流規(guī)則:

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

企微限流規(guī)則:

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

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

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

圖片圖片

限流后帶來(lái)的堆積排隊(duì)問(wèn)題

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

圖片圖片

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

圖片圖片

3.32 信鴿接口的限流

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

圖片圖片

3.4 消息模版

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

圖片圖片

4 總結(jié)

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

關(guān)于作者

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

責(zé)任編輯:武曉燕 來(lái)源: 轉(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-11-06 08:26:11

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

2023-07-19 22:13:25

一體化推送平臺(tái)

2019-01-10 10:20:00

消息推送平臺(tái)APP后端

2022-01-10 08:17:40

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

2009-07-23 10:25:39

WCF的Duplex服

2023-01-27 19:33:10

消息中心管理平臺(tái)

2023-09-11 08:50:03

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

2023-04-28 08:06:04

低代碼AI智能

2020-05-14 18:04:20

Spring BootSaaS平臺(tái)

2025-01-02 09:23:05

2010-08-05 09:36:03

NFS服務(wù)

2013-04-10 18:48:56

微信公眾平臺(tái)技巧

2023-12-18 08:36:39

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

2020-10-24 17:28:04

DockerKafka服務(wù)分布式

2020-10-16 08:57:51

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

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