原创 7.狀態統計

一、簡介 這裏的統計主要是觸發遠程調用的統計,跟負載均衡沒啥關係,但是,負載均衡需要這些依賴這些統計信息做爲判斷的策略。 統計類主要是LoadBalancerStats,其內部持有ServerStats對每個server的調用做了

原创 8.負載均衡器

一、引子 從負載均衡策略可以瞭解到ribbon實現的各種負載均衡策略,當然也可以自己實現相應的算法。其中主要的接口IRule中有個定義如下: public ILoadBalancer getLoadBalancer(); 算法使用

原创 slave同步master數據偏移量錯誤

一、背景 master broker.log中出現如下日誌: 2019-12-03 17:42:06 INFO BrokerControllerScheduledThread1 - Slave fall behind master

原创 2.agent追蹤

所有的代碼分析基於pinpoint 1.6.2 在上篇文章agent啓動中最終分析到了織入部分,那麼這裏分析一下Trace部分。 一、入口 所有的trace的都從plugin進入,也就是說,如果對某個組件不支持的話,是不會進行tr

原创 性能大比拼

一、創建euraka集羣 創建父項目,包含父pom文件和子項目,並增加依賴,主要是:spring-cloud-starter-parent <parent> <groupId>org.springframework.c

原创 6.ServerListFilter

一、簡介 從名字可以看出來,這個接口實現了server類別的過濾功能。 二、接口 接口比較簡單,如下: public interface ServerListFilter<T extends Server> { publi

原创 2.結合hystrix

一、簡介 當http服務接口響應超時或調用http服務發生異常時,需要結合hystrix進行降級。 二、引入 在這裏,結合spring-boot的方式,在pom中添加如下依賴: <dependency> <groupId>

原创 1.agent啓動

agent啓動、加載、攔截織入 所有的代碼分析基於pinpoint 1.6.2 pinpoint agent使用方式爲-javaagent:$PINPOINT_PATH/pinpoint-bootstrap-{version}.j

原创 NameServer更新bug

一、背景 業務方反饋,日誌中發現大量如下錯誤: [2019-09-25T18:29:19,853][WARN ][RocketmqClient ] get Topic [search-core_model_v2

原创 2.負載均衡策略

一、簡介 爲什麼一開始就需要了解這一塊,原因就是這塊涉及到的組件的調用關係相對獨立,更容易理解,而這塊也是ribbon的核心之一。 二、接口 ribbon的負載均衡最終都委託給了一個類來實現,那就是IRule,IRule負責不同的

原创 broker負載過高

一、現象 集羣中兩臺broker機器分別出現load飆至60%的情況,導致系統無法登陸,引起mqcloud發送失敗預警。 二、處理 首先登陸問題機器,發現無法鏈接,但是能ping同,證明機器基本處於hang住的狀態。 在m

原创 4.ServerList

一、簡介 ServerList就是server的列表,我們知道,IRule做負載均衡的關鍵參數就是server列表,就是從這裏獲取的。 二、接口 其接口比較簡單,定義了兩個方法,如下: public interface Serve

原创 FeignClient

一、介紹 一個普通的java接口,加上FeignClient註解,就可以完成整合hystrix,ribbon的http調用,使用上很是方便,也感覺很神奇,內部實現有必要探究一下。 二、問題 第一個問題:被@FeignClient

原创 broker無響應時客戶端發送消息至少重試一次

一、背景 當broker處於半死不活的狀態時(gc,os內存不足等等原因),此時表現無法及時響應客戶端的請求。 針對客戶端同步發送消息,默認是帶有重試策略的。可是此種情況下,客戶端可能並沒有重試的機會,詳見下面的分析。 二、分析

原创 11.ribbon區域親和

一、簡介 ribbon的區域親和機制如下(需要說明一點,親和性發生在過濾階段,請參考負載均衡器中server列表是如何動態更新的部分): 以上的圖示及文字僅爲舉例說明,下面描述一下圖上表示的流程: 首先,先看右下角的provid