微服務九大特性
出自Martin Fowler的《Microservices》
- 服務組件化
- 按業務組織團隊
- 做“產品”的態度
- 智能端點與啞管道
- 去中心化治理
- 去中心化管理數據
- 基礎設施自動化
- 容錯設計
- 演進式設計
Spring Boot特性
- 支持main方法直接拉起嵌入式web容器
- 本地配置方式更友好,支持占位符 支持profile,支持啟動參數覆蓋等,支持自動配置
- 支持自動裝配等
Eureka的特性
- 服務發現的server與client,即支持注冊與發現能力。
高可用
,可以兩個(或以上)節點相互備份,通過eureka.client.serviceUrl.defaultZone配置其他兩個節點的url。server既是server也是client。- 通過注解啟用注冊中心server端能力
EnableEurekaServer
- 需要注冊的provider端只要在classpath下放spring-cloud-starter-netflix-eureka-client相關依賴,那么provider就可以自動注冊到eureka注冊中心。當然了需要在配置文件中配置eureka服務的url地址,配置項的key是eureka.client.serviceUrl.defaultZone。
- server支持配置多長時間掃描一次失效服務
- client端支持配置多長時間給server發一次心跳,支持配置多長時間沒有收到心跳就移除服務列表
- 注冊與發現時支持密碼鑒權
- 支持多注冊中心分組
Ribbon特性
- 客戶端負載均衡器,客戶端自己維護要訪問的服務端清單,比如來自於注冊中心
- 提供spring-cloud-starter-netflix-ribbon artifact ID 用於引入ribbon
- 提供ribbon+RestTemplate的客戶端負載均衡方式,那當然也提供了客戶端。
- 用心跳去維護服務端清單的健康行,支持彈性失敗
- 多種可插拔負載均衡規則: 輪詢,隨機,區域感知輪詢,響應時間權重,具體參加com.netflix.loadbalancer.IRule的實現
- 支持ribbon.MaxAutoRetries 最大重試次數配置
- 支持配置是否所有操作都能重試
- 支持配置 刷新服務端列表的時間
- 支持配置讀超時 與 連接超時 (針對HttpClient)
- 支持配置初始化的服務端列表
- 支持自定義RibbonClient
- 支持自定義負載均衡策略
Netflix ribbon自己的wiki寫的更清晰一些。
Hystrix特性
- 支持用spring-cloud-starter-netflix-hystrix 和 EnableCircuitBreaker 注解完成hystrix引入
- 支持指定fallBack時的方法,方法參數與服務方法參數相同(也就是支持參數傳遞)
- 支持 全局默認配置 動態全局配置 實例默認配置 實例動態配置 四個層次的配置覆蓋能力
- 支持用execution.isolation.strategy配置隔離策略,支持線程(默認)和信號量方式的隔離
- 支持用execution.isolation.thread.timeoutInMilliseconds指定線程執行多長時間超時然后出發fallback,默認值1000ms
- 支持用execution.timeout.enabled配置是否需要啟用線程執行超時機制,默認true
- 支持用execution.isolation.thread.interruptOnTimeout指定線程執行超時后是否終端,默認是true
- 支持用execution.isolation.thread.interruptOnCancel指定取消發生時是否要終端線程,默認false
- 支持用execution.isolation.semaphore.maxConcurrentRequests配置信號量模式下的最大並發請求數,默認10
- 支持fallback.isolation.semaphore.maxConcurrentRequests在信號量模式下callback最大並發請求數, 默認10
- 支持用fallback.enabled 指定是否啟用fallback,默認true
- 支持用circuitBreaker.enabled 指定是否啟用斷路器 默認true
- 支持用circuitBreaker.requestVolumeThreshold配置 一個滑動窗口內 多少個請求失敗后再啟用斷路器,默認是20
- 支持用circuitBreaker.sleepWindowInMilliseconds配置斷路器被觸發后生效多少時間,默認5s
- 支持用circuitBreaker.errorThresholdPercentage 配置失敗百分比達到多少時啟用斷路器並觸發fallback邏輯
- 支持用circuitBreaker.forceOpen配置在所有服務失敗時是否強制開啟斷路器,默認是false
- 支持用metrics.rollingStats.timeInMilliseconds配置時間窗口時長(斷路器要根據單位時間內的失敗數量或者比率來決定是否啟用),默認10s
- 支持用metrics.rollingStats.numBuckets設置桶的數量,默認是10
- 支持用requestCache.enabled配置是否啟用緩存,在command有getCacheKey() 方法是默認啟用此特性。 用@CacheResult注解配合@HystrixCommand注解可以開啟緩存,默認是所有方法參數作為key,也可以通過cacheKeyMethod制定getkey方法,也可以使用@CacheKey注解加載服務方法的參數上作為緩存的key,用@CacheRemove注解關閉緩存。 可以參見這里
- 支持請求合並。 支持maxRequestsInBatch配置合並批次中的請求數。 支持timerDelayInMilliseconds配置延遲時間,默認10ms。
- 支持線程池相關屬性配置。
21.支持dashboard
所有的詳細配置可參見這里和這里
Feign特性
- 支持用定義接口的方式替換了寫代碼實現遠程client調用的代碼
- 支持從請求header中拿參數作為調用遠程服務的請求參數
- 支持用ribbon和hystrix實現負載均衡與服務降級
- 支持client的日志級別配置
Zuul特性
- 支持轉發,支持轉發路由規則配置
- 支持請求過濾,ZuulFilter,自帶了多種實現
- 支持動態路由配置,需要配合spring cloud使用
- 支持動態過濾器,groovy腳本
config特性
- 可以對接git、svn、本地文件存儲
- 支持高可用,用eureka或者config server都指向同一git倉庫
- 支持配置項加密,支持密鑰配置
- 支持動態刷新配置