java服务端限流框架,美团大众点评服务框架Pigeon
服務框架Pigeon架構
? Pigeon提供jar包接入 ,線上運行在tomcat里
? Monitor-CAT ,負責調用鏈路分析、異常監控告警等
? 配置中心-Lion ,負責一些開關配置讀取
? Governor-服務治理門戶
? 一個interface定義為一個服務 ,每個服務有一個唯一標識
服務的注冊與發現
? 注冊信息包括service name、ip、port、group等
? 服務提供方初始化完成后自動注冊 ,也可以通過api或管理端注冊
? 服務調用方通過service name去發現服務
Registry (Zookeeper)
/DP/SERVER/com.dianping.iphub.IpService
10.66.1.1:5020,10.66.1.2:5020
服務的注銷
? 服務地址通過zookeeper持久節點存儲 ,避免臨時節點的不穩定
? 關閉tomcat時會調用pigeon腳本去注冊中心摘除本機服務地址
? 對于殘留的無效地址 ,有獨立的心跳服務會檢測無效的服務地址進行zookeeper刪除
? 客戶端對于無效的服務地址 ,內部也有心跳檢測機制等來保證
編程方式、序列化
? 基于Hessian序列化 ,通過netty實現自定義TCP協議格式 ,開發成本低 ,通過java interface定義服務接口
? 基于Thrift序列化 ,通過netty實現自定義TCP協議格式 ,性能更高 ,開發成本稍高 ,通過定義IDL或annotation方式定義服務接口 ,
更方便接入其他語言 ,thrift會有一些制如方法不支持重載、struct不支持繼承等
調用模式
? Sync ,同步等待返回調用
? Future ,可實現并行發出多個請求 ,總耗時是最慢的請求的執行時長 ,推薦方式
? Callback ,發出結果不等待返回 ,結果回調 ,完全異步化
? Oneway ,無需返回結果
客戶端心跳
? 心跳線程客戶端發起 ,定期發送 ,服務端響應 ,連續5次不成功則在本地路由緩存里摘除該服務端節點 ,摘除后下次嘗試重連
客戶端負載均衡
? 多種負載均衡策略 ,默認是自適應策略 ,客戶端會計算發往每個服務端節點的在途請求數 ,新的請求會優先選擇在途請求數最小的節點發送
? 預熱控制 ,針對服務端某個剛啟動的節點 ,客戶端按從慢到快的頻率 ,將請求逐步發往這個節點 ,防止服務端剛啟動的節點大量請求進來導致大量超時
? 也可自定義負載均衡策略
服務限流
? 可以在服務端對某一個服務接口的某一個方法 ,針對不同的調用方應用的請求進行流量QPS限制 ,超出閥值后調用端會收到服務拒絕異常 ,未來會在調用端進行限流
? 服務端會對任意接口的請求所占用的線程數進行控制 ,防止單個接口某個方法用盡線程池所有可用線程
服務隔離
? 服務端默認會監控每個接口的超時情況 ,超時多的接口請求會自動路由到獨立的慢線程池處理 ,如果該接口恢復正常 ,則會回到正常共享線程池處理
? 也可以為某些接口方法配置獨立的線程池 ,剩余的使用公共池
服務監控分析與告警
? 通過監控系統CAT (已開源 )分析調用鏈路 ,包括調用量、TP耗時、異常、請求及響應大小、區間耗時明細、QPS等
項目地址:https://github.com/dianping/pigeon
采用的監控系統:Central Application Tracking
項目地址:https://github.com/dianping/cat
監控系統環境搭建:http://www.cnblogs.com/softidea/p/5719331.html
總結
以上是生活随笔為你收集整理的java服务端限流框架,美团大众点评服务框架Pigeon的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java之beanutils技术
- 下一篇: 网络端口号汇总