喜馬拉雅自研網(wǎng)關架構(gòu)演進過程
網(wǎng)關是一個比較成熟了的產(chǎn)品,基本上各大互聯(lián)網(wǎng)公司都會有網(wǎng)關這個中間件,來解決一些公有業(yè)務的上浮,而且能快速的更新迭代,如果沒有網(wǎng)關,要更新一個公有特性,就要推動所有業(yè)務方都更新和發(fā)布,那是效率極低的事,有網(wǎng)關后,這一切都變得不是問題,喜馬拉雅也是一樣,用戶數(shù)增長達到6億多的級別,Web服務個數(shù)達到500+,目前我們網(wǎng)關日處理200億加次調(diào)用,單機QPS高峰達到4w+。





用戶鑒權(quán)和登陸校驗,支持接口級別配置
黑白明單,分全局和應用,以及IP維度,參數(shù)級別
流量控制,支持自動和手動,自動是對超大流量自動攔截,通過令牌桶算法實現(xiàn)
智能熔斷,在histrix的基礎上做了改進,支持自動升降級,我們是全部自動的,也支持手動配置立即熔斷,就是發(fā)現(xiàn)服務異常比例達到閥值,就自動觸發(fā)熔斷
灰度發(fā)布,我對新啟動的機器的流量支持類似tcp的慢啟動機制,給 機器一個預熱的時間窗口
統(tǒng)一降級,我們對所有轉(zhuǎn)發(fā)失敗的請求都會找統(tǒng)一降級的邏輯,只要業(yè)務方配了降級規(guī)則,都會降級,我們對降級規(guī)則是支持到參數(shù)級別的,包含請求頭里的值,是非常細粒度的,另外我們還會和varnish打通,支持varish的優(yōu)雅降級
流量調(diào)度,支持業(yè)務根據(jù)篩選規(guī)則,對流量篩選到對應的機器,也支持只讓篩選的流量訪問這臺機器,這在查問題/新功能發(fā)布驗證時非常用,可以先通過小部分流量驗證再大面積發(fā)布上線
流量copy,我們支持對線上的原始請求根據(jù)規(guī)則copy一份,寫入到mq或者其他的upstream,來做線上跨機房驗證和壓力測試
請求日志采樣,我們對所有的失敗的請求都會采樣落盤,提供業(yè)務方排查問題支持,也支持業(yè)務方根據(jù)規(guī)則進行個性化采樣,我們采樣了整個生命周期的數(shù)據(jù),包含請求和響應相關的所有數(shù)據(jù)

Connection:close
空閑超時,關閉鏈接
讀超時關閉鏈接
寫超時,關閉鏈接
Fin,Reset


協(xié)議解析超時
等待隊列超時
建鏈超時
等待鏈接超時
寫前檢查是否超時
寫超時
響應超時

攻擊性請求,只發(fā)頭,不發(fā)/發(fā)部分body,采樣落盤,還原現(xiàn)場,并報警
Line or Head or Body過大的請求,采樣落盤,還原現(xiàn)場,并報警
耗時監(jiān)控,有慢請求,超時請求,以及tp99,tp999等
QPS監(jiān)控和報警
帶寬監(jiān)控和報警,支持對請求和響應的行,頭,body單獨監(jiān)控。
響應碼監(jiān)控,特別是400和404
鏈接監(jiān)控,我們對接入端的鏈接,以及和后端服務的鏈接,后端服務鏈接上待發(fā)送字節(jié)大小也都做了監(jiān)控
失敗請求監(jiān)控
流量抖動報警,這是非常有必要的,流量抖動要么是出了問題,要么就是出問題的前兆。




/**
* Cleans up if the user forgets to close it.
*/
protected void finalize() throws IOException {
close();
}

