緩存: 緩存比較好理解,在大型高併發系統中,若是沒有緩存數據庫將分分鐘被爆,系統也會瞬間癱瘓。使用緩存不僅僅可以提高系統訪問速度、提升併發訪問量,也是保護數據庫、保護系統的有效方式。大型網站通常主要是「讀」,緩存的使用很容易被想到。在大型「寫」系統中,緩存也經常扮演者很是重要的角色。好比累積一些數據批量寫入,內存裏面的緩存隊列(生產消費),以及HBase寫數據的機制等等也都是經過緩存提高系統的吞吐量或者實現系統的保護措施。甚至消息中間件,你也能夠認爲是一種分佈式的數據緩存。算法
降級: 服務降級是當服務器壓力劇增的狀況下,根據當前業務狀況及流量對一些服務和頁面有策略的降級,以此釋放服務器資源以保證核心任務的正常運行。降級每每會指定不一樣的級別,面臨不一樣的異常等級執行不一樣的處理。根據服務方式:能夠拒接服務,能夠延遲服務,也有時候能夠隨機服務。根據服務範圍:能夠砍掉某個功能,也能夠砍掉某些模塊。總之服務降級須要根據不一樣的業務需求採用不一樣的降級策略。主要的目的就是服務雖然有損可是總比沒有好。數據庫
限流: 常見的限流算法有:計數器、漏桶和令牌桶算法。 一、經過限制單位時間段內調用量來限流 二、經過限制系統的併發調用程度來限流 三、使用漏桶(Leaky Bucket)算法來進行限流 四、使用令牌桶(Token Bucket)算法來進行限流api
【計數器】:好比限制每秒100個請求,則使用LinkedList來記錄滑動窗口的10個格子,每隔100ms插入一個計數刪除首個計數,若是最後一個和第一個相差大於1s,則開啓限流。很明顯窗口越多,滑動越平滑。 缺點:若是它在單位時間段的前幾秒就被流量突刺消耗完了,將致使該時間段內剩餘的時間內該服務「拒絕服務」,能夠將這種現象稱爲「突刺消耗」,但慶幸的是,這種狀況並不常見。緩存
【漏桶】:實現流量整形(Traffic Shaping)和流量控制(Traffic Policing) 單機能夠用隊列實現,分佈式環境用消息中間件和 Redis 實現。服務器
【令牌桶】:根據放令牌的速率去控制輸出的速率。併發
限流算法實現 Guava是一個Google開源項目,其中的RateLimiter提供了令牌桶算法實現:平滑突發限流(SmoothBursty)和平滑預熱限流(SmoothWarmingUp)實現。 Nginx 模塊: 鏈接數限流模塊ngx_http_limit_conn_module:好比同一個 ip 的鏈接數進行限制。 漏桶算法實現的請求限流模塊ngx_http_limit_req_module:若是請求的頻率超過了限制域配置的值,請求處理會被延遲或被丟棄。分佈式