微服務(wù)架構(gòu)的基礎(chǔ)框架選擇:Spring Cloud還是Dubbo?
相關(guān)閱讀:一款神仙接私活低代碼平臺,吊到不行(附源碼)
不論互聯(lián)網(wǎng)還是傳統(tǒng)行業(yè),凡是涉及信息技術(shù)范疇的圈子幾乎都在討論 微服務(wù)架構(gòu) 。近期也看到各大技術(shù)社區(qū)開始組織一些沙龍和論壇來分享Spring Cloud的相關(guān)實施經(jīng)驗,這對于最近正在整理Spring Cloud相關(guān)套件內(nèi)容與實例應(yīng)用的我而言,還是有不少激勵的。
那么第一次實施微服務(wù)架構(gòu)時,我們應(yīng)該選擇哪個基礎(chǔ)框架更好呢?
以下內(nèi)容均為作者個人觀點,知識面有限,如有不對,純屬正常,不喜勿噴。
Round 1:背景
Round 2:社區(qū)活躍度
我們選擇一個開源框架,社區(qū)的活躍度是我們極為關(guān)注的一個要點。社區(qū)越活躍,解決問題的速度越快,框架也會越來越完善,不然當(dāng)我們碰到問題,就不得不自己解決。而對于團(tuán)隊來說,也就意味著我們不得不自己去維護(hù)框架的源碼,這對于團(tuán)隊來說也將會是一個很大的負(fù)擔(dān)。
下面看看這兩個項目在github上的更新時間,下面截圖自2016年7月30日:

最后更新時間為:2016年5月6日

最后更新時間為:12分鐘前
可以看到Dubbo的更新已經(jīng)是幾個月前,并且更新頻率很低。而Spring Cloud的更新是12分鐘前,仍處于高速迭代的階段。
小結(jié):在社區(qū)活躍度上,Spring Cloud毋庸置疑的優(yōu)于Dubbo,這對于沒有大量精力與財力維護(hù)這部分開源內(nèi)容的團(tuán)隊來說,Spring Cloud會是更優(yōu)的選擇。
Round 3:架構(gòu)完整度
根據(jù)微服務(wù)架構(gòu)在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。
| Dubbo | Spring Cloud | |
|---|---|---|
| 服務(wù)注冊中心 | Zookeeper | Spring Cloud Netflix Eureka |
| 服務(wù)調(diào)用方式 | RPC | REST API |
| 服務(wù)網(wǎng)關(guān) | 無 | Spring Cloud Netflix Zuul |
| 斷路器 | 不完善 | Spring Cloud Netflix Hystrix |
| 分布式配置 | 無 | Spring Cloud Config |
| 服務(wù)跟蹤 | 無 | Spring Cloud Sleuth |
| 消息總線 | 無 | Spring Cloud Bus |
| 數(shù)據(jù)流 | 無 | Spring Cloud Stream |
| 批量任務(wù) | 無 | Spring Cloud Task |
| …… | …… | …… |
以上列舉了一些核心部件,大致可以理解為什么之前說Dubbo只是類似Netflix的一個子集了吧。當(dāng)然這里需要申明一點,Dubbo對于上表中總結(jié)為“無”的組件不代表不能實現(xiàn),而只是Dubbo框架自身不提供,需要另外整合以實現(xiàn)對應(yīng)的功能,比如:
分布式配置:可以使用淘寶的diamond、百度的disconf來實現(xiàn)分布式配置管理。但是Spring Cloud中的Config組件除了提供配置管理之外,由于其存儲可以使用git,因此它天然的實現(xiàn)了配置內(nèi)容的版本管理,可以完美的與應(yīng)用版本管理整合起來。
服務(wù)跟蹤:可以使用京東開源的Hydra
批量任務(wù):可以使用當(dāng)當(dāng)開源的Elastic-Job
……
雖然,Dubbo自身只是實現(xiàn)了服務(wù)治理的基礎(chǔ),其他為保證集群安全、可維護(hù)、可測試等特性方面都沒有很好的實現(xiàn),但是幾乎大部分關(guān)鍵組件都能找到第三方開源來實現(xiàn),這些組件主要來自于國內(nèi)各家大型互聯(lián)網(wǎng)企業(yè)的開源產(chǎn)品。
RPC vs REST
先來說說,使用Dubbo的RPC來實現(xiàn)服務(wù)間調(diào)用的一些痛點:
相信這些痛點也是為什么當(dāng)當(dāng)網(wǎng)在dubbox(基于Dubbo的開源擴(kuò)展)中增加了對REST支持的原因之一。
Round 4:文檔質(zhì)量
Dubbo的 文檔 可以說在國內(nèi)開源框架中算是一流的,非常全,并且講解的也非常深入,由于版本已經(jīng)穩(wěn)定不再更新,所以也不太會出現(xiàn)不一致的情況,另外提供了中文與英文兩種版本,對于國內(nèi)開發(fā)者來說,閱讀起來更加容易上手,這也是dubbo在國內(nèi)更火一些的原因吧。
Spring Cloud由于整合了大量組件,文檔在體量上自然要比dubbo多很多,文檔內(nèi)容上還算簡潔清楚,但是更多的是偏向整合,更深入的使用方法還是需要查看其整合組件的詳細(xì)文檔。另外,微信搜索公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù):面試 領(lǐng)取資料 。另外由于Spring Cloud基于Spring Boot,很多例子相較于傳統(tǒng)Spring應(yīng)用要簡單很多(因為自動化配置,很多內(nèi)容都成了約定的默認(rèn)配置),這對于剛接觸的開發(fā)者可能會有些不適應(yīng),比較建議了解和學(xué)習(xí)Spring Boot之后再使用Spring Cloud,不然可能會出現(xiàn)很多一知半解的情況。
小結(jié):雖然Spring Cloud的文檔量大,但是如果使用Dubbo去整合其他第三方組件,實際也是要去閱讀大量第三方組件文檔的,所以在文檔量上,我覺得區(qū)別不大。對于文檔質(zhì)量,由于Spring Cloud的迭代很快,難免會出現(xiàn)不一致的情況,所以在質(zhì)量上我認(rèn)為Dubbo更好一些。而對于文檔語言上,Dubbo自然對國內(nèi)開發(fā)團(tuán)隊來說更有優(yōu)勢。
總結(jié)
通過上面再幾個環(huán)節(jié)上的分析,相信大家對Dubbo和Spring Cloud有了一個初步的了解。就我個人對這兩個框架的使用經(jīng)驗和理解,打個不恰當(dāng)?shù)谋扔鳎菏褂肈ubbo構(gòu)建的微服務(wù)架構(gòu)就像組裝電腦,各環(huán)節(jié)我們的選擇自由度很高,但是最終結(jié)果很有可能因為一條內(nèi)存質(zhì)量不行就點不亮了,總是讓人不怎么放心,但是如果你是一名高手,那這些都不是問題;而Spring Cloud就像品牌機(jī),在Spring Source的整合下,做了大量的兼容性測試,保證了機(jī)器擁有更高的穩(wěn)定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎(chǔ)有足夠的了解。
從目前Spring Cloud的被關(guān)注度和活躍度上來看,很有可能將來會成為微服務(wù)架構(gòu)的標(biāo)準(zhǔn)框架。所以,Spring Cloud的系列文章,我會繼續(xù)寫下去。也歡迎各位朋友一起交流,共同進(jìn)步。
【一些文章與示例的匯總】:http://git.oschina.net/didispace/SpringBoot-Learning
-End-
