天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

本文由一位阿里粉絲分享經驗,且看他如何一路逆襲

前言

過去十多年互聯網產業的高速發展,在給社會帶來深刻變革的同時,也催生了服務架構的演進:從傳統的單體應用到面向服務的SOA,再到現今主流的微服務架構,而Apache Dubbo就是微服務領域中的先行者和佼佼者。

Apache Dubbo是阿里巴巴於2011年開源的一款高性能Java RPC框架,開源伊始就在業界產生了很大的影響,被大量公司廣泛使用,甚至在很多公司自研的RPC框架中也能看到不少Dubbo的影子,可以說Dubbo在國內服務化體系演進過程中扮演了一個非常重要的角色。雖然中間經歷了幾年時間的沉寂,不過2017年阿里巴巴又重啓了對Dubbo的開源維護,受到了社區的廣泛歡迎,社區活躍度也隨之迅速提升,Dubbo也正在從一個微服務領域的高性能RPC框架,逐步演變爲一個完整的微服務生態。

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

近年來,隨着業務規模的發展和複雜度的增加,傳統的單體應用已經很難適應業務迭代的訴求,越來越多的公司開始進行服務化的改造。很高興看到ApacheDubbo被許多公司採用,作爲服務化改造的基礎架構進行演進。這裏面就包括了許多互聯網公司、國字頭的大型企業,以及金融行業的巨頭公司。ApacheDubbo因爲良好的設計和擴展性受到許多開發者的歡迎,然而當開發者需要深入瞭解Dubbo底層的架構設計和實現的時候,往往會有些不知所措。網上也有很多愛好者撰寫的源碼分析等文章,雖有所有啓發和裨益,但總覺得不夠成體系。令人遺憾的是,市面上始終缺乏一本完整的、體系化的對Apache Dubbo進行深入原理剖析的書。

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

相信細心的朋友們都發現了小編將RPC構建分佈式和Dubbo源碼解析的學習路線已經整理了出來。有了學習路線、系統的學習方向,是不是感覺學習起來就一氣呵成了?

接下來,小編就和大家一起深入探討Apache Dubbo與實戰解析,希望能夠和大家一起共同進步。

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

第1章:Dubbo高性能RPC通信框架

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章我們介紹了整個應用框架的演進歷史,以及Dubbo框架的歷史背景和未來發展方向,同時介紹了Dubbo提供的特性。我們瞭解了國內有很多大公司都在使用Dubbo,目前Dubbo又重啓維護,社區不斷在成長與壯大。然後,我們概述了Dubbo 的總體架構圖和核心組件,並把所有核心組件合在一起,講解Dubbo的一次總體調用的過程。


第2章:開發第一款Dubbo應用程序

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

在本章中,讀者應該設置好了Dubbo開發環境和熟悉了代碼的目錄結構,並且瞭解了Dubbo豐富的使用方式,其中包含XML、註解和API的方式。其中最靈活的是基於Java API的方式,很多網關的應用程序正是基於API的方式構建的。雖然本章講解的是簡單的應用程序,但是可以支持數千個併發連接,這得益於Dubbo底層的優雅封裝。接下來,我們會更加深入地理解Dubbo,我們會深入講解Dubbo採用的設計模式和內部設計等關鍵細節。


第3章:Dubbo註冊中心

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章介紹了Dubbo中已經支持的註冊中心。重點介紹了ZooKeeper和Redis兩種註冊中心。講解了兩種註冊中心的數據結構,以及訂閱發佈機制的具體實現。然後介紹了註冊中心中一些通用的關鍵特性,如數據緩存、重試等機制。最後,在對各種機制已經瞭解的前提下,講解了整個註冊中心源碼的設計模式。


第4章:Dubbo擴展點加裁機制

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章的內容比較多,首先介紹了DubboSPI的一些概要信息,包括與JavaSPI的區別、DubboSPI的新特性、配置規範和內部緩存等。其次介紹了Dubbo SPI中最重要的三個註解: @SPI、@Adaptive、@Activate, 講解了這幾個註解的作用及實現原理。然後結合ExtensionLoader 類的源碼介紹了整個Dubbo SPI 中最關鍵的三個入口: getExtension、getAdaptiveExtension、getActivateExtension,並講解了創建ExtensionLoader 的工廠( ExtensionFactory)的工作原理。最後還講解了自適應機制中動態編譯的實現原理。


