在開發(fā)高并發(fā)系統(tǒng)時(shí)有三把利器用來(lái)保護(hù)系統(tǒng):緩存造挽、降級(jí)和限流篡腌。本文結(jié)合作者的一些經(jīng)驗(yàn)介紹限流的相關(guān)概念褐荷、算法和常規(guī)的實(shí)現(xiàn)方式。
緩存
緩存比較好理解嘹悼,在大型高并發(fā)系統(tǒng)中叛甫,如果沒(méi)有緩存數(shù)據(jù)庫(kù)將分分鐘被爆,系統(tǒng)也會(huì)瞬間癱瘓杨伙。使用緩存不單單能夠提升系統(tǒng)訪問(wèn)速度其监、提高并發(fā)訪問(wèn)量,也是保護(hù)數(shù)據(jù)庫(kù)限匣、保護(hù)系統(tǒng)的有效方式抖苦。大型網(wǎng)站一般主要是“讀”,緩存的使用很容易被想到膛腐。在大型“寫”系統(tǒng)中睛约,緩存也常常扮演者非常重要的角色。比如累積一些數(shù)據(jù)批量寫入哲身,內(nèi)存里面的緩存隊(duì)列(生產(chǎn)消費(fèi))辩涝,以及HBase寫數(shù)據(jù)的機(jī)制等等也都是通過(guò)緩存提升系統(tǒng)的吞吐量或者實(shí)現(xiàn)系統(tǒng)的保護(hù)措施。甚至消息中間件勘天,你也可以認(rèn)為是一種分布式的數(shù)據(jù)緩存怔揩。
降級(jí)
服務(wù)降級(jí)是當(dāng)服務(wù)器壓力劇增的情況下捉邢,根據(jù)當(dāng)前業(yè)務(wù)情況及流量對(duì)一些服務(wù)和頁(yè)面有策略的降級(jí),以此釋放服務(wù)器資源以保證核心任務(wù)的正常運(yùn)行商膊。降級(jí)往往會(huì)指定不同的級(jí)別伏伐,面臨不同的異常等級(jí)執(zhí)行不同的處理。根據(jù)服務(wù)方式:可以拒接服務(wù)晕拆,可以延遲服務(wù)藐翎,也有時(shí)候可以隨機(jī)服務(wù)。根據(jù)服務(wù)范圍:可以砍掉某個(gè)功能实幕,也可以砍掉某些模塊吝镣。總之服務(wù)降級(jí)需要根據(jù)不同的業(yè)務(wù)需求采用不同的降級(jí)策略昆庇。主要的目的就是服務(wù)雖然有損但是總比沒(méi)有好末贾。
限流
限流可以認(rèn)為服務(wù)降級(jí)的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的整吆。一般來(lái)說(shuō)系統(tǒng)的吞吐量是可以被測(cè)算的拱撵,為了保證系統(tǒng)的穩(wěn)定運(yùn)行,一旦達(dá)到的需要限制的閾值表蝙,就需要限制流量并采取一些措施以完成限制流量的目的拴测。比如:延遲處理,拒絕處理勇哗,或者部分拒絕處理等等昼扛。
限流的算法
常見(jiàn)的限流算法有:計(jì)數(shù)器、漏桶和令牌桶算法欲诺。