Spring Cloud 專一於提供良好的開箱即用經驗的典型用例和可擴展性機制覆蓋。
- 分佈式/版本化配置
- 服務註冊和發現
- 路由
- service-to-service調用
- 負載均衡
- 斷路器
- 全局鎖
- Leadership選舉與集羣狀態
- 分佈式消息傳遞
Commons
Spring Cloud Commons 提供了兩個類庫: Spring Cloud Context and Spring Cloud Commons.
Spring Cloud Context 提供應用(bootstrap context, encryption, refresh scope 和 envirionment endpoints)中ApplicationContext實用應用和的特定服務
Bootstrap Context 改變Bootstrap的位置Properties 覆蓋遠程Properties的值 自定義引導配置 環境變化 。
TextEncryptor beans
Refresh Scope
Spring Boot Actuator endpoints
Spring Cloud Commons 是其它組件(Netflix與Consul)的抽象通用類。
DiscoverClient接口,提供註解 @EnableDiscoveryClient, 默認狀況下,DiscoveryClient的實現將使用遠程發現服務器自動註冊本地Spring Boog 服務器。
ServiceRegistry接口 容許提供自定義的註冊服務。
RestTemplate 作爲虛擬主機調用及負載均衡器客戶端。
重試失敗的請求: RestTemplate能夠配置爲重試失敗的請求,默認狀況下,該邏輯被禁用,能夠經過配置來設置: spring.cloud.loadbalancer.retry.enabled=false。可使用屬性 client.ribbon.MaxAutoRetries, client.ribbon.MaxAutoRetriesNextServer和client.ribbon.OkToRetryOnAllOperations.
Config
Spring Cloud Config 爲分佈式系統中的外部化配置提供服務器和客戶端支持。客戶端和服務器映射的概念與Spring Environment和PropertySource抽象相同中。服務器存儲後端的默認實現使用git。
Spring-cloud-config-server 該服務是一個spring boot 應用程序。
服務器可使用@EnableConfigServer,配置application.properties文件:spring.cloud.config.server.git.uri
Netflix eureka
服務發現 Eureka。
註冊Eureka: 客戶端啓動類添加:@EnableEurekaClient,配置文件添加:eureka.client.serverUrl.defaultZone=http://localhost:8761/eureka/ 啓動後會向服務端註冊本身服務: spring.application.name與 server.port.
eureka服務端:啓動類添加:@@EnableEurekaServer
Netflix Hystrix
斷路器,在特定服務的請求達到必定的閾值時,Hystrix回退防止級聯故障。
啓動類添加: @EnableCircuitBreaker
在需在添加斷路器的方法以下:
@Component public class StoreIntegration { @HystrixCommand(fallbackMethod = "defaultStores") public Object getStores(Map<String, Object> parameters) { //do stuff that might fail } public Object defaultStores(Map<String, Object> parameters) { return /* something useful */; } }
Hystrix儀表板,啓動類添加@EnableHystrixDashboard,訪問 /hystrix,會顯示斷路器狀況。
Netflix Ribbon 客戶端負載均衡
Ribbon是一個客戶端負載均衡器,提供功能:負載均衡 Load balancing、容錯 Fault tolerance、多協議 Multiple protocol support in an asynchronos and reactive model、緩存 Caching and batching.
在定義RestTemplate類上添加註解 @LoadBalanced,能夠將Ribbon結合到RestTemplate中使用。
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
SimpleClientHttpRequestFactory clientFactory = new SimpleClientHttpRequestFactory();
clientFactory.setConnectTimeout(5 * 60 * 1000);
clientFactory.setReadTimeout(5 * 60 * 1000);
return new RestTemplate(clientFactory);
}
Netflix Feign
feign是聲明式的web service客戶端,它讓微服務之間的調用變得更簡單了,相似controller調用service。 Feign底層合用了ribbon做爲負賁均衡。
啓動類添加註解: @FeignClient
@FeignClient(value = "CART") public interface CartFeignClient { @PostMapping("/cart/{productId}") Long addCart(@PathVariable("productId")Long productId); }
使得調用遠程接口時,像調用本地方法同樣。
Netflix Zuul
Zuul是一個API Gateway服務器,提供動態路由、監控、彈性、安全等邊緣服務。是否能夠替換nginx?
Netflix Turbine
將每個(指定)服務的Hystrix/stream中的狀態信息取出,並集中處理(計算與展現),主要配合Hystrix使用。
Stream
Spring cloud stream 是一個構建消息驅動微服務的框架,應用程序經過inputs 或者outputs來與Spring Cloud Stream中binder交互。解決了開發人員無感知的使用消息中間件的問題。
Bus
Spring Cloud Bus 就是藉助消息驅動來實現將消息(事件)廣播到各個服務順,而後服務對這些地消息進行消費,基於Stream來完成跨服務的消息傳輸。 是跨服務的Spring的事件機制的實現。
Sleuth
Spring Cloud Sleuth實現了分佈式鏈路跟蹤解決方案。引用包後,能夠在日誌中打印traceId與spanId等,也能夠將信息上報到zipkin.
Consul
Consul是HashiCorp公司推出的開源工具,用於實現分佈式系統的服務發現與配置。內置了服務註冊與發現框架、分佈一致性協議實現、健康檢查、key/value存儲、多數據中心方案,使用Go語言編寫。eureka2.X已經中止開發,Consul是一個很好的替代。
Zookeeper
Spring cloud zookeeper能夠藉助zookeeper實現配置中心的功能。但CAP原則中只實現了CP
C Consistency 數據一致性
A Availability 可用性
P Partition Tolerance 分區容錯性
CLI
CLI(Command Line Interface)提供Spring啓動命令行功能,能夠用於命令行運行像Eureka, Config Server等經常使用服務:
spring cloud eureka configserver h2 kafka zipkin
Security
Spring Security 致力於Java 應用提供認證和受權管理。能夠基於RBAC(基於角色的權限控制)對用戶的訪問權限進行控制,核心思路是經過一系列的filter chain 來進行攔截過濾。
參考資料: