欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

了解java架構之微服務架構—雪崩效應

 更新時間:2019年06月19日 17:14:19   作者:葉落知深  
這篇文章主要介紹了了解java架構之微服務架構—雪崩效應,微服務化產(chǎn)品線,每一個服務專心于自己的業(yè)務邏輯,并對外提供相應的接口,看上去似乎很明了,其實還有很多的東西需要考慮,,需要的朋友可以參考下

前言

微服務化產(chǎn)品線,每一個服務專心于自己的業(yè)務邏輯,并對外提供相應的接口,看上去似乎很明了,其實還有很多的東西需要考慮,比如:服務的自動擴充,熔斷和限流等,隨著業(yè)務的擴展,服務的數(shù)量也會隨之增多,邏輯會更加復雜,一個服務的某個邏輯需要依賴多個其他服務才能完成。

一但一個依賴不能提供服務很可能會產(chǎn)生雪崩效應,最后導致整個服務不可訪問。

微服務之間進行rpc或者http調(diào)用時,我們一般都會設置調(diào)用超時,失敗重試等機制來確保服務的成功執(zhí)行,看上去很美,如果不考慮服務的熔斷和限流,就是雪崩的源頭。

假設我們有兩個訪問量比較大的服務A和B,這兩個服務分別依賴C和D,C和D服務都依賴E服務

A和B不斷的調(diào)用C,D處理客戶請求和返回需要的數(shù)據(jù)。當E服務不能供服務的時候,C和D的超時和重試機制會被執(zhí)行

由于新的調(diào)用不斷的產(chǎn)生,會導致C和D對E服務的調(diào)用大量的積壓,產(chǎn)生大量的調(diào)用等待和重試調(diào)用,慢慢會耗盡C和D的資源比如內(nèi)存或CPU,然后也down掉。

A和B服務會重復C和D的操作,資源耗盡,然后down掉,最終整個服務都不可訪問。

常見的導致雪崩的情況有以下幾種:

  • 程序bug導致服務不可用,或者運行緩慢
  • 緩存擊穿,導致調(diào)用全部訪問某服務,導致down掉
  • 訪問量的突然激增。
  • 硬件問題,這感覺只能說是點背了⊙︿⊙。

雖然雪崩效應的產(chǎn)生千萬條,保證服務的不掛機,和流暢運行是我們不可推卸的責任,對應雪崩效應還是有很多保護方案的。

服務的橫向擴充

現(xiàn)在我們可以利用很多工具來保證服務不會掛掉,然后流量比較大的時候,可以橫向擴充服務來保證業(yè)務的流暢。比如我們最常使用k8s,能保證服務的運行狀態(tài),也可以讓服務自動的橫向擴充。對于用戶訪問量的激增情況這樣處理還是很不錯的,但是,橫向擴充也是有盡頭的,如果在一定環(huán)境下E服務的響應時間過長,依然有可能導致雪崩效應的產(chǎn)生。

限流

限制客戶端的調(diào)用來達到限流的做法是很常見的,比如,我們限制每秒最大處理200個請求,超過個數(shù)量直接拒絕請求。常見的算法如令牌桶算法

以一定的速度在桶里放令牌,當客戶端請求服務的時候,要先從桶里得到令牌,才能被處理,如果桶里的令牌用完了,則拒絕訪問。

熔斷

在客戶端控制對依賴的訪問,如果調(diào)用的依賴不可用時,則不再調(diào)用,直接返回錯誤,或者降級處理。開源的庫比如hystrix-go,也是我接下來要寫的源碼分析的一個庫。很好的實現(xiàn)了熔斷和降級的功能。他的主要思想是,設置一些閥值,比如,最大并發(fā)數(shù),錯誤率百分比,熔斷嘗試恢復時間等。能過這些閥值來轉換熔斷器的狀態(tài):

  • 關閉狀態(tài),允許調(diào)用依賴
  • 打開狀態(tài),不允許調(diào)用依賴,直接返回錯誤,或者調(diào)用fallback
  • 半開狀態(tài),根據(jù)熔斷嘗試恢復時間來開啟,允許調(diào)用依賴,如果調(diào)用成功則關閉失敗則繼續(xù)打開

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java獲得mysql和oracle鏈接的類

    java獲得mysql和oracle鏈接的類

    這篇文章主要介紹了java獲得mysql和oracle鏈接的類,可實現(xiàn)基于jdbc的mysql與oracle數(shù)據(jù)庫連接,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java時間類庫Timer的使用方法與實例詳解

    Java時間類庫Timer的使用方法與實例詳解

    這篇文章主要介紹了Jave時間類庫Timer的使用方法與實例詳解,需要的朋友可以參考下
    2020-02-02
  • Java內(nèi)部類和異常類的概念以及使用

    Java內(nèi)部類和異常類的概念以及使用

    這篇文章主要介紹了Java內(nèi)部類和異常類的概念以及使用,文中有非常詳細的代碼以及注釋,適合正在學習java基礎的同學們使用,需要的朋友可以參考下
    2021-04-04
  • JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析

    當產(chǎn)生異常后,并在異常處理器中進行執(zhí)行之后,程序會是如何的一種狀態(tài),是終止還是繼續(xù)執(zhí)行處理之后的代碼呢,下面這篇文章主要給大家介紹了關于JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況的相關資料,需要的朋友可以參考下
    2024-05-05
  • Java二叉樹的遍歷思想及核心代碼實現(xiàn)

    Java二叉樹的遍歷思想及核心代碼實現(xiàn)

    今天小編就為大家分享一篇關于Java二叉樹的遍歷思想及核心代碼實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 較詳細的JNI簡介

    較詳細的JNI簡介

    JNI是本地語言編程接口。它允許運行在JVM中的Java代碼和用C、C++或匯編寫的本地代碼相互操作。下面通過本文給大家分享JNI簡介,感興趣的朋友一起看看吧
    2017-10-10
  • 關于Springboot | @RequestBody 接收到的參數(shù)對象屬性為空的問題

    關于Springboot | @RequestBody 接收到的參數(shù)對象屬性為空的問題

    這篇文章主要介紹了關于Springboot | @RequestBody 接收到的參數(shù)對象屬性為空的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java 中的 this 和 super 區(qū)別

    Java 中的 this 和 super 區(qū)別

    這篇文章主要介紹了Javathis與super本質(zhì)區(qū)別,this與super是類實例化時通往Object類通道的打通者;this和super在程序中由于其經(jīng)常被隱式的使用而被我們忽略,但是理解其作用和使用規(guī)范肯定是必須的。接下來將詳述this與super的作用和區(qū)別,需要的朋友可以參考一下
    2021-11-11
  • 詳解Java異常處理中finally子句的運用

    詳解Java異常處理中finally子句的運用

    這篇文章主要介紹了Java異常處理中finally子句的運用,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(條件隊列)

    Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(條件隊列)

    這篇文章主要為大家詳細介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論