穩定性思考-系統之間的強弱依賴

發表于:2012-12-11來源:IT博客大學習作者:不詳點擊數: 標簽:穩定性
穩定性思考-系統之間的強弱依賴!淘寶系統依賴關系比較復雜。A系統依賴B系統資源,當B系統發生故障的時候,A系統勢必會被拖累,導致A系統也發生故障 圖:[ A]-依賴->[B] 這里的依賴要區分兩種情況

  淘寶系統依賴關系比較復雜。A系統依賴B系統資源,當B系統發生故障的時候,A系統勢必會被拖累,導致A系統也發生故障

  圖:[ A]-依賴->[B]

  這里的依賴要區分兩種情況

  1、A強依賴于B

  任何強依賴都要盡可能的轉化成弱依賴,因為強依賴本身意味著一榮俱榮,一損俱損。老婆管賬,但是老公又沒有私房錢,對老公來說強依賴于老婆,也許是很幸福的事情。在系統角度來說這并不是好事情,比如支付系統強依賴銀行的支付,一旦銀行支付出現問題,那么只能干等著。所以需要盡量的擴展銀行的支付通道,讓單個節點影響到最小。

  對于強依賴B這個場景,從穩定性來說我們還是可以做一些事情:當B發生故障,雖然A系統不能正常執行業務,但是A不能掛掉,一旦B系統恢復,A系統也要做到立即恢復。同時A有責任對B要進行流量保護,而不是對B進行摧殘。

  我和小賭對淘寶某一前臺系統做過一次分流壓測(和ab,httpload等壓測不同,是直接將正常的用戶請求不斷引入的壓測方式,本質區別是分流壓測方式用戶數會持續不斷的增加,ab等則是固定用戶數):A系統單機的容量是4,當前的進入的流量是1。進行分流壓測,不斷增加單機的流量,直到該單機的流量到4,此時一切正常,流量增加到5,此時響應時間突增,減少流量到4,響應時間還是很長,持續一段時間不能自己恢復,再減少到3,系統還是沒有恢復,直到減少到2之后,系統恢復。原因是系統被壓垮之后,其容量發生了變化,原來容量是4,壓垮之后容量變成了2.5。

  此時系統會有比較頻繁的fullgc產生,做個簡單的分析,因為用戶不斷增加,而容量有不夠只能堆積,導致線程數量大增,直到max-limit值,并且由于強資源,導致每個線程完成工作的時間變長,minagc發生的時候大量的eden區對象不能被回收,拷貝到s0 or s1又放不下或者超過交換次數后被拷貝到了old區。

  所以摧殘一個系統不好,同時也說明如果系統沒有做特殊的保護,當分流的量大于了單機的容量,持續一段時間后,系統將不能很好的恢復,即便我們把分流進入的量減少到系統容量以下也不能快速恢復。

  2、A弱依賴于B

  此時B如果發生了故障,那么大家都期望A繼續能提供正常的服務

  場景1:A調用B,A的主流程不需要等待B的返回結果

  瀏覽器弱依賴:A從瀏覽器上發起異步請求,如果B掛了,那么只會出現頁面某一個區域不顯示B的內容,如果對于用戶交互可以接受,那么系統層面無任何問題,商品詳情頁面的評論列表和購買記錄就是這個情況

  異步線程:A調用B的時候只發送消息,然后調用動作由另外的線程來執行,并且不需要即時反饋結果,一般作為消息通知,軌跡記錄等場景使用。不過為了防止堆積,也需要控制隊列的大小

  場景2:A調用B,A的主流程需要等待B的返回結果

  設置超時時間:如果B響應超時,則拋出超時異常,絕對大部分情況下OK;不過兩種影響要考慮:1、超時時間設置過長或者過短導致的副作用 2、大量異常拋出

  設置最大并發請求數閥值,一旦超過閥值就跳過訪問B

  兩種方式相結合使用最佳

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97