原创 zookeeper中的默認選舉過程

zookeeper的3.4.0後默認Leader選舉算法只保留了Tcp版本的FastLeaderElection算法,該算法的啓動在QuorumPeer中的start()方法中,的startLeaderElection()方法。 s

原创 Javassist代理 Dubbo源碼

代理在Dubbo中用到很多,無論是服務暴露端生成的invoker代理或者是消費者端的代理調用。Dubbo中默認採用javassist代理在內存中動態生成所代理的字節碼。我們來看下JavassistProxyFactory中的代碼 p

原创 Dubbo源碼消費者端服務的訂閱流程

關注消費者端服務的訂閱,我們從ReferenceConfig中的createProxy()開始分析,我們重點先關注其中的一句,當註冊中心只有一個(單個或集羣)時進入此分支即執行下面這一句。(關於createProxy整個流程會在後面博文中

原创 路由

  數據結構 [TODO] 僅列出來,未整理,且最好附上關係圖   struct fib_table { struct hlist_node tb_hlist; //用來將各個路由表連接成一個雙向鏈表 u32 tb_id;

原创 socket 源碼解析之創建

數據結構  /** * struct socket - general BSD socket * @state: socket state (%SS_CONNECTED, etc) * @flags: socket flag

原创 Linux內核源碼解析 - CFS調度算法(1)

由於非科班出身、操作系統方面的基本功很弱,因此在學校的這陣子,打算慢慢啃linux內核的源碼,正好陳老師也是這方面的大拿,前陣子把她推薦的跟一些自己圖書館瞎找的書翻完,是時候對着源碼總結下。以下均爲自己學習內容。 進程調度,那麼先從進程描

原创 ElasticSearch集羣選舉

上一篇分析了es集羣選舉前,每個節點通過ping()獲取集羣內其他節點的信息。這一次從整體分析下es集羣選舉master的流程。 在Node節點的start()方法中,通過discovery.startInitialJoin()方法開始加

原创 jdk源碼之ThreadLocal

ThreadLocal算是爲多線程解決併發問題提供了一種新的思路,爲了更好地使用它,讀其優秀的實現。其構造方法是空的,那麼直接看其set()方法 public void set(T value) { Thread t

原创 ElasticSearch之UnicastZenPing

在構造方法中,完成了配置等操作,從配置中讀取其他節點ip信息存到configuredHosts中,配置操作超時的時長,以及註冊遠程數據傳輸服務,完成線程池的構造,這裏還對discovery/zen/unicast註冊了requsetHan

原创 ElasticSearch之PrioritizedEsThreadPoolExecutor

PrioritizedEsThreadPoolExecutor優先級線程池,顧名思義,根據線程任務的優先級來提供線程,每次提供優先級最高的線程任務,還沒看實現前我們可以來思考一下如何做到,普通線程池提供的是線程隊列,那麼每次僅需要得到優先

原创 RocketMQ之PushConsumer的啓動

之前分析了PullConsumer的整個流程,這次來看看PushConsumer的啓動流程,老樣子我們來看DefaultMQPushConsumer的構造 public DefaultMQPushCo

原创 RocketMQ之broker消息索引

我們可以知道,broker的消息完全順序地存儲在commitLog上,且每條消息的大小不一致,如果我們根據不同的主題查,或者根據消息id查找都要遍歷整個commitLog文件,那肯定是不合理的。(要提一下,消息的一個主題topic,在一個

原创 Netty之FastThreadLocal

FastThreadLocal,看名字就可以知道,netty君讓其優化了。我們先來看看ThreadLocal哪裏慢了需要fast,上一篇分析我們知道,Thread內有一個ThreadLocalMap的成員,該成員相當於一個map(數組+線

原创 SpringBoot之SpringApplication(2)

我們回到SpringApplication的run方法繼續分析。 public ConfigurableApplicationContext run(String... args) { StopWatc

原创 Rocket之事務消息二階段提交

在生產者Producer中,通過sendMessageInTransaction()方法發送事務消息,這裏先向Broker發送一條預處理消息,sendMessageInTransaction()方法中,傳入