B站播放數量如何實現,高并發讀寫計數難點

我們先不考慮用戶規模、并發量、性能、可靠性… 這些東西
我們就單單從功能層面實現統計視頻播放量,其實很簡單, 就是給視頻表加一個字段,用來表示播放量
這樣實現,最大的好處就是簡單,但是我們馬上就能發現一個非常嚴重的問題,
每當有用戶觀看一次的時候,這個數字就加一
這里又引申出一個風控的問題,就是如果不加以控制的話,同一個用戶就可以瘋狂的刷新點擊,
那么這個播放量就會被惡意刷高了,所以肯定要做風控的

考慮并發量、性能的解決方案:
拋開上面說的風控模型,單純從技術上這個播放量如何實現?
1、首先性能必須要好
2、盡量去保證一個高可用,你這個計數服務理論上是可以掛掉的,都是要有一個兜底值、默認值
3、不要求這個數字的絕對準確性,這個很重要,直接關系到我們后面整個系統的實現復雜度
4、對于這個數字的實時性要求不高,可能達到分鐘級它能達到一個最終一致性,就夠了

這個計數服務是非常通用的,所以我們可以單獨抽象出來一個計數服務,
按照大廠的規模,高并發的場景,這個計數服務肯定是要集群部署的
這樣就可以讓這個服務能夠單獨去熔斷、限流、降級,服務治理,擴容縮容彈性都會好很多

先在本地內存使用 map concurrenthashmap 把大量的寫請求緩存起來,
key 是 視頻 id,value 是 增量的播放數

使用定時任務周期性的將本地內存中的數據刷新到 Redis 中去,
這本身是一個異步化的實際,
然后刷新到 Redis 之后,再通過一個定時任務將 Redis 中的數據持久化到 MySQL 中

這么做了之后呢,db 的壓力可以做的非常低
再具體一點說,讀壓力,讀取視頻的播放量,可以直接從 Redis 緩存中讀取,甚至可以考慮給 kv 不設置過期時間,這樣這不會有緩存擊穿、穿透的問題了
寫壓力,更新視頻的播放量,使用異步 + 批量合并的思想,先將大量的更新寫請求在本地內存中合并起來,然后在周期性的去寫庫,大大降低了數據庫的壓力

再來講一下極端的場景
1、我寫了本地內存,這個機器宕機了,怎么辦?
2、數據寫入 Redis,Redis 掛了,怎么辦?
3、xxx

我們假設一下這些極端場景發生了,那么結果也無非有一些計數沒有計算上去,丟失了。
這對業務影響很大嗎?并沒有對吧。

關于數據的實時性,就看定時任務的周期、產品提的需求、視頻的熱度、節點的可靠性

所以我認為這么實現,是一個成本比較低、又能滿足業務需求的一個解決方案

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

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

相關文章

Vue 組件之間的通信

在 Vue.js 中,組件是構建應用程序的基本單位。然而,當你的應用程序變得復雜時,組件之間的通信變得至關重要。本文將介紹幾種 Vue 組件之間通信的方式,幫助你更好地管理和組織代碼。 父子組件通信 父組件可以通過 props 向子組件傳…

離線下載安裝TTS的步驟

要離線下載安裝 TTS 模塊,需要先在有網絡的環境下下載所有所需的依賴項,然后將這些文件轉移到目標環境中進行安裝。以下是具體步驟: 步驟 1:在有網絡的環境下下載依賴項 創建一個目錄來存放下載的包: mkdir TTS_deps下…

在線標注流程

文章目錄 在線標注流程標注方法 在線標注流程 登錄地址:http://7a27c5e078f644a2a9b734603913c65e.login.bce.baidu.com 出現頁面: 登錄名: 三個中任意一個 密碼:ZNSJ123a 登錄之后叉掉。再打開這個網站:https://…

【ZYNQ】CPU 私有定時器

Zynq 的每個 Cortex-A9 處理器都有自己的專用 32 位定時器和 32 位看門狗定時器,兩個處理器共享一個全局 64 位定時器,這些計時器的時鐘頻率始終為 CPU 頻率的 1/2。本文主要介紹 Zynq 芯片 CPU 私有定時器的工作特性,以及私有定時器的基本使…

selenium中,如何使用選擇框

html5 一個多選下拉框&#xff0c;沒有默認選 一個單選下拉狂&#xff0c;默認“張桐桐” <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>選擇框</title> </head> <body><l…

我是大學生,應該選系統運維方向,還是web開發方向?

選擇系統運維方向還是Web開發方向取決于你的興趣、職業目標和個人技能。以下是對這兩個方向的詳細對比和建議&#xff0c;幫助你做出更明智的選擇 雙方比較 &#x1f926;?♀?系統運維方向 優點&#xff1a; 穩定性&#xff1a;系統運維工作通常比較穩定&#xff0c;許多…

【Power Compiler手冊】5.Verilog翻轉活動示例

Verilog切換活動示例 以下示例展示了使用Verilog進行RTL(寄存器傳輸級)和門級描述時生成的切換活動數據。 RTL示例 這個Verilog RTL示例包括以下內容: RTL設計描述:定義了電路的功能和行為,但不涉及具體的門級實現細節。RTL測試臺(testbench):用于仿真和測試RTL設計…

【問題復盤】第三方接口變慢導致服務崩潰

一、事件經過 -1、一個不在公司的下午&#xff0c;接到客戶投訴&#xff0c;說平臺不能訪問了。 0、介入調查&#xff0c;發現服務器http請求無法訪問&#xff0c;https請求卻可以正常訪問&#xff0c;一時有些無法理解&#xff1b;&#xff08;后來發現&#xff0c;http和htt…

在gateway網關中使用feign遠程調用

由于 gateway 采用 spring-boot-starter-webflux 異步的 web 組件&#xff0c;該組件和 spring-boot-starter-web 有較大區別&#xff0c;我們的 openFeign 對 spring-boot-starter-web 比較契合&#xff0c;而對于 前者則需要做一些適配。 編寫如下配置類 SpringBootConfigur…

網絡編程(八)

網絡編程&#xff08;八&#xff09; 數據庫數據庫的分類基于嵌入式的數據庫什么是SQLite?為什么使用SQLite?sqlite3數據庫的安裝 sqlite3中的點命令.open 數據庫文件名字.tables [數據庫文件名].schema 表名.database.quit.head on.mode column SQLite數據庫中的數據類型SQL…

《混凝土壩安全監測資料整編規程》的深入解讀與實際應用

在水利工程中&#xff0c;混凝土壩作為重要的建筑物&#xff0c;其安全監測工作至關重要。為了確保監測工作的準確性和有效性&#xff0c;制定一套規范的混凝土壩安全監測資料整編規程顯得尤為重要。本文將對《混凝土壩安全監測資料整編規程》進行深入解讀&#xff0c;并探討其…

泛型基礎及深入

泛型深入 泛型定義&#xff1a; JDK5引入的特性&#xff0c;可以在編譯階段約束操作的數據類型&#xff0c;并進行檢查 泛型格式&#xff1a; <數據類型> 注意&#xff1a;泛型只能支持引用數據類型 優勢&#xff1a; 統一數據類型&#xff1b; 把運行時期的問題提前到…

Linux中 .PHONY 和 all 在 Makefile 中的作用

1 .PHONY 和 all .PHONY 是 GNU make 工具中的一個特殊指令&#xff0c;用于指示某個目標是一個偽目標。偽目標并不對應于實際的文件&#xff0c;而是用來執行一系列命令的標識符。使用 .PHONY 的好處包括避免與現有文件同名造成的沖突&#xff0c;以及提高 make 的執行效率&am…

快速排序(Quick Sort)(C語言) 超詳細解析!!!

生活的本質是什么呢? 無非就是你要什么就不給你什么. 而生活的智慧是什么呢? 是給你什么就用好什么. ---馬斯克 索引 一. 前言二. 快速排序的概念三. 快速排序的實現1. hoare2. 挖坑法3. 前后指針法 總結 正文開始 一. 前言 接上文, 前面我們了解了插入排序, 與優化版本希爾…

ROS IMU慣性測量單元消息包

ROS IMU慣性測量單元消息包 IMU工作原理與作用 IMU&#xff08;Inertial Measurement Unit&#xff0c;慣性測量單元&#xff09;是一種重要的傳感器&#xff0c;用于測量和報告一個物體的特定物理量&#xff0c;包括加速度、角速度和&#xff08;在某些情況下&#xff09;磁…

100道面試必會算法-31-字母異位詞分組

100道面試必會算法-31-字母異位詞分組 給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs ["eat", "tea", "tan"…

HQL面試題練習 —— 向用戶推薦好友喜歡的音樂

目錄 1 題目2 建表語句3 題解 題目來源&#xff1a;騰訊。 1 題目 現有三張表分別為&#xff1a; 用戶關注表 t_follow(user_id,follower_id)記錄用戶ID及其關注的人ID&#xff0c;請給用戶1 推薦他關注的用戶喜歡的音樂名稱 ------------------------ | user_id | follower…

六月可以閉眼入的寵物空氣凈化器:希喂、安德邁、霍尼韋爾真實PK

俗話說得好&#xff0c;貓咪一年到頭都在掉毛&#xff0c;仿佛它們是四季常在的"蒲公英"&#xff0c;隨時隨地都在播撒毛發。貓毛不僅遍布它們自己的身體&#xff0c;還可能飄到你的床鋪、沙發、衣物上……面對這樣的狀況&#xff0c;既要應對無處不在的貓毛&#xf…

基于卷積神經網絡(CNN)的垃圾分類模型研究

摘要&#xff1a; 隨著城市化進程的加快&#xff0c;垃圾問題日益嚴重。傳統的垃圾分類方法存在效率低下、準確率不高等問題。本文提出了一種基于卷積神經網絡&#xff08;CNN&#xff09;的垃圾分類模型&#xff0c;該模型能夠自動識別并分類不同類型的垃圾。實驗表明&#xf…

Kruskal算法求最小生成樹

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define MAX 100 #define NO INT_MAX//NO表示沒有邊&#xff0c;相當于INFtypedef struct Graph {int arcnum;int vexnum;char vextex[MAX][20];int martrix[MAX][MA…