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

我們一起聊聊點(diǎn)贊系統(tǒng)的設(shè)計(jì)

開發(fā) 架構(gòu)
主從架構(gòu)中,主從的通過是通過canal來同步的,canal也是依賴與主庫的binlog,如果主庫由于系統(tǒng)的壓力較大生成binlog速度慢了,就可能會(huì)發(fā)生從庫和redis之間的數(shù)據(jù)不一致性,此時(shí)定時(shí)任務(wù)可以做數(shù)據(jù)補(bǔ)償,修復(fù)從庫和redis之間的數(shù)據(jù)不一致性。

隨著社交網(wǎng)絡(luò)的蓬勃發(fā)展,點(diǎn)贊功能逐漸成為了一個(gè)網(wǎng)站中不可或缺的功能。因?yàn)辄c(diǎn)贊功能不僅可以讓用戶更直觀地了解自己的視頻、文章等內(nèi)容被多少人認(rèn)可,而且也提升了用戶互動(dòng)體驗(yàn)感。下面我們來聊聊通用的點(diǎn)贊系統(tǒng)設(shè)計(jì)的方案。

1、點(diǎn)贊系統(tǒng)的數(shù)據(jù)表設(shè)計(jì)

    在設(shè)計(jì)數(shù)據(jù)表的時(shí)候我們需要知道點(diǎn)贊系統(tǒng)需要完成的基礎(chǔ)功能有哪些,點(diǎn)贊系統(tǒng)通常需要實(shí)現(xiàn)以下功能:

(1)用戶可以點(diǎn)贊一個(gè)視頻、文章、評(píng)論等內(nèi)容

(2)用戶可以查看一個(gè)視頻、文章、評(píng)論等內(nèi)容的點(diǎn)贊數(shù)

(3)用戶可以取消對(duì)視頻、文章、評(píng)論等內(nèi)容的點(diǎn)贊

    針對(duì)如上所示的功能,我們可以設(shè)計(jì)一張點(diǎn)贊記錄表和點(diǎn)贊計(jì)數(shù)表來記錄數(shù)據(jù),如下是兩張表的字段設(shè)計(jì):

圖片圖片

圖片圖片

    點(diǎn)贊計(jì)數(shù)表中記錄了稿件(視頻、文章、評(píng)論等等)被點(diǎn)贊和取消點(diǎn)贊的總數(shù),用作總的點(diǎn)贊數(shù)據(jù)展示;點(diǎn)贊記錄表用于記錄哪些用戶在何時(shí)給哪個(gè)稿件點(diǎn)贊或取消點(diǎn)贊。

2、系統(tǒng)設(shè)計(jì)

2.1 點(diǎn)贊數(shù)據(jù)寫入的設(shè)計(jì)方案

圖片圖片

    點(diǎn)贊系統(tǒng)一般流量是比較大的,特別是在某個(gè)稿件突然成為熱點(diǎn)之后,那么流量就會(huì)突增上來,為了應(yīng)對(duì)大流量,我們?cè)谠O(shè)計(jì)點(diǎn)贊系統(tǒng)的時(shí)候采用MQ來做削峰處理,整個(gè)點(diǎn)贊數(shù)據(jù)寫入的流程如下所示:

(1)用戶發(fā)送來點(diǎn)贊請(qǐng)求,經(jīng)過Nginx和網(wǎng)關(guān)轉(zhuǎn)發(fā)到點(diǎn)贊服務(wù)上,點(diǎn)贊服務(wù)組裝必要的數(shù)據(jù)(稿件的id、稿件用戶id等數(shù)據(jù))發(fā)送MQ消息,并發(fā)響應(yīng)客戶端寫入點(diǎn)贊數(shù)據(jù)成功。

(2)點(diǎn)贊服務(wù)消費(fèi)MQ消息,首先要保存點(diǎn)贊的數(shù)據(jù),在保存點(diǎn)贊數(shù)據(jù)的時(shí)候需要做一些邏輯檢驗(yàn)工作,如下的流程圖所示:

圖片圖片

    首先根據(jù)用戶的id和點(diǎn)贊的稿件id查詢數(shù)據(jù)庫獲取用戶的點(diǎn)贊記錄數(shù)據(jù),根據(jù)查詢的結(jié)果分如下的情況分析:

(a)如果沒有查詢到用戶的點(diǎn)贊記錄數(shù)據(jù),那么直接保存用戶的點(diǎn)贊記錄到記錄表中,將點(diǎn)贊計(jì)數(shù)表中的總的點(diǎn)贊數(shù)量加1。

(b)如果已經(jīng)存在了用戶的點(diǎn)贊記錄,那么就需要根據(jù)點(diǎn)贊的時(shí)間和點(diǎn)贊的動(dòng)作進(jìn)一步的檢查

    (b1)數(shù)據(jù)表中的點(diǎn)贊時(shí)間 > MQ中用戶的點(diǎn)贊時(shí)間,說明可能存在重復(fù)的點(diǎn)贊,此時(shí)我們這表MQ消息直接丟棄。

    (b2)數(shù)據(jù)表中的點(diǎn)贊時(shí)間 < MQ中用戶的點(diǎn)贊時(shí)間,比較數(shù)據(jù)庫中當(dāng)前的用戶點(diǎn)贊狀態(tài)是否為點(diǎn)贊,如果是點(diǎn)贊狀態(tài)那么當(dāng)前的MQ也不消費(fèi)了,如果是數(shù)據(jù)庫中狀態(tài)是取消狀態(tài),那么MQ消息我們就需要消費(fèi),此時(shí)修改記錄表的數(shù)據(jù)狀態(tài)為點(diǎn)贊狀態(tài)、點(diǎn)贊計(jì)數(shù)表中當(dāng)前的稿件的點(diǎn)贊數(shù)量加1。

(3)點(diǎn)贊的數(shù)據(jù)寫入緩存中從而減輕數(shù)據(jù)庫的壓力,點(diǎn)贊記錄和點(diǎn)贊計(jì)數(shù)表的設(shè)計(jì)如下所示:

圖片圖片

    在redis中稿件的點(diǎn)贊總數(shù)可以采用String類型的數(shù)據(jù)結(jié)構(gòu)來緩存,點(diǎn)贊記錄數(shù)據(jù)采用Zset的數(shù)據(jù)格式來存緩存數(shù)據(jù),這里需要給redis設(shè)置適當(dāng)?shù)倪^期時(shí)間。

(4)數(shù)據(jù)庫的設(shè)計(jì)采用讀寫分離的架構(gòu),使用canal來同步數(shù)據(jù)到從庫中,所有的寫請(qǐng)求都打到主庫上,所有的讀請(qǐng)求都轉(zhuǎn)發(fā)到從庫上。

(5)為了保證數(shù)據(jù)的一致性,我們采用定時(shí)任務(wù)定期從數(shù)據(jù)庫中同步數(shù)據(jù)到redis上,這樣即使是redis在某個(gè)時(shí)間中寫失敗了,我們通過定時(shí)任務(wù)的方式將數(shù)據(jù)補(bǔ)償?shù)絩edis中。

    取消的點(diǎn)贊數(shù)據(jù)的寫入流程也是一樣設(shè)計(jì)的,只是最終邏輯是要點(diǎn)贊計(jì)數(shù)表中點(diǎn)贊的數(shù)量減1,取消點(diǎn)贊的數(shù)量加1的,還要在點(diǎn)贊記錄表中更新或者添加用戶取消點(diǎn)贊的記錄,所以取消點(diǎn)贊的這里就不在贅述。

2.2 用戶讀取點(diǎn)贊的數(shù)據(jù)

圖片圖片

    當(dāng)點(diǎn)贊數(shù)據(jù)成功的寫入緩存和數(shù)據(jù)庫之后,用戶讀取點(diǎn)贊數(shù)據(jù)的流程如下:

(1)讀請(qǐng)求轉(zhuǎn)發(fā)到點(diǎn)贊服務(wù)上之后,點(diǎn)贊服務(wù)優(yōu)先查詢r(jià)edis中是否存在數(shù)據(jù),如果有數(shù)據(jù)的情況下,直接響應(yīng)數(shù)據(jù)給客戶端。

(2)如果redis中無點(diǎn)贊數(shù)據(jù),那么此時(shí)就需要到數(shù)據(jù)庫中查詢數(shù)據(jù),此時(shí)讀取數(shù)據(jù)庫的時(shí)候需要添加鎖,防止短時(shí)間內(nèi)由于緩存失效等原因造成大量的請(qǐng)求直接請(qǐng)求數(shù)據(jù)庫從而導(dǎo)致數(shù)據(jù)庫崩潰的問題。數(shù)據(jù)庫上查詢的數(shù)據(jù)要緩存一份到redis中。

總結(jié):

(1)點(diǎn)贊系統(tǒng)本文介紹的是一種通過MQ+主從架構(gòu)+redis的設(shè)計(jì)方案來應(yīng)對(duì)大流量

(2)高并發(fā)下點(diǎn)贊系統(tǒng)的redis緩存推薦使用更新的方案,因?yàn)楦卟l(fā)如果頻繁的刪除緩存就會(huì)導(dǎo)致緩存的命中率下降,那么就發(fā)揮不了緩存的作用

(3)主從架構(gòu)中,主從的通過是通過canal來同步的,canal也是依賴與主庫的binlog,如果主庫由于系統(tǒng)的壓力較大生成binlog速度慢了,就可能會(huì)發(fā)生從庫和redis之間的數(shù)據(jù)不一致性,此時(shí)定時(shí)任務(wù)可以做數(shù)據(jù)補(bǔ)償,修復(fù)從庫和redis之間的數(shù)據(jù)不一致性。


責(zé)任編輯:武曉燕 來源: 龍蝦編程
相關(guān)推薦

2022-12-07 13:12:15

2022-01-04 12:08:46

設(shè)計(jì)接口

2024-07-12 08:28:09

聊天系統(tǒng)架構(gòu)

2022-09-22 08:06:29

計(jì)算機(jī)平板微信

2023-11-30 07:40:05

URLCMS

2024-06-17 11:59:39

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2023-08-04 08:20:56

DockerfileDocker工具

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-09-10 21:42:31

2023-06-30 08:18:51

敏捷開發(fā)模式

2024-10-15 08:08:13

2023-03-07 07:05:29

生產(chǎn)數(shù)據(jù)庫運(yùn)維

2021-07-31 11:40:55

Openresty開源

2022-02-14 07:03:31

網(wǎng)站安全MFA

2024-02-26 00:00:00

Go性能工具
點(diǎn)贊
收藏

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