基于間隔推送全量更新數據狀態的設計方法

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

假如有個直播間,在數據有更新的時候,能及時反映在客戶端上。通信方式來說,有兩種:

1、拉取模式。

2、推送+拉取模式(或者純推送)

?

拉取模式,技術簡單。但輪詢間隔設置比較難;如果設置得太大,數據更新不及時;如果設置得太小,那么服務端可能會多余很多無用請求(數據本來并無更新)。

推送模式,可以在數據有更新的情況下,才選擇通知客戶端。但如果在同一秒內,數據更新得太頻繁,可能會造成推送風暴。

這時候做一個簡單優化,如果距離上一次推送不超過一秒,當前數據更新不推送。那么也會有個問題,最后更新的數據,可能在很長一段時間內都更新不到客戶端。

下面介紹一個設計方法,如下是一個時間軸:

0? ? 0.2? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ?1.3? ? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4

|------------------------|------------------------|------------------------|------------------------|

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0? ? 0.2? ? ? ? ? ? ? ? ? ? ? ? ?1? ? ? 1.3? ? ? ? ? ? ?

采用ThreadPoolExecutor來處理時間軸上面0/0.2/1/1.3的請求Task,而BlockingQueue則采用DelayedQueue來實現,進入線程池的任務的Task都實現Delayd接口并且設置延遲1秒。

public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize,  long keepAliveTime,  TimeUnit unit,  BlockingQueue<Runnable> workQueue,  ThreadFactory threadFactory,  RejectedExecutionHandler handler)

那么Task真正執行的時間點就如時間軸下面的數字。而由于設置了規則,距離上次推送間隔小于1秒的時候,不再繼續推送。所以 紅色的數字 0 和 1 表示會執行推送,而 藍色的數字 0.2 和 1.3 就不會推送。那么反饋到客戶端層面,當?紅色的數字 0 執行推送,會把當時 綠色的0/0.2/1狀態推送給客戶端(因為是全量更新,所以只需要查詢當前最新數據);而當 紅色的數字 1 執行推送,會把當時 綠色的1.3狀態推送給客戶端。那么這個過程中,最晚的更新數據也不會超過1秒的延遲到達客戶端。同時,只發生了兩次推送。

上面的任務執行過程中,涉及到上一次推送的時間變量的比較。那么這個時間變量存儲在哪里呢?

簡單的單進程,當然是在進程內定義一個變量就完事了。

假如是多進程,那么為了最大化優化性能邏輯,我們可以分別設置本地變量緩存以及全局的redis變量緩存。方法有很多,下面只介紹一種同步方式:

當進程內的任務執行,先對比本地變量;如果系統時間減去本地變量小于一秒,那么不繼續執行任務;如果系統時間減去本地變量大于一秒,那么通過redis的get獲取到上一次推送的時間戳;如果系統時間減去該全局時間戳小于一秒,那么不繼續執行任務并更新本地緩存,如果系統時間減去該全局時間戳大于一秒,通過redis的getset(value是系統時間)返回的全局時間戳,這時的時間戳如果還大于1秒那么就推送并且更新本地緩存為當前系統時間,否則不繼續執行(其它進程執行了推送)。

?

轉載于:https://my.oschina.net/u/223522/blog/1560038

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279949.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279949.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279949.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis 哈希(Hash)

哈希hash又稱為散列、雜湊等&#xff0c;是將任意長度的輸入通過散列算法變換為固定長度的輸出&#xff0c;最終輸出也就是哈希值。這種轉換是一種壓縮映射。也就是說&#xff0c;散列值的空間通常要遠小于輸入控件&#xff0c;不同的輸入可能會散列成相同的輸出&#xff0c;所…

京東Vue組件庫NutUI 2.0發布:將支持跨平臺!

NutUI 是一套來自京東用戶體驗設計部&#xff08;JDC&#xff09;前端開發部的移動端 Vue 組件庫&#xff0c;NutUI 1.0 版本于 2018 年發布。據不完全統計&#xff0c;目前在京東至少有30多個 web 項目正在使用 NutUI。 經過一段時間緊鑼密鼓的開發&#xff0c;近期&#xff0…

macbook 下載時睡眠_MacBook進入睡眠狀態時如何自動使其靜音

macbook 下載時睡眠You open your MacBook to take notes in class or during a meeting, and your music starts playing. Loudly. Not only did you disrupt everyone, you also revealed your passion for 90’s boy bands to a room full of people who once respected you…

Mac 的mysql5.7沒有配置文件,如何解決only_full_group_by 問題

數據庫版本是5.7.19&#xff0c;在寫語句的時候&#xff0c;只要涉及ORDER BY,就會報錯&#xff0c; ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column postscan.verifyDelayLog.auditor which is not function…

Spring MVC 入門(一)

什么是 Spring MVC 學習某一樣東西之前&#xff0c;我們一定要大致知道這個東西是什么&#xff0c;能干什么&#xff0c;為什么要用它。 Spring MVC 是一個開源平臺&#xff0c;一個基于 Spring 的 MVC 框架&#xff0c;它支持基于 Java 開發 Web 應用程序。MVC 架構很利于開發…

開源網關 Apache APISIX 認證鑒權精細化實戰講解

