1. 程式人生 > >比較spring cloud和dubbo,各自的優缺點是什麼

比較spring cloud和dubbo,各自的優缺點是什麼

springCloud是http協議傳輸,頻寬會比較多,同時使用http協議一般會使用JSON報文,消耗會更大

dubbo的開發難度較大,原因是dubbo的jar包依賴問題很多大型工程無法解決

springcloud的介面協議約定比較自由且鬆散,需要有強有力的行政措施來限制介面無序升級

dubbo的註冊中心可以選擇zk,redis等多種,springcloud的註冊中心只能用eureka或者自研

但如果我選,我會用springcloud。

從公司整體規劃:我不會選擇很久沒人維護的dubbo,重啟之後也未必是原班人馬

從程式設計師招聘難度:招springcloud的程式設計師會更好招,因為更新更炫

從系統結構簡易程式:springcloud的系統結構更簡單、“註冊+springmvc=springcloud”,而dubbo各種複雜的Url,protocol,register,invocation,dubbofilter,dubboSPI,dubbo序列化..........炫技的成分更多一些

從效能:dubbo的網路消耗小於springcloud,但是在國內95%的公司內,網路消耗不是什麼太大問題,如果真的成了問題,通過壓縮、二進位制、快取記憶體、分段降級等方法,很容易解

從開發難易度:dubbo的神坑是jar包依賴,開發階段難度極大,我曾經帶一個三十人的團隊,因為jar包升級問題,把每個人的電腦都操作過,尤其每個人電腦的庫路徑、命令、快捷鍵、鍵盤,滑鼠快慢都不一樣,那會兒我默默的在心中艹了dubbo發明者全家老小一百二十遍。springcloud比較自由,但帶來的問題是無法“強力約束介面規範”,建議用行政方式解決,且我們團隊的強力行政約束做的還是比較好的,在介面管控層面比較強效,一個沒有行政組織能力的IT團隊真的是個廢渣,用什麼框架都不好使。

從後續改進:dubbo的改進是通過dubbofilter,很多東西沒有,需要自己繼承,如監控,如日誌,如限流,如追蹤。springcloud自己帶了很多監控、限流措施,但是功能可能和歐美習慣相同,國內需要進行適當改造,但更簡單,就是ServletFilter而已,但是總歸比dubbo多一些東西是好的

從配套措施:springcloud一直宣稱自己是“一套全方面的解決方案”。。。。。。我起初信了,後來發現上當了,實話說:有,但是不是很健全,100分打50的樣子,很多你還需要改造。而DUBBO相反,一直宣稱自己是“一套全方面的服務化方案”。。。。。。純服務化頂個鳥用,任何系統都是相輔相成配套的,一個完整的系統,要有前臺、中臺、後臺、前臺包括前端和互動,中臺包括交易、任務、資料,後臺包括財務、賬戶、管理...........單純的服務化解決不了“任何問題”,唯有體系才能解決。在這個層面,springcloud是個往“體系”方向發展的方案,而dubbo僅是個工具而已,兩者相比,就好比始祖鳥與草履蟲的區別。

從技術實力層面:對比雙方的原始碼,不得不說dubbo作者的技術能力要高於springCloud,而springBoot的作者技術能力要高於dubbo。即:springboot>dubbo>springcloud。我喜歡springboot這種大道至簡的風格,keep it simple and stupid。而dubbo好嘛......你先看看dubboSPI,再看看Protocol$Adpative裡面那一群繞來繞去的瞎幾把繞的玩意兒,你會迅速判斷出:這群屌絲在炫技。儘管dubbo從上之下分為十層四五十個元件,第一感官上是哇塞好全面好偉大的樣子,但深入之後你會覺得,這技術是很炫,設計的確實很全面,但是用不到,例如:請各位大神給我解釋一下,在zookeeper地址中,使用逗號分隔和分號分隔地址的區別。。。。。用途不大,但是程式碼裡為了這個就走向了“完全不同”的一條分支。用俗語評價,就是“臃腫且無用程式碼過多,在文件裡還非得為了這個說出123456來”。說完dubbo再說springCloud........它沒有技術含量,完全沒有,就是一堆簡單元件拼裝在一起,如configserver、eurekaserver、robin、feignClient、htstrix等,每個都特別簡單,沒什麼技術含量,但我喜歡這種的,就喜歡這種大道至簡的簡單。

最後說springBoot,我要用“純粹”兩個字來評價這個框架,真的很純粹,並且從其程式碼架構的總體思路一致性,目標的純粹性,具體模組的乾淨利落,確實是個好框架,值得大家一讀。

從系統應用層面:在技術實力滿分一百能打85分的鄙人的眼中,dubbo和springcloud,不就是兩個框架麼?我們是要拯救世界的人,這倆塊鵝卵石一塊圓的一塊方的,能墊腳就行,沒有區別。


簡而言之,Dubbo確實類似於Spring Cloud的一個子集,Dubbo功能和文件完善,在國內有很多的成熟使用者,然而鑑於Dubbo的社群現狀(曾經長期停止維護,2017年7月31日團隊又宣佈重點維護),使用起來還是有一定的門檻。

Dubbo具有排程、發現、監控、治理等功能,支援相當豐富的服務治理能力。Dubbo架構下,註冊中心對等叢集,並會快取服務列表已被資料庫失效時繼續提供發現功能,本身的服務發現結構有很強的可用性與健壯性,足夠支援高訪問量的網站。


雖然Dubbo 支援短連線大資料量的服務提供模式,但絕大多數情況下都是使用長連線小資料量的模式提供服務使用的。所以,對於類似於電商等同步呼叫場景多並且能支撐搭建Dubbo 這套比較複雜環境的成本的產品而言,Dubbo 確實是一個可以考慮的選擇。但如果產品業務中由於後臺業務邏輯複雜、時間長而導致非同步邏輯比較多的話,可能Dubbo 並不合適。同時,對於人手不足的初創產品而言,這麼重的架構維護起來也不是很方便。

Spring Cloud由眾多子專案組成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分散式系統及微服務常用的工具,如配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、一次性token、全域性鎖、選主、分散式會話和叢集狀態等,滿足了構建微服務所需的所有解決方案。比如使用Spring Cloud Config 可以實現統一配置中心,對配置進行統一管理;使用Spring Cloud Netflix 可以實現Netflix 元件的功能 - 服務發現(Eureka)、智慧路由(Zuul)、客戶端負載均衡(Ribbon)。

但它並沒有重複造輪子,而是選用目前各家公司開發的比較成熟的、經得住實踐考驗的服務框架(我們需要特別感謝Netflix ,這家很早就成功實踐微服務的公司,幾年前把自家幾乎整個微服務框架棧貢獻給了社群,Spring Cloud主要是對Netflix開源元件的進一步封裝),通過Spring Boot 進行封裝整合並簡化其使用方式。基於Spring Boot,意味著其使用方式如Spring Boot 簡單易用;能夠與Spring Framework、Spring Boot、Spring Data 等其他Spring 專案完美融合,意味著能從Spring獲得巨大的便利,意味著能減少已有專案的遷移成本

其實,從社群活躍度和功能完整度,再對照業務需求和團隊狀況,基本可以確定如何選型。這裡分享網易考拉海購實踐以及團隊選型的心聲:

當前開源上可選用的微服務框架主要有Dubbo、Spring Cloud等,鑑於Dubbo完備的功能和文件且在國內被眾多大型網際網路公司選用,考拉自然也選擇了Dubbo作為服務化的基礎框架。其實相比於Dubbo,Spring Cloud可以說是一個更完備的微服務解決方案,它從功能性上是Dubbo的一個超集,個人認為從選型上對於一些中小型企業Spring Cloud可能是一個更好的選擇。提起Spring Cloud,一些開發的第一印象是http+JSON的rest通訊,效能上難堪重用,其實這也是一種誤讀。
微服務選型要評估以下幾點:內部是否存在異構系統整合的問題;備選框架功能特性是否滿足需求;http協議的通訊對於應用的負載量會否真正成為瓶頸點(Spring Cloud也並不是和http+JSON強制繫結的,如有必要Thrift、protobuf等高效的RPC、序列化協議同樣可以作為替代方案);社群活躍度、團隊技術儲備等。作為已經沒有團隊持續維護的開源專案,選擇Dubbo框架內部就必須要組建一個維護團隊,先不論你要準備要整合多少功能做多少改造,作為一個支撐所有工程正常運轉的基礎元件,問題的及時響應與解答、重大缺陷的及時修復能力就已足夠重要。

鑑於服務發現對服務化架構的重要性,再補充一點:Dubbo 實踐通常以ZooKeeper 為註冊中心(Dubbo 原生支援的Redis 方案需要伺服器時間同步,且效能消耗過大)。針對分散式領域著名的CAP理論(C——資料一致性,A——服務可用性,P——服務對網路分割槽故障的容錯性),Zookeeper 保證的是CP ,但對於服務發現而言,可用性比資料一致性更加重要 ,而 Eureka 設計則遵循AP原則

作者:純潔的微笑
連結:https://www.zhihu.com/question/45413135/answer/128315403
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

為什麼選擇使用Spring Cloud而放棄了Dubbo

可能大家會問,為什麼選擇了使用Dubbo之後,而又選擇全面使用Spring Cloud呢?其中有幾個原因:

1)從兩個公司的背景來談:Dubbo,是阿里巴巴服務化治理的核心框架,並被廣泛應用於中國各網際網路公司;Spring Cloud是大名鼎鼎的Spring家族的產品。阿里巴巴是一個商業公司,雖然也開源了很多的頂級的專案,但從整體戰略上來講,仍然是服務於自身的業務為主。Spring專注於企業級開源框架的研發,不論是在中國還是在世界上使用都非常廣泛,開發出通用、開源、穩健的開源框架就是他們的主業。

2)從社群活躍度這個角度來對比,Dubbo雖然也是一個非常優秀的服務治理框架,並且在服務治理、灰度釋出、流量分發這方面做的比Spring Cloud還好,除過當當網在基礎上增加了rest支援外,已有兩年多的時間幾乎都沒有任何更新了。在使用過程中出現問題,提交到github的Issue也少有回覆。

相反Spring Cloud自從發展到現在,仍然在不斷的高速發展,從github上提交程式碼的頻度和釋出版本的時間間隔就可以看出,現在Spring Cloud即將釋出2.0版本,到了後期會更加完善和穩定。

3) 從整個大的平臺架構來講,dubbo框架只是專注於服務之間的治理,如果我們需要使用配置中心、分散式跟蹤這些內容都需要自己去整合,這樣無形中使用dubbo的難度就會增加。Spring Cloud幾乎考慮了服務治理的方方面面,更有Spring Boot這個大將的支援,開發起來非常的便利和簡單。

4)從技術發展的角度來講,Dubbo剛出來的那會技術理念還是非常先進,解決了各大網際網路公司服務治理的問題,中國的各中小公司也從中受益不少。經過了這麼多年的發展,網際網路行業也是湧現了更多先進的技術和理念,Dubbo一直停滯不前,自然有些掉隊,有時候我個人也會感到有點可惜,如果Dubbo一直沿著當初的那個路線發展,並且延伸到周邊,今天可能又是另一番景象了。

Spring 推出Spring Boot/Cloud也是因為自身的很多原因。Spring最初推崇的輕量級框架,隨著不斷的發展也越來越龐大,隨著整合專案越來越多,配置檔案也越來越混亂,慢慢的背離最初的理念。隨著這麼多年的發展,微服務、分散式鏈路跟蹤等更多新的技術理念的出現,Spring急需一款框架來改善以前的開發模式,因此才會出現Spring Boot/Cloud專案,我們現在訪問Spring官網,會發現Spring Boot和Spring Cloud已經放到首頁最重點突出的三個專案中的前兩個,可見Spring對這兩個框架的重視程度。

總結一下,dubbo曾經確實很牛逼,但是Spring Cloud是站在近些年技術發展之上進行開發,因此更具技術代表性。

spring cloud整機,dubbo需要自己組裝;整機的效能有保證,組裝的機子更自由。