第5章:Dubbo啓停原理解析

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章我們首先對Dubbo中XMLschema約束文件進行了講解,也包括如何映射到對應Java對象中。現在越來越多地使用註解的方式,我們也對註解的解析核心流程進行了探討。然後對Dubbo框架的幾種服務暴露原理進行了詳解,緊接着對服務消費進行了講解,這些服務暴露和消費對所有的協議都具有參考價值。最後我們對優雅停機的原理進行了探討,也對以前的實現缺陷的原因進行了概述。


第6章:Dubbo遠程調用

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章首先講解了Dubbo調用原理和流程,同時對Dubbo的協議做了詳細的講解,這裏的基礎知識對RPC調用來說至關重要。在講解完協議的基礎上,我們又對Dubbo實現編解碼、解決粘包和解包做了深入探討。本章重點在RPC調用,以及處理常規方法調用,我們也對本地Telnet調用的設計和實現原理做了說明。在實際開發過程中,不熟悉Dubbo開發的人員也能快速通過fastjson 方式測試和驗證服務,在Telnet健康檢查方面我們也做了進一步的說明。最後,我們對Dubbo中比較重要的Handler, 比如Request/Response 模型Handler 和心跳Handler等做了詳細的解析,同時對Dubbo 的線程模型做了剖析。後面的關注點會聚焦於解決業務問題和服務治理上。


第7章:Dubbo集羣容錯

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章的內容較多,首先介紹了整個集羣容錯層的總體結構,講解了7種普通集羣容錯策略的實現原理一都使用 了模板模式,繼承了AbstractClusterInvoker, 在AbstractClusterInvoker中完成了總體的抽象邏輯,並留了一個抽象方法讓子類實現自己的獨特功能。其次我們介紹了整個集羣容錯層都會使用的Directory 接口,重點講解RegistryDirectory監聽註冊中心,並動態更新本地緩存的Invoker列表、路由列表、配置列表。然後我們講解了相關的路由接口、負載均衡接口的實現原理,介紹了三種不同路由規則的實現方式和四種不同負載均衡策略的實現方式。接着講解了特殊容錯機制Merger,包含默認合併器的總體大圖,以及具體Merge的實現步驟。最後講解了Mock機制的實現,分爲Cluster層的邏輯線,以及Protocol層的邏輯線。


第8章:Dubbo擴展點

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

我們在第4章已經瞭解了Dubbo的SPI擴展機制,本章主要介紹在整個框架中有哪些已有的接口是可以擴展的,主要涉及擴展接口的作用,原理性的內容相對較少。首先介紹整個框架中核心擴展點的總體大圖,讓讀者對這些擴展點有一個總體的瞭解.其次從上到下介紹整個RPC層的擴展點。然後介紹Remote層的擴展點。最後會把其他一些零散的擴展點也簡單介紹一下。


第9章:Dubbo高級特性

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章主要對Dubbo中的高級特性進行講解,比如服務分組和版本、參數回調、隱式參數、異步調用、泛化調用、上下文信息、Telnet操作、Mock調用和結果緩存原理。雖然本章的知識點比較獨立,但這些特性點能夠解決實際業務場景中的很多問題。比如版本和分組能夠解決無資源隔離,防止整體資源被個別調用方拖垮,可以將某些調用分配一個隔離的資源池中,單獨爲它們提供服務。


第10章:Dubbo過濾器

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

之前的章節已經涉及很多過濾器的講解,因此本章只介紹了一些前面章節都沒有涉及的過濾器。首先介紹了Dubbo框架中所有過濾器的總體大圖,講解了每個過濾器的作用及歸屬,過濾器分爲服務提供者端生效和消費者端生效兩種,其中服務提供者端有11種過濾器,消費者端有5種過濾器。有一個特殊的Monitor 過濾器在兩端都會生效,還有一個CompatibleFilter過濾器並沒有默認啓用。然後,我們介紹了整個過濾器鏈串聯起來的原理,框架在ProtocolFilterWrapper中爲每個Invoker 包上了一層又一層的過濾器,最終形成一個過濾器鏈。最後,我們分別詳細介紹了服務提供者、消費者端的每個過濾器的實現原理。


第11章:Dubbo註冊中心擴展實踐

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章首先介紹了etcd註冊中心元數據的結構設計,etcd 的結構比較簡單,在v3版本中主要是平鋪的key-value,說明了爲什麼選用元數據作爲key的原因。然後介紹了擴展新註冊中心要考慮擴展性,我們理解了爲什麼要新增擴展點並且如何使用擴展點,給出了與註冊中心交互的實現,比如臨時節點創建和保護、節點刪除實現和重新實現watch的機制,詳細講解了watch中可能出現的異常場景處理,在watch實現中優化了網絡拉取。最後我們講解了完整註冊中心訂閱的邏輯,需要同時適配服務治理平臺、provider和consumer的訂閱。


第12章:Dubbo服務治理平臺

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章內容較少,由於Dubbo的服務治理平臺一直處於半成品狀態,實現的方式也比較簡單,因此可以講解的原理不多。總的來說,Dubbo 服務治理平臺各種功能的實現,都是通過RegistryServerSyne工具類把註冊中心的數據緩存到本地,然後通過override協議更新到註冊中心,訂閱者得知URL變更後,自動更新本地的配置緩存,從而實現配置的下發。


第13章:Dubbo未來展望

天才!剛入職阿里P6,是如何憑藉Dubbo實戰一路逆襲P8的?

 

本章主要分析了Dubbo未來生態的發展方向與雲原生。首先介紹了Dubbo重啓開源一年多的現狀,列舉開源團隊在這段時間所做出的努力與成果。其次介紹了最新發布的2.7.x版本的新特性,讓讀者對2.7.x版本的改動有一個大致的瞭解。然後介紹了後續Dubbo對於其核心能力的規劃,一共分爲六大方向。接着介紹了Dubbo生態的後續規劃,通過擴展點兼容第三方服務,豐富整個Dubbo的生態,讓用戶可以體驗各種開箱即用的特性,降低研發成本。最後介紹了後續的雲原生趨勢,分析了現有框架所面臨的挑戰,後續Server Mesh會以什麼樣的方式來解決現有的問題,以及Dubbo Mesh現在的規劃與發展。


整體概述

本篇首先介紹Dubbo的簡史、後續的規劃和整體架構大圖;接着介紹Dubbo環境配置,並基於Dubbo開發第一款應用程序;然後介紹Dubbo內置的常用註冊中心的實現原理,Dubbo 擴展點加載的原理和實現,Dubbo的啓動、服務暴露、服務消費和優雅停機的機制,Dubbo中RPC協議細節、編解碼和服務調用實現原理,Dubbo 集羣容錯、路由和負載均衡機制,Dubbo 的擴展點相關知識,Dubbo 高級特性的實現和原理,Dubbo常用的Filter的實現原理,Dubbo中新增etcd3註冊中心的實戰內容和Dubbo服務治理平臺的相關知識;最後介紹Dubbo未來生態和DubboMesh的相關知識。

本書適合對Dubbo有一定了解、對Dubbo框架感興趣的讀者,也適合想深入理解Dubbo原理的資深開發者閱讀。

後記

正是有了這篇寶典,讓我對阿里RPC架構有了更深的理解,也正是因爲此,才能一路平步青雲。

全篇的整體概括,相信看完全文的朋友,心裏應該對此文有個大致的瞭解。但是因篇幅限制,小編無法將全部細節展示完全,只能整體概括,也爲了大家更好的閱讀體驗,希望大家明白小編的一片用心。

最後,有需要完整無缺頁版Apache Dubbo與實戰的朋友,請分享文章並關注小編,私信回覆【學習】即可哦~~~

喜歡文章請多多點贊評論分享,關注小編,小編以後會致力於更新更加豐富的學習內容給大家,咱們一塊共同進步!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章