關注公眾號并添加到“星標?”&#xff0c;防止錯過消息后臺回復【資料包】獲取學習資料GitOps 新手入門到專家進階實戰詳細教程作者錢勇&#xff0c;API7.ai 開發工程師&#xff0c;Apache APISIX Committer在當下云原生越發成熟的環境下&#xff0c;API 網關最核心的功能可以…

python應用POP3、IMAP、SMTP 協議,獲取郵箱驗證碼

&#xff30;&#xff2f;&#xff30;&#xff13;和&#xff29;&#xff2d;&#xff21;&#xff30;是郵件相關的協議&#xff0c;&#xff29;&#xff2d;&#xff21;&#xff30;是比&#xff30;&#xff2f;&#xff30;&#xff13;更高級一點的協議&#xff0c;實…

固件中啟用的虛擬化否_哪些固件或硬件機制可啟用強制關機?

固件中啟用的虛擬化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

簡述閉包

閉包 這是我對閉包的一點小理解.有問題請直接指出,在此先謝過! 閉包的含義 封閉隔離的空間,在javascript中,只有函數能夠符合這種特性; 為什么要用閉包呢? 因為在引用外部js文件(如jquery,各種框架)時防止變量重名造成的問題,同時也使代碼更具隱私性; 獲取閉包中數據的方法: …

Confluence 6 配置服務器基礎地址備注

使用不同 URL。如果你配置了不同的基礎 URL 地址或者你站點的訪問者使用了不同的 URL 地址來訪問你的 Confluence 地址&#xff0c;你有很大概率可能會受到錯誤信息。修改上下文地址。如果你修改了基礎 URL 地址的上下文地址&#xff0c;你同時也需要修改下面的配置&#xff1a…

2019第10周知識總結

react 事件綁定 函數寫法 文檔總結 https://react.docschina.org/docs/handling-events.html 1 通過 constroucor綁定 class Toggle extends React.Component {constructor(props) {super(props);this.state {isToggleOn: true};// This binding is necessary to make this wo…

.NET 云原生架構師訓練營(基于 OP Storming 和 Actor 的大型分布式架構二)--學習筆記...

▲ 點擊上方“DotNet NB”關注公眾號回復“1”獲取開發者路線圖學習分享 丨作者 / 鄭 子 銘 這是DotNet NB 公眾號的第202篇原創文章目錄為什么我們用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念結合 OP Storming 的實踐結合 OP Storming 的實踐業務模型設計模型代…

PHP 多維數組轉json對象

PHP 多維數組轉json對象 php 數組轉json對象&#xff0c;可能大家都知道要用json_encode,但是轉換出來的格式多有不同&#xff0c;此處做個小小的記錄&#xff01; 1. 一維數組轉json對象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微軟文本檢索_如何在Microsoft Word中引用其他文檔中的文本

微軟文本檢索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…

Hadoop-Flume-類比吸塵器圖解

2019獨角獸企業重金招聘Python工程師標準>>> 這是我自己理解Hadoop-Flume的方式 轉載于:https://my.oschina.net/u/3697442/blog/1560613

BZOJ4327:[JSOI2012]玄武密碼(SAM)

Description 在美麗的玄武湖畔&#xff0c;雞鳴寺邊&#xff0c;雞籠山前&#xff0c;有一塊富饒而秀美的土地&#xff0c;人們喚作進香河。相傳一日&#xff0c;一縷紫氣從天而至&#xff0c;只一瞬間便消失在了進香河中。老人們說&#xff0c;這是玄武神靈將天書藏匿在此。 很…

ChatGPT 之后,再玩玩 Stable-Diffusion

前些天體驗的 ChatGPT 主要用來進行文本方面的處理&#xff0c;那么圖片生成有沒有這樣的 AI 工具 呢&#xff1f;答案是肯定的。例如&#xff1a;和菜頭公眾號的題圖和文章中的插圖大多都是使用 Stable-Diffusion 的 AI 圖形生成工具創作的。順著 Stable-Diffusion 搜索了下相…

滲透測試入門DVWA 教程1:環境搭建

首先歡迎新萌入坑。哈哈。你可能抱著好奇心或者疑問。DVWA 是個啥&#xff1f; DVWA是一款滲透測試的演練系統&#xff0c;在圈子里是很出名的。如果你需要入門&#xff0c;并且找不到合適的靶機&#xff0c;那我就推薦你用DVWA。 我們通常將演練系統稱為靶機&#xff0c;下面請…

指派問題(匈牙利算法)

問題描述&#xff1a; 在生活中經常遇到這樣的問題&#xff0c;某單位需完成n項任務&#xff0c;恰好有n個人可承擔這些任務。由于每人的專長不同&#xff0c;各人完成任務不同(或所費時間)&#xff0c;效率也不同。于是產生應指派哪個人去完成哪項任務&#xff0c;使完成n項任…

移動硬盤改臺式機硬盤_如何在臺式機或移動設備上離線使用Google云端硬盤

移動硬盤改臺式機硬盤If there’s any drawback to using cloud-based services for all your productivity and organization needs, it’s that if you can’t get an Internet connection, you’re basically out of luck. 如果使用基于云的服務來滿足您的所有生產力和組織需…