2011 年末,阿里巴巴在 GitHub 上開源了基於 Java 的分散式服務治理框架 Dubbo,之後它成為了國內該類開源項目的佼佼者,許多開發者對其表示青睞。同時,先後有不少公司在實踐中基於 Dubbo 進行分散式系統架構,目前在 GitHub 上,它的 fork、star 數均已破萬。2014 年 10 月 30 號發布版本 dubbo-2.4.11,修復了一個小 Bug,版本又陷入漫長的停滯到2017年九月份。
在dubbo停滯的期間呢,噹噹網 Fork 了阿里的一個 Dubbo 版本開始維護,並命名為 dubbox-2.8.0。值得注意的是,噹噹網擴展 Dubbo 服務框架支持 REST 風格遠程調用,並且跟隨著 ZooKeepe 和 Spring 升級了對應的版本。之後 Dubbox 一直在小版本維護,2015 年 3 月 31 號發布了最後一個版本 dubbox-2.8.4。筆者公司用的也是這個版本,並稍微改造了下源碼,下面會有提及。
其實在當前說到微服務,可能大家第一反應是springcloud,spring全家桶帶來的便捷是顯而易見的,然而為什麼我們這裡聊的是dubbo呢?原因之一是因為筆者公司只用了dubbo(別扔雞蛋…),其二呢其實rpc框架很多原理是相通的,當我們理解了其中一個,再去看其他的框架,會有一種似曾相識的感覺,最後也沒必要去爭論XX框架的好與壞,選擇最適合自己業務的就是最好的。
先交代下背景,我們這邊是從2016年開始使用dubbo,使用的是dubbox-2.8.4 版本,然後因為一些場景不合適改了下代碼,重新打包成2.8.5提交至公司的私服使用。好了,接下來就開始進入正文,聊聊這幾年在dubbo使用過程中遇到坑,以及需要注意的地方吧。