本文源碼:GitHub·點這裏 || GitEE·點這裏git
1)、基礎組件github
Ribbon和Feign組件,實現負載均衡spring
2)、應用案例架構
基於SpringCloud實現Shard-Jdbc的分庫分表擴容
3)、後續更新
該案例主要基於SpringCloud2版本,演示微服務在實際開發中的應用。
<modules> <!-- 客戶端接口層 --> <module>storey-client-web</module> <!-- 公共代碼塊層 --> <module>storey-block-code</module> <!-- 中間件管理層 --> <module>storey-middle-soft</module> <!-- 數據 中 心層 --> <module>storey-data-center</module> <!-- 微服務組件層 --> <module>storey-cloud-ware</module> </modules>
採用版本
Eureka是一種基於REST的服務,主要用於AWS雲,用於定位服務,以實現中間層服務器的負載平衡和故障轉移。此服務稱爲EurekaServer。客戶端組件EurekaClient,它使與服務的交互變得更加容易。
Ribbon是一個客戶端的負載均衡(Load Balancer,簡稱LB)器,它提供對大量的HTTP和TCP客戶端的訪問控制。
Feign 是一個聲明式的 Web Service 客戶端。它的出現使開發 Web Service 客戶端變得很簡單。使用 Feign 只須要建立一個接口加上對應的註解,好比:@FeignClient 接口類註解。
微服務架構中某個微服務發生故障時,要快速切斷服務,提示用戶,後續請求,不調用該服務,直接返回,釋放資源,這就是服務熔斷。
微服務架構中爲了保證程序的可用性,防止程序出錯致使網絡阻塞,出現了斷路器模型。斷路器的情況反應程序的可用性和健壯性,它是一個重要指標。HystrixDashboard是做爲斷路器狀態的一個組件,提供了數據監控和直觀的圖形化界面。
Zuul 網關主要提供動態路由,監控,彈性,安全管控等功能。在分佈式的微服務系統中,系統被拆爲了多個微服務模塊,經過zuul網關對用戶的請求進行路由,轉發到具體的後微服務模塊中。
在微服務系統中,服務較多,相同的配置:如數據庫信息、緩存、參數等,會出如今不一樣的服務上,若是一個配置發生變化,須要修改不少的服務配置。spring cloud提供配置中心,來解決這個場景問題。
Zipkin是SpringCloud微服務系統中的一個組件,實現了鏈路追蹤解決方案。能夠定位一個請求到底請求了哪些具體的服務。在複雜的微服務系統中,若是請求發生了異常,能夠快速捕獲問題所在的服務。
SpringBoot專一於快速開發單個微服務。SpringCloud是關注全局的微服務協調框架,它將SpringBoot開發的單個微服務整合管理,併爲微服務之間提供,配置管理、服務發現、斷路器、路由網關等集成服務,SpringCloud依賴SpringBoot。
服務調用方式是 Dubbo 和 Spring Cloud 重要不一樣點,熟悉RPC/HTTP/REST概念,有助對比 Dubbo 和SpringCloud。RPC 是遠端過程調用,其調用協議一般包含傳輸協議和編碼協議。RPC調用是面向服務的封裝,針對服務的可用性和效率等都作了優化。http是超文本傳輸協議,RPC 也能夠用http做爲傳輸協議,但通常是用 tcp做爲傳輸協議。
Dubbo 採用單一長鏈接和NIO異步通信(保持鏈接/輪詢處理),使用自定義報文的TCP協議,而且序列化使用定製Hessian2框架,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的狀況,但不適用於傳輸大數據的服務調用。Spring Cloud 直接使用 HTTP 協議,在性能上弱於Dubbo。
這裏一般指ZooKeeper(Dubbo註冊中心)和Eureka(Cloud註冊中心)的對比。分佈式領域著名的CAP理論(C:數據一致性,A:服務可用性,P:分區故障的容錯性),Zookeeper保證的是CP,但對於服務發現而言,可用性比數據一致性更加劇要,AP賽過CP,而 Eureka 設計則遵循 AP 原則。
Dubbo 專一 RPC 和服務治理,Spring Cloud 則是一個微服務架構生態。
GitHub·地址 https://github.com/cicadasmile/spring-cloud-base GitEE·地址 https://gitee.com/cicadasmile/spring-cloud-base