一對(duì)一直播平臺(tái)開(kāi)發(fā),導(dǎo)致Redis阻塞的原因和解決方式
屬于單線程架構(gòu)的Redis,在一對(duì)一直播平臺(tái)開(kāi)發(fā)中使用時(shí)需要時(shí)刻注意高并發(fā)場(chǎng)景,畢竟在高并發(fā)場(chǎng)景下單線程架構(gòu)非常容易出現(xiàn)阻塞問(wèn)題,當(dāng)阻塞發(fā)生時(shí),線上服務(wù)會(huì)受到影響,因此,在快速定位到出問(wèn)題的Redis節(jié)點(diǎn)后需要進(jìn)行阻塞原因及解決方式的分析。

在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,導(dǎo)致Redis發(fā)生阻塞的原因可以分為兩大類,分別是內(nèi)在原因和外在原因,針對(duì)不同的原因所采取的解決方式也不同。
一、內(nèi)在原因
1、不合理的API或數(shù)據(jù)結(jié)構(gòu)
在出問(wèn)題的Redis節(jié)點(diǎn)中可以使用慢查詢功能進(jìn)行追蹤,超過(guò)1ms的語(yǔ)句都需要關(guān)注。針對(duì)該原因?qū)е碌淖枞梢詮膬蓚€(gè)方面入手解決:
(1)對(duì)大對(duì)象進(jìn)行調(diào)整。
(2)使用時(shí)間復(fù)雜度低的語(yǔ)句。
2、CPU飽和
在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,可以通過(guò)查看CPU的使用率和查詢Redis并發(fā)量的方式進(jìn)行問(wèn)題排查,針對(duì)該原因?qū)е碌淖枞S玫慕鉀Q方式是集群化水平拓展分?jǐn)侽PS壓力。
3、持久化阻塞
在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,常采用檢查最近fork操作耗時(shí)和檢查AOF刷盤最近成功時(shí)間的方式進(jìn)行阻塞原因排查。比如如果發(fā)現(xiàn)fork的操作耗時(shí)超過(guò)1s則避免使用過(guò)大的內(nèi)存實(shí)例。

二、外在原因
1、CPU競(jìng)爭(zhēng)
在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,可利用top命令進(jìn)行排查,如果是CPU競(jìng)爭(zhēng)所導(dǎo)致的Redis阻塞,那就可以采取以下解決方式:
(1)將Redis和其他多核CPU密集型服務(wù)分別部署。
(2)將Redis進(jìn)程綁定到CPU上。不過(guò)如果開(kāi)啟了持久化則不能綁定到CPU上。
2、內(nèi)存交換
在一對(duì)一直播平臺(tái)開(kāi)發(fā)中可以利用Redis進(jìn)程號(hào)查詢等方式進(jìn)行阻塞原因的排查,針對(duì)該原因常用的解決方式有降低系統(tǒng)使用swap優(yōu)先級(jí)、保證機(jī)器充足的可用內(nèi)存、確保所有Redis實(shí)例設(shè)置了最大的可用內(nèi)存。
3、網(wǎng)絡(luò)問(wèn)題
像網(wǎng)絡(luò)閃斷、Redis連接拒絕、連接溢出、網(wǎng)絡(luò)延遲等均會(huì)導(dǎo)致Redis的阻塞問(wèn)題出現(xiàn),在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,可以通過(guò)調(diào)整網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、采用長(zhǎng)連接或連接池實(shí)現(xiàn)客戶端訪問(wèn)Redis等方式應(yīng)對(duì)。

在一對(duì)一直播平臺(tái)開(kāi)發(fā)中,Redis是非常重要的組件之一,尤其是作為緩存所起到的系統(tǒng)性能優(yōu)化作用非常顯著,因此,只有保障了Redis在系統(tǒng)中的使用性能才能保證一對(duì)一直播平臺(tái)開(kāi)發(fā)質(zhì)量。
聲明:本文由云豹科技原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者名及原文鏈接,否則視為侵權(quán)