国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

面對海量數據的計數器要如何做?

數據庫 其他數據庫
數據庫 + 緩存的方案是計數系統的初級階段,完全可以支撐中小訪問量和存儲量的存儲服務。如果你的項目還處在初級階段,量級還不是很大,那么你一開始可以考慮使用這種方案。

在地鐵上,你可能經常使用微博瀏覽、點贊熱門話題,甚至參與抽獎活動并轉發相關內容。這些行為涉及到微博數據統計中的各種指標,主要包括:

  • 微博的互動數據:評論數、點贊數、轉發數、瀏覽數、表態數等;
  • 用戶的社交數據:粉絲數、關注數、發布微博數、私信數等。

微博維度的計數代表了一條微博在平臺上的受歡迎程度,而用戶維度的數據,特別是粉絲數,則反映了用戶在微博社交網絡中的影響力和受關注程度。這些計數信息對于用戶和平臺都具有重要意義

但在設計計數系統時,不少人會出現性能不高、存儲成本很大的問題,比如,把計數與微博數據存儲在一起,這樣每次更新計數的時候都需要鎖住這一行記錄,降低了寫入的并發。在我看來,之所以出現這些問題,還是因為你對計數系統的設計和優化不甚了解,所以要想解決痛點,你有必要形成完備的設計方案。

計數在業務上的特點

微博系統中微博條目的數量已經超過了千億級別。僅僅計算微博的轉發、評論、點贊、瀏覽等核心計數,其數據量級已經達到了幾千億的級別。而微博條目的數量還在不斷高速增長,隨著微博業務的不斷發展,微博維度的計數種類也可能會持續擴展(比如增加了表態數)。因此,僅僅是微博維度上的計數量級就已經過了萬億級別。

此外,微博的用戶量級已經超過了 10 億,用戶維度的計數量級相比微博維度來說雖然相差很大,但也達到了百億級別。面對如此龐大的數據量,如何存儲這些過萬億級別的數字,對我們來說確實是一大挑戰。

考慮到訪問量大和性能要求高的情況,對于微博這樣擁有數億活躍用戶的社交平臺來說,計數系統需要能夠應對每秒數百萬次的訪問量,同時要求在毫秒級別內返回結果。為了達到這樣的性能要求,我們可以采取一些簡單而有效的方法,比如選擇高性能的存儲和緩存技術,優化數據庫設計和查詢,采用分布式架構,以及設置負載均衡和故障恢復機制。這樣可以保證系統在高并發情況下仍然能夠快速、穩定地處理大量請求,滿足用戶的需求

支撐高并發的計數系統要如何設計

在最初設計計數系統時,微博的流量還沒有現在這么龐大。我們遵循了KISS(Keep It Simple and Stupid)原則,選擇了使用MySQL來存儲計數數據。這是因為MySQL是我們團隊最熟悉的數據庫,我們在運維方面也有豐富的經驗。舉個具體的例子來說,我們將微博的計數數據存儲在MySQL數據庫中的單個表中,每個微博對應一行記錄,包括評論數、點贊數、轉發數等計數數據列。這樣的設計簡單易于實現和維護,符合我們當時的需求和團隊的技術水平。

以微博 ID 為主鍵,然后將轉發數、評論數、點贊數和瀏覽數等微博維度的計數數據分別存儲在單獨的列中,這樣可以方便地通過一條SQL語句來獲取特定微博的計數數據。例如:

select repost_count, comment_count, praise_count, view_count from t_weibo_count where weibo_id = ?

在數據量級和訪問量級都不大的情況下,采用以微博ID為主鍵,將轉發數、評論數、點贊數和瀏覽數等計數數據存儲在單個MySQL表中的方式是最簡單的。但隨著微博的不斷壯大,之前的計數系統面臨了諸多問題和挑戰。

隨著微博用戶數量和發布的微博數量迅速增加,計數數據量級也隨之飛速增長。當MySQL數據庫單表的存儲量級達到幾千萬時,性能會受到損耗。因此,為了解決這些問題,我們考慮采用分庫分表的方式,將數據量分散存儲,以提升讀取計數數據的性能。

我們用“weibo_id”作為分區鍵,在選擇分庫分表的方式時,考慮了下面兩種:

對于分庫分表的方式,有兩種常見的策略可以考慮。一種是根據微博ID進行哈希分庫分表,另一種是根據微博ID生成的時間來進行分庫分表。

首先,根據哈希算法對weibo_id計算哈希值,然后根據這個哈希值確定需要存儲到哪一個數據庫的哪一張表中。這種方法可以將數據均勻地分散到多個數據庫和表中,以實現負載均衡和提升讀取性能。

另一種方式是按照weibo_id生成的時間來進行分庫分表。可以利用發號器生成的ID中的時間戳信息,將微博數據按照時間戳進行分庫分表,比如每天一張表或者每月一張表等。這樣可以根據微博的發布時間快速定位到對應的數據庫和表,便于數據的管理和查詢。

因為越是最近發布的微博,計數數據的訪問量就越大,所以雖然我考慮了兩種方案,但是按照時間來分庫分表會造成數據訪問的不均勻,最后用了哈希的方式來做分庫分表。

圖片圖片

在微博最初的版本中,首頁信息流并不展示計數數據,因此使用MySQL可以承受當時的計數數據讀取訪問量。但隨著微博的發展,首頁信息流也開始展示轉發、評論和點贊等計數數據,導致信息流的訪問量急劇增加。僅僅依靠數據庫已無法滿足如此高的并發讀取需求。

為了應對這一挑戰,我們考慮使用Redis來加速讀請求。通過部署多個Redis從節點來提升可用性和性能,并通過Hash的方式對數據進行分片,以保證計數的讀取性能。然而,采用數據庫+緩存的方式存在一個嚴重的弊端:無法保證數據的一致性。例如,如果數據庫寫入成功而緩存更新失敗,就會導致數據不一致,從而影響計數的準確性。

因此,為了解決數據一致性的問題,我們最終決定完全拋棄MySQL,全面采用Redis作為計數的存儲組件。Redis的高性能和內存存儲特性使其能夠輕松應對高并發的讀取請求,并且通過持久化機制和主從復制,可以保證數據的持久性和可用性,同時也降低了數據不一致的風險。

圖片圖片

針對熱門微博高頻寫入的情況,可以考慮以下簡單的方法來降低寫入壓力:

  • 異步處理: 將計數寫入操作異步化,先將操作記錄在消息隊列中,再由后臺任務異步處理寫入計數數據,減輕數據庫的寫入壓力。
  • 計數緩存: 使用緩存暫時存儲計數數據,減少對數據庫的直接寫入請求,提高寫入性能。
  • 合并寫入: 將相同微博的計數操作合并,減少數據庫的寫入次數,如多個用戶同時轉發同一條微博時,將轉發操作合并為一次寫入計數數據的操作。
  • 分片存儲: 根據微博ID進行分片存儲,將數據分散到不同存儲節點上,分散寫入壓力。
  • 寫入限流: 實行寫入限流策略,限制每個用戶或微博的寫入頻率,防止寫入請求過載數據庫。

圖片圖片

如何降低計數系統的存儲成本

在微博這樣的場景下,我們面臨著處理萬億級別計數數據的挑戰。對于這種規模的數據存儲,我們需要在有限的成本下實現全量計數數據的存取。Redis作為內存存儲系統,相較于使用磁盤存儲的MySQL,存儲成本差異巨大。舉例來說,一臺服務器可以掛載2TB的磁盤,但內存可能只有128GB,這意味著磁盤存儲空間是內存的16倍。

Redis因其通用性而對內存的使用較為粗放,存在大量指針和額外數據結構開銷。比如,若要存儲一個KV類型的計數信息,鍵(Key)是8字節的長整型weibo_id,值(Value)是4字節整型的轉發數,在Redis中將會占用超過70個字節的空間,這造成了空間的巨大浪費。

在面對這一問題時,如何優化存儲空間呢?

我建議對原生Redis進行改造,采用新的數據結構和數據類型來存儲計數數據。我的改造主要涉及兩點:

首先,原生Redis在存儲Key時是按照字符串類型來存儲的。比如,一個8字節的Long類型的數據,需要28個字節的存儲空間(8字節的字符串頭部信息 + 19字節的數字長度 + 1字節的字符串結尾標志)。如果我們直接使用Long類型來存儲,只需要8個字節,節省了20個字節的空間。

其次,我去除了原生Redis中多余的指針。現在,如果要存儲一個鍵值對(KV)信息,只需要12個字節(8字節的weibo_id + 4字節的轉發數),相比之前有很大的改進。

同時,我們也會使用一個大的數組來存儲計數信息,存儲的位置是基于 weibo_id 的哈希值來計算出來的,具體的算法像下面展示的這樣:

同時,我們也會使用一個大的數組來存儲計數信息,存儲的位置是基于 weibo_id 的哈希值來計算出來的,具體的算法像下面展示的這樣:

在對原生Redis進行改造后,我們還需要進一步考慮如何節省內存的使用。舉例來說,微博的計數數據包括轉發數、評論數、瀏覽數、點贊數等等。如果每個計數都需要存儲weibo_id,那么總共需要的存儲空間是48字節(8字節的weibo_id * 4個微博ID + 每個計數4字節)。

然而,我們可以將相同微博ID的計數數據存儲在一起,這樣就只需要記錄一個微博ID,省去了多余的三個微博ID的存儲開銷。這樣一來,存儲空間就進一步減少了。

不過,即使經過上面的優化,由于計數的量級實在是太過巨大,并且還在以極快的速度增長,所以如果我們以全內存的方式來存儲計數信息,就需要使用非常多的機器來支撐。

針對微博計數數據具有明顯的熱點屬性的情況,我們考慮優化計數服務,增加SSD磁盤,將時間上較久遠的數據存儲在磁盤上,內存中只保留最近的數據,以盡量減少服務器的使用。

具體做法是,將較久遠的計數數據dump到SSD磁盤上,而內存中僅保留最近的數據。當需要讀取冷數據時,使用單獨的I/O線程異步地從SSD磁盤加載冷數據到一個單獨的Cold Cache中。

圖片

經過以上優化措施,我們的計數服務現在已經能夠支撐高并發大數據量的考驗,無論是在性能、成本還是可用性方面都能夠滿足業務需求。通過微博設計計數系統的例子,我想強調的是,在系統設計過程中需要了解當前系統面臨的痛點,并針對這些痛點進行細致的優化。

舉例來說,微博計數系統的痛點是存儲成本。因此,我們在后期的優化中主要圍繞如何使用有限的服務器存儲全量的計數數據展開。即使對開源組件(如Redis)進行深度定制可能會增加運維成本,但這些優化都被視為實現計數系統的必要權衡。通過深入了解系統痛點并針對性地進行優化,我們能夠更好地提高系統的性能、降低成本,并確保系統的可用性。

總結

數據庫 + 緩存的方案是計數系統的初級階段,完全可以支撐中小訪問量和存儲量的存儲服務。如果你的項目還處在初級階段,量級還不是很大,那么你一開始可以考慮使用這種方案。

通過對原生 Redis 組件的改造,我們可以極大地減小存儲數據的內存開銷。

使用 SSD+ 內存的方案可以最終解決存儲計數數據的成本問題。這個方式適用于冷熱數據明顯的場景,你在使用時需要考慮如何將內存中的數據做換入換出。

隨著互聯網技術的發展,越來越多的業務場景需要大量的內存資源來存儲業務數據,但對性能或延遲要求不高。全內存存儲會帶來極大的成本浪費,因此一些開源組件開始支持使用SSD替代內存存儲冷數據,比如Pika和SSDB。我建議您了解它們的實現原理,以便在需要時在項目中使用。

在微博的計數服務中也采用了類似的思路,將熱點數據存儲在內存中,而將冷數據存儲在SSD上,這樣既保證了性能,又降低了成本。如果您的業務需要大量內存存儲熱點數據,不妨考慮采用類似的思路來優化您的系統。

責任編輯:武曉燕 來源: 二進制跳動
相關推薦

2023-08-08 08:01:22

微服務架構服務

2021-08-30 08:13:41

設計系統化用戶

2024-02-29 12:54:00

API網關微服務

2011-07-06 17:24:26

2015-03-24 20:07:18

APP推廣APP運營

2022-08-29 19:51:58

CSS計數器

2023-07-28 08:15:27

PC程序計數器

2009-11-06 16:59:26

WCF性能計數器

2024-03-08 08:50:01

信息流系統緩存

2024-02-07 12:32:00

重構技巧PythonCounter

2023-12-29 10:04:47

數據分析

2009-11-25 15:07:39

PHP添加計數器

2009-06-11 16:27:18

科學型Java計數器

2010-06-12 17:16:46

MySQL數據庫

2009-10-29 11:47:15

ADO.NET計數器b

2010-02-22 16:34:17

WCF性能計數器

2021-01-26 07:11:26

Redis數據同步數據遷移

2010-07-15 15:50:58

安裝SQL Serve

2009-12-01 15:01:07

PHP生成訪問計數器

2025-06-26 08:00:00

JSON前端開發
點贊
收藏

51CTO技術棧公眾號

7777精品伊人久久久大香线蕉最新版| 久久青草福利网站| 亚洲国产岛国毛片在线| 精品亚洲aⅴ在线观看| 日韩av综合| 色一情一乱一乱一91av| 亚洲在线色站| 免费黄网站欧美| 成人精品久久av网站| 妞干网视频在线观看| 亚洲一区国产一区| 亚洲天天做日日做天天谢日日欢 | 国产精品激情av电影在线观看| 免费一级大片| 紧缚奴在线一区二区三区| 四虎永久国产精品| 综合成人在线| 国产精品高潮视频| 亚洲婷婷在线| 97久久精品国产| 国产日韩另类视频一区| 欧美大片在线看| 精品三级av| 亚洲xxxxx性| 蜜桃av噜噜一区二区三区小说| 日韩av大全| 国产美女一区二区三区| 久久久久久久香蕉| 久久在线免费观看| 亚洲xxxx2d动漫1| 亚洲成人av福利| 成人亚洲一区二区三区| 亚洲日本韩国一区| 午夜免费福利在线观看| 欧美日韩一区二区三区在线看| 在线看三级网站视频| 亚洲美女在线观看| 视频成人永久免费视频| 亚洲成色777777女色窝| 成人在线啊v| 中文字幕免费精品一区| 国产乱论精品| 天堂社区 天堂综合网 天堂资源最新版| 国产一区二区三区四区五区入口| 三级在线免费观看| 亚瑟在线精品视频| 黄色国产在线| 中文字幕在线观看亚洲| 中国女人久久久| 91久久久久久久久| 欧美一站二站| 久久99精品久久久久久久久久| 国产午夜亚洲精品午夜鲁丝片| 日本a级片免费观看| 日韩理论片在线| 国产乱码精品一区二三赶尸艳谈| 国产精品嫩草影院久久久| 成人午夜精品一区二区三区| 在线免费看污| 欧美裸体xxxx极品少妇| 国产精品123| 91色国产在线| 欧美日韩国产天堂| 精品视频一二| 欧美自拍视频在线| 另类国产ts人妖高潮视频| 久久精品xxx| 欧美精品v国产精品v日韩精品 | 丁香六月综合激情| 91香蕉在线观看| 精品无人区一区二区三区 | 欧美日韩精品二区| 极品束缚调教一区二区网站| 91成人在线视频观看| 日韩美女精品在线| 国产免费a∨片在线观看不卡| 91成人在线视频| 久久久久国产成人精品亚洲午夜| 成人国产在线| www.一区二区.com| 亚洲精品福利视频| 亚洲成在人线免费观看| 色戒在线免费观看| 韩国一区二区电影| 国产精品毛片久久久久久久| 伊人精品一区| 日韩午夜影院| 亚洲精品欧美精品| 少妇高潮 亚洲精品| 91视视频在线观看入口直接观看www | 女同性恋一区二区| 日韩一区二区福利| 亚洲三级在线播放| 亚洲激情黄色| 78精品国产综合久久香蕉| a优女a优女片| 国产精品视频500部| 精品久久久三级丝袜| 久久女同精品一区二区| 亚洲综合图色| 久草在线免费福利| 亚洲蜜桃av| 欧美精品成人在线| 欧美性猛片aaaaaaa做受| 国产激情偷乱视频一区二区三区 | 成人黄色网免费| 欧美日韩不卡一区| 成人毛片视频在线观看| 人妖一区二区三区| 2019中文字幕在线视频| 91网址在线播放| 欧美日韩一区二区三区69堂| 日韩电影视频免费| 亚洲国产精品久久久久秋霞影院| 亚洲全部视频| 日韩在线精品强乱中文字幕| 在线观看午夜看亚太视频| 国产av麻豆mag剧集| 九9re精品视频在线观看re6| 欧美专区日韩专区| 性色一区二区三区| 性网站在线观看| av中文字幕在线| 中文字幕无码不卡免费视频| 91精品婷婷国产综合久久蝌蚪| 久久精品99国产精品酒店日本| 欧美激情在线一区二区三区| 久久99深爱久久99精品| 91精品综合| 欧美一区 二区| 欧美成人精品三级网站| 国产女主播在线写真| 香蕉521av成人网| 精品国产中文字幕| 亚洲最大成人免费视频| 国产精品999| 韩日精品中文字幕| 亚洲天堂av在线免费| 亚洲成人xxx| 日韩国产在线看| 日韩av在线免费观看| 欧美精品一区二区三区四区 | 国产成人综合一区二区三区| 欧美在线www| 国产精品91在线观看| 97久久精品人人澡人人爽缅北| 2019中文字幕免费视频| 欧美一级淫片播放口| 91丝袜脚交足在线播放| 国产精品美女黄网| 国产精品入口尤物| 精品乱码一区二区三区| 国产精品视频一| 99久久久精品免费观看国产| 高清亚洲成在人网站天堂| 亚洲国产精品va在线看黑人| 欧美美女直播网站| 久久综合一区二区| 中文一区二区在线观看| 成a人片国产精品| 欧美fxxxxxx另类| 欧美成人一区二免费视频软件| 狼人综合视频| 黄色在线播放| 亚洲欧美专区| 国产精品嫩草影院在线看| 伊伊综合在线| 四虎4545www国产精品| 素人av在线| av在线导航| 黄网站在线播放| 大陆一级毛片| 给我免费播放片在线观看| 久久精品国产精品国产精品污| 国产精品有限公司| 久久久亚洲精品无码| 日本一级理论片在线大全| 97久久国产精品| 欧美大尺度在线观看| 最近2019中文字幕一页二页| 欧美成人在线免费| 97在线视频国产| 国产精品久久99久久| 欧美亚洲日本黄色| 91黑丝高跟在线| 五月天色一区| 成人日韩欧美| 精品中文一区| 亚洲另类春色校园小说| 亚洲五码在线| 亚洲国产精品一区制服丝袜| 欧美国产丝袜视频| 精品国产凹凸成av人导航| 日韩av在线免费播放| 96精品视频在线| 欧美在线不卡区| 久久99国产精品| 麻豆av观看| 成人免费网址| 深夜福利一区|