微服务九大特性
出自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仓库
- 支持配置项加密,支持密钥配置
- 支持动态刷新配置