一本关于spring cloud的不错入门书
本文为《spring cloud 微服务实战》读书笔记。
> actuator
应用配置类
* /autoconfig 自动化的配置信息
* /beans 所有bean的配置信息
* /configprops 配置的属性信息
* /env 可用的环境属性
* /mappings spring mvc 映射关系
* /info 自定义信息
度量指标类
* /metris 度量指标
* /health 健康指标
* /dump 程序运行中线程信息
* /trace http跟踪信息
操作控制类
* /shutdown 关闭应用
> eureka
* 服务注册
* 服务发现(使用服务名称,而不是服务实例IP地址)
说明:服务端负载均衡类似于nginx,指的是在服务端进行均衡算法分配。客户端负载均衡类似于ribbon,指的是在客户端维持一份服务器实例列表,进行算法分配。
eureka服务端:@EnableEurekaServer
eureka客户端:
@EnableDiscoveryClient
* 服务注册中心的集群
* ribbon客户端负载均衡
基础架构:
1. 服务注册中心 eureka server
2. 服务提供者 eureka client
3. 服务消费者 call eureka client API
> ribbon
rest template
* getForEntity/getForObject
* postForEntity/postForObject
* put
* delete
通过LoadBalancerIntercepter拦截器对rest template请求进行拦截,负载均衡器LoadBalancerClient是一个通用接口,实现RibbonLoadBalancerClient,具体实现是ILoadBalancer。
负载均衡策略:
* RandomRule 随机
* RoundRobinRule 线性轮询
* RetryRule 重试,使用线性轮询
* WeightedResponseTimeRule 响应时间权重
* BestAvailRule 最空闲
* PredicateBasedRule 断言(先过滤,再选择)
* AvailabilityFilteringRule 可用性
与Eureka结合时,上述很多api实现会被eureka替代。
spring-retry可以增强对rest template的重试能力
> Hystrix
主app添加:
@EnableCircuitBreaker
RxJava观察者-订阅者模式
* fallback 服务降级
依赖隔离:
* 对依赖服务的线程池隔离
* 信号量控制单个服务并发度
请求缓存:
* get不需要主动清缓存
* post 后需要清 get的缓存
@CacheResult
@CacheKey
@CacheRemove
请求合并:HystrixCollapser
batchMethod
请求合并的使用场景:
1. 请求本身高延迟
2. 延迟时间窗内并发数很高
Hystrix Dashboard
@EnableHystrixDashboard
> Feign
是Ribbon和Hystrix的高层次整合,声明式服务绑定。
基本用法:
* 主类@EnableFeignClients
* 定义接口 @FeignClient(xxx-service)
* Autowired 直接挂载xxx-service调用
代码重构:服务提供者和服务消费者均使用同样的接口定义,可考虑抽取该接口定义到公有project,服务端实现该接口,客户端继承该接口,从而减少代码冗余。
Feign中的Ribbon配置:
* 全局配置
* 特定服务配置
* 默认重试机制
Feign中的hystrix配置:
* 全局配置
* 服务降级配置(为接口编写一个实现类,在该类实现fallback逻辑)
Feign其他配置:
* 请求和响应GZIP压缩
* 日志配置
> Zuul
@EnableZuulProxy
请求路由:
建议引入eureka依赖,实现面向服务的路由。
请求过滤:
通过继承ZuulFilter抽象类并实现具体逻辑,并在主类配置该bean。
动态路由:
通过config server加载git backend的配置文件实现。
动态过滤器:
通过自定义配置类并借助groovy来实现。
> Config
动态刷新配置:
利用spring-boot-starter-actuator的refresh POST请求来刷新,POST请求体为要刷新的属性key。
更好做法是使用 spring cloud bus来实现批量刷新。
> Bus
消息总线。
支持amqp协议的有 rabbitmq和kafka。
架构1:通过具体实例刷新
config 整合 bus,更改配置后访问某service任意一个实例的/bus/refresh 来实现该service所有实例的配置刷新。
架构2:通过config-server刷新
> Stream
消息驱动,使用bingder绑定器。
发布订阅-模式
消费组
> Sleuth
分布式服务跟踪,分析各服务之间的调用关系。
traceID为请求链,和SpanID为请求单元。
与ELK的整合。
与zipkin整合。
1. 搭建zipkin server
@EnableZipkinServer
2. 为应用引入 zipkin 服务