雪崩效應(yīng)
服務(wù)雪崩效應(yīng)就是因?yàn)榉?wù)提供者不可用絮记,導(dǎo)致服務(wù)直接或間接的調(diào)用者不可用摔踱,最終把不可用的范圍不斷放大。
服務(wù)雪崩.png
????以上圖為例,A作為服務(wù)提供者怨愤,B是A的服務(wù)調(diào)用者,C是B的服務(wù)調(diào)用者,D和E是C的服務(wù)調(diào)用者;當(dāng)服務(wù)A不可用時(shí)(所有實(shí)例都掛了 )派敷,而服務(wù)B還在瘋狂調(diào)用服務(wù)A的API,A服務(wù)掛了就會(huì)導(dǎo)致B發(fā)往A的請(qǐng)求強(qiáng)制等待撰洗,直至請(qǐng)求超時(shí)篮愉;Java程序中,一次請(qǐng)求往往代表一個(gè)線程差导,如果請(qǐng)求被強(qiáng)制等待了试躏,線程就會(huì)被強(qiáng)制阻塞,直到請(qǐng)求超時(shí)線程才會(huì)被釋放设褐;在高并發(fā)的應(yīng)用系統(tǒng)中颠蕴,阻塞的線程會(huì)越來越多泣刹,而線程代表著服務(wù)器的計(jì)算資源(如內(nèi)存、CPU)犀被,如果不做任何處理椅您,終將導(dǎo)致B服務(wù)也無法創(chuàng)建新的線程,B服務(wù)也掛了寡键;同理掀泳,也導(dǎo)致調(diào)用B的服務(wù)C不可用,最終導(dǎo)致整個(gè)系統(tǒng)服務(wù)宕機(jī)
常見的容錯(cuò)方案
-
超時(shí)
設(shè)置較短的超時(shí)時(shí)間西轩,不管是否請(qǐng)求成功开伏,只要一到超時(shí)時(shí)間,線程就會(huì)釋放 -
限流
設(shè)置合理的QPS遭商,只要超過整個(gè)閾值固灵,請(qǐng)求就會(huì)被直接拒絕,實(shí)現(xiàn)了自我保護(hù) -
倉壁模式
為每個(gè)API創(chuàng)建獨(dú)立的線程池 - 斷路器模式
state.png
馬丁大叔眼里的斷路器模式