系統訊息的一種傳送方式

2022-07-16 09:48:09 字數 804 閱讀 9055

最近一次,有個需求,需要給3kw的使用者發系統訊息,按照以往的設計是這樣的:

後台輸入系統訊息--->從使用者系統得到使用者的id--->根據使用者id給每個使用者生成乙個儲存訊息的key,進行訊息儲存,更新使用者的未讀訊息數--->使用者登入系統,看到未讀訊息數,點選進入閱讀頁面--->讀取系統訊息,更新未讀訊息數為0

這個方案在使用者數非常少的情況下面是完全ok的,但是在使用者數很大的時候,出現了以下問題:

1.系統訊息對於每個使用者是一樣的,即使有可能有一些差別,但是通過使用者系統的資料可以組裝出不一致的訊息,這樣的話,如果儲存乙份資料用的儲存大大小於儲存3kw資料使用者的儲存

2.給每個使用者儲存訊息是個漫長的過程,假設底層儲存系統tps為1000條/秒,3kw需要3kw/1000*2=60000秒,也就是大約16.5個小時(訊息實體和未讀訊息數都要儲存),這個時間在某種需求下是不能夠接受的,這樣也將導致使用者接受到的系統訊息的時間是有差別的。

於是,我們進行了改造,順著解決上面兩點問題的思路,進行如下解決:

1.系統訊息儲存乙份,這樣儲存消耗的容量和時間沒有問題了

2.未讀訊息數和系統訊息一樣,也儲存乙份

3.當使用者登入時,此次未讀訊息最多需要二次查詢,一是查詢有無系統訊息,如果有,繼續查詢為每個使用者儲存的已讀訊息記錄,這個使用者此前沒有讀過系統訊息的話記錄是為空的,如果讀過的話這個記錄就是上次讀過的訊息記錄,系統訊息去除已讀訊息就是這個使用者的未讀訊息。

4.當使用者閱讀未讀訊息時,儲存這條訊息為已讀訊息記錄。

改進後的好處是儲存系統訊息的容量小和時間短,使用者讀取訊息的時間是一致的,根據二八原則,20%的活躍使用者的已讀訊息記錄也比原來的訊息儲存小得多。

同步方式的訊息傳送和非同步方式的訊息傳送

通訊有兩類不同的基本方式 具有依時性的同步方式以及與時間無關的非同步方式。訊息傳送中介軟體有許多不同型別,它們分別都能夠支援一類基本方式的訊息通訊,有時可以支援兩類方式。根據定義,同步執行的特徵為 在兩個通訊應用系統之間必須要進行同步,兩個系統必須都在正常執行,並且會中斷客戶端的執行流,轉而執行呼叫...

同步方式的訊息傳送和非同步方式的訊息傳送

通訊有兩類不同的基本方式 具有依時性的同步方式以及與時間無關的非同步方式。訊息傳送中介軟體有許多不同型別,它們分別都能夠支援一類基本方式的訊息通訊,有時可以支援兩類方式。根據定義,同步執行的特徵為 在兩個通訊應用系統之間必須要進行同步,兩個系統必須都在正常執行,並且會中斷客戶端的執行流,轉而執行呼叫...

一種開源的分布式訊息系統Nats

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!與activemq kafka kestrel nsq rabbitmq redis在broker吞吐量方面的比較 nats伺服器 用golang語言開發,發行版包括二進位制發布包和docker映象。nats客戶端 包含了多種語言的客戶端。官方提供...