1.SpringCloud與Dubbo的區(qū)別兩者都是現(xiàn)在主流的微服務框架,但卻存在不少差異:
SpringCloud生態(tài)豐富,功能完善,更像是品牌機,Dubbo則相對靈活,可定制性強,更像是組裝機。
兩者的生態(tài)對比: Spring Cloud 的功能很明顯比 Dubbo 更加強大,涵蓋面更廣,而且作為 Spring 的旗艦項目,它也能夠與 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 項目完美融合,這些對于微服務而言是至關(guān)重要的。 使用 Dubbo 構(gòu)建的微服務架構(gòu)就像組裝電腦,各環(huán)節(jié)選擇自由度很高,但是最終結(jié)果很有可能因為一條內(nèi)存質(zhì)量不行就點不亮了,總是讓人不怎么放心,但是如果使用者是一名高手,那這些都不是問題。 而 Spring Cloud 就像品牌機,在 Spring Source 的整合下,做了大量的兼容性測試,保證了機器擁有更高的穩(wěn)定性,但是如果要在使用非原裝組件外的東西,就需要對其基礎原理有足夠的了解。 2.dubbo和Feign遠程調(diào)用的差異Feign是SpringCloud中的遠程調(diào)用方式,基于成熟Http協(xié)議,所有接口都采用Rest風格。因此接口規(guī)范更統(tǒng)一,而且只要符合規(guī)范,實現(xiàn)接口的微服務可以采用任意語言或技術(shù)開發(fā)。但受限于http協(xié)議本身的特點,請求和響應格式臃腫,其通信效率相對會差一些。 Dubbo框架默認采用Dubbo自定義通信協(xié)議,與Http協(xié)議一樣底層都是TCP通信。但是Dubbo協(xié)議自定義了Java數(shù)據(jù)序列化和反序列化方式、數(shù)據(jù)傳輸格式,因此Dubbo在數(shù)據(jù)傳輸性能上會比Http協(xié)議要好一些。 不過這種性能差異除非是達極高的并發(fā)量級,否則無需過多考慮。 學習資料:Java進階視頻資源 相關(guān)資料:
1)Rest風格REST是一種架構(gòu)風格,指的是一組架構(gòu)約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。 Rest的風格可以完全通過HTTP協(xié)議實現(xiàn),使用 HTTP 協(xié)議處理數(shù)據(jù)通信。REST架構(gòu)對資源的操作包括獲取、創(chuàng)建、修改和刪除資源的操作正好對應HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。 因此請求和想要過程只要遵循h(huán)ttp協(xié)議即可,更加靈活 SpringCloud中的Feign就是Rest風格的調(diào)用方式。 2)RPCRemote Procedure Call,遠程過程調(diào)用,就是像調(diào)用本地方法一樣調(diào)用遠程方法。 RPC一般要確定下面幾件事情:
因為有序列化和反序列化的需求,因此對數(shù)據(jù)傳輸格式有嚴格要求,不如Http靈活 Dubbo協(xié)議就是RPC的典型代表。學習資料:Java進階視頻資源 我們看看Dubbo協(xié)議和Feign的調(diào)用區(qū)別: 3.Eureka和Zookeeper注冊中心的區(qū)別SpringCloud和Dubbo都支持多種注冊中心,不過目前主流來看SpringCloud用Eureka較多,Dubbo則以Zookeeper為主。兩者存在較大的差異:
4.SpringCloud中的常用組件有哪些?Spring Cloud的子項目很多,比較常見的都是Netflix開源的組件: Spring Cloud Config 集中配置管理工具,分布式系統(tǒng)中統(tǒng)一的外部配置管理,默認使用Git來存儲配置,可以支持客戶端配置的刷新及加密、解密操作。 Spring Cloud Netflix Netflix OSS 開源組件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心組件。
Spring Cloud Bus 用于傳播集群狀態(tài)變化的消息總線,使用輕量級消息代理鏈接分布式系統(tǒng)中的節(jié)點,可以用來動態(tài)刷新集群中的服務配置。 Spring Cloud Consul 基于Hashicorp Consul的服務治理組件。 Spring Cloud Security 安全工具包,對Zuul代理中的負載均衡OAuth2客戶端及登錄認證進行支持。 Spring Cloud Sleuth Spring Cloud應用程序的分布式請求鏈路跟蹤,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟蹤。 Spring Cloud Stream 輕量級事件驅(qū)動微服務框架,可以使用簡單的聲明式模型來發(fā)送及接收消息,主要實現(xiàn)為Apache Kafka及RabbitMQ。 Spring Cloud Task 用于快速構(gòu)建短暫、有限數(shù)據(jù)處理任務的微服務框架,用于向應用中添加功能性和非功能性的特性。 Spring Cloud Zookeeper 基于Apache Zookeeper的服務治理組件。 Spring Cloud Gateway API網(wǎng)關(guān)組件,對請求提供路由及過濾功能。 Spring Cloud OpenFeign 基于Ribbon和Hystrix的聲明式服務調(diào)用組件,可以動態(tài)創(chuàng)建基于Spring MVC注解的接口實現(xiàn)用于服務調(diào)用,在Spring Cloud 2.0中已經(jīng)取代Feign成為了一等公民。 5.微服務調(diào)用關(guān)系復雜,如何做監(jiān)控和錯誤排查?企業(yè)中對于微服務監(jiān)控有一套東西,叫做APM。比如:SpringCloudSeluth+Zipkin,Pinpoint、Skywalking,可以實現(xiàn)性能監(jiān)控、鏈路跟蹤(精確到某個代碼,某條sql)、CPU運行情況,鏈路運行耗時。 當然, 還可以借助于分布式日志管理系統(tǒng)。把項目運行的日志收集,形成統(tǒng)計報表,放入elasticsearch,便于搜索查看。比如:ELK技術(shù)棧、GrayLog 6.Hystix的作用是什么?Hystix是Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程服務、第三方庫,防止出現(xiàn)級聯(lián)失敗。比較常用的手段就是線程隔離和服務熔斷。 |
|
來自: 錦七七 > 《java技術(shù)》