從西安“一碼通”不工作來(lái)看軟件系統(tǒng)性能與可靠性怎么保障
西安一碼通不過(guò)做,網(wǎng)上出來(lái)很多段子,段子就不說(shuō)了,我就說(shuō)說(shuō)怎么在技術(shù)上解決這些問(wèn)題。
1、業(yè)務(wù)上如何解決這些問(wèn)題
1)客戶端結(jié)果緩存
這種大型系統(tǒng)應(yīng)該做客戶端緩存,在有效時(shí)間內(nèi)不要去后臺(tái)請(qǐng)求,減少服務(wù)的請(qǐng)求量。
2)客戶端做連續(xù)請(qǐng)求過(guò)濾
客戶端可以做請(qǐng)求過(guò)慮,在服務(wù)端沒(méi)響應(yīng)的情況下不要連續(xù)發(fā)請(qǐng)求,可以設(shè)超時(shí)時(shí)間,超時(shí)后再請(qǐng)求,而且超時(shí)時(shí)間可以不斷延長(zhǎng)。
3)服務(wù)端做連續(xù)請(qǐng)求緩存
服務(wù)端可以做連續(xù)請(qǐng)求過(guò)濾,同一客戶端的請(qǐng)求同時(shí)只處理一個(gè),其他的丟棄。
4)服務(wù)端做過(guò)負(fù)荷控制
服務(wù)端處理能力進(jìn)行監(jiān)測(cè),對(duì)超過(guò)負(fù)荷的請(qǐng)求按照算法規(guī)則進(jìn)行丟棄一部分請(qǐng)求,避免系統(tǒng)資源耗盡或者IO堵死,致使整個(gè)系統(tǒng)癱瘓。
5)做業(yè)務(wù)方通
對(duì)業(yè)務(wù)做放通規(guī)則,在業(yè)務(wù)處理不過(guò)來(lái)的時(shí)候保證基礎(chǔ)業(yè)務(wù)運(yùn)行,附加功能直接屏蔽。
6)重點(diǎn)業(yè)務(wù)保護(hù)
在業(yè)務(wù)繁忙處理不過(guò)來(lái)的時(shí)候,只保證重點(diǎn)業(yè)務(wù),普通業(yè)務(wù)直接客戶端屏蔽。
? ? 2、性能上如何做到支持大容量
一碼通這種區(qū)域性應(yīng)用性能上也不算大,技術(shù)上比較容易解決大容量。
1)多服務(wù)節(jié)點(diǎn)負(fù)載均衡實(shí)現(xiàn)
游戲都是這么做的接到不同的開服服務(wù)器的,可以多節(jié)點(diǎn)互為備份,比如每個(gè)區(qū)一個(gè)服務(wù)節(jié)點(diǎn),客戶端接到不同的節(jié)點(diǎn),當(dāng)一個(gè)節(jié)點(diǎn)壞了可以接到其他節(jié)點(diǎn),理論上除非所有節(jié)點(diǎn)宕機(jī),否則不會(huì)出現(xiàn)這種全市不工作的情況。從出問(wèn)題的情況看,系統(tǒng)絕對(duì)的存在單點(diǎn)故障,不然不會(huì)全市癱瘓。
2)單節(jié)點(diǎn)性能提高
(1)緩存,各種請(qǐng)求結(jié)果內(nèi)存緩存,沒(méi)失效的直接回結(jié)果,不用老跑重復(fù)的業(yè)務(wù)邏輯。
(2)可以做批量數(shù)據(jù)刷新
按照算法,每次從數(shù)據(jù)服務(wù)獲取數(shù)據(jù)時(shí)可以獲取一批數(shù)據(jù),防止對(duì)數(shù)據(jù)端的壓力。
(3)請(qǐng)求接入與請(qǐng)求處理分離
這個(gè)應(yīng)該大部分系統(tǒng)都會(huì)做,消息中間件一般就做到了,那就是實(shí)現(xiàn)請(qǐng)求處理的的分解,涉及到請(qǐng)求其他服務(wù)都拆分出來(lái),做成異步的請(qǐng)求,避免第三方服務(wù)沒(méi)結(jié)果導(dǎo)致自身服務(wù)的堵死。
? ? 3、可靠性解決方案
1)分布式系統(tǒng)
避免單點(diǎn)故障,看出問(wèn)題的情況應(yīng)該是系統(tǒng)有單點(diǎn)故障,不然不會(huì)全市癱瘓。出問(wèn)題可能存在兩個(gè)點(diǎn)一個(gè)是接入點(diǎn)故障,一個(gè)是訪問(wèn)通信數(shù)據(jù)的點(diǎn),就是訪問(wèn)第三方的點(diǎn),接入點(diǎn)宕機(jī),宕機(jī)應(yīng)該重啟就好了,或者網(wǎng)絡(luò)故障,網(wǎng)絡(luò)故障應(yīng)該會(huì)說(shuō)出來(lái)。實(shí)現(xiàn)分布式多點(diǎn)接入,就沒(méi)有單點(diǎn)故障了,就不會(huì)出現(xiàn)全是癱瘓了。各階段也可以負(fù)荷分擔(dān),一個(gè)宕機(jī)其他節(jié)點(diǎn)可以接管。
? ? 2、容災(zāi)
做容災(zāi)節(jié)點(diǎn),服務(wù)節(jié)點(diǎn)都?jí)牧诉€有容災(zāi)節(jié)點(diǎn)支持,最壞情況下也不會(huì)全市無(wú)服務(wù)
? ? 3、備份恢復(fù)
在沒(méi)有辦法的情況下,還可以重啟恢復(fù)服務(wù)也不會(huì)出現(xiàn)全是長(zhǎng)時(shí)間無(wú)服務(wù)。
? ? 4、系統(tǒng)監(jiān)測(cè)和自動(dòng)重啟服務(wù)
避免長(zhǎng)時(shí)間業(yè)務(wù)中斷,監(jiān)測(cè)到業(yè)務(wù)無(wú)服務(wù),立即重啟。提供手動(dòng)快速重啟服務(wù),避免長(zhǎng)時(shí)間無(wú)服務(wù)。