工具集, 框架集
微服务全家桶
微服务整套解决方案
不是单独的框架
一次次反复尝试注册,直到注册成功
每30秒拉取一次注册表
每30秒发送一次心跳
eureka连续3次收不到心跳, 就会删除该服务
由于网络不稳定, 15分钟内85%服务器心跳异常
保护所有的注册信息, 不删除
网络稳定后, 可以自动退出保护模式, 恢复正常
开发期间可以先关闭保护模式
eureka
AP, 强调可用性
集群 - 对等结构
zookeeper
CP, 强调一致性
集群 - 主从结构
一般不直接使用Ribbon, 而是在Feign或Zuul中集成
负载均衡
@LoadBalanced 对 RestTemplate 进行增强
请求地址用 service-id: http://item-service/....
重试
添加 spring-retry 依赖
配置重试参数
MaxAutoRetries 单台服务器重试次数
MaxAutoRetriesNextServer 更换服务器的次数
OkToRetryOnAllOperations 是否对所有类型请求都重试,默认只对GET重试
ConnectTimeout 建立连接超时时间
ReadTimeout 接收响应的超时时间
系统容错
限流
配置
添加Hystrix依赖
@EnableCircuitBreaker
降级
快速失败
@HystrixCommand(fallbackMethod="降级方法名")
添加降级方法, 实现降级代码
熔断
10秒20次请求 (必须首先满足)
50%失败, 执行降级代码
半开状态
会尝试发送一次请求
成功, 自动关闭断路器, 恢复正常
失败, 断路器继续保持打开
监控工具
利用actuator
暴露监控数据
监控端点: hystrix.stream
对 hystrix.stream 进行监控
搭建配置
Hystrix dashboard 依赖
主程序注解 @EnableHystrixDashboard
把多台服务器的监控数据聚合起来, 提供给仪表盘, 同时监控
app-config: order-service, aaa, bbb, ccc
cluster-name-expression: new String("default")
@EnableTrubine
/turbine.stream
@FeignClient(name="item-service")
public interface ItemFeignClient {
@GetMapping("/{orderId}")
JsonResult> getItems(@PathVariable String orderId)
}
默认已经启用负载均衡和重试
默认参数
MaxAutoRetries=0
MaxAutoRetriesNextServer=1
ReadTimeout=1000
添加 Hystrix 完整依赖
yml配置: feign.hystrix.enabled=true
@EnableCircuitBreaker
降级
在声明式客户端接口上, 指定一个降级类 @FeignClient(name="item-service", fallbak=ItemFB.class)
降级类必须实现"声明式客户端接口"
Hystrix dashboard
首先有: actuator依赖, hystrix完整依赖, @EnableCircuitBreaker注解
1. 暴露监控端点: hystrix.stream
2. 重启09项目
3. 访问后台服务, 产生监控数据
4. 测试监控端点是否可访问, 是否有数据
5. 在仪表盘中, 对监控端点进行监控
统一的调用入口
@EnableZuulProxy
只需要配置转发路由规则
zuul:
routes:
item-service: /item-service/**
user-service: /user-service/**
上面是默认规则
默认规则可以根据eureka注册中心的注册表,进行自动配置
继承ZuulFilter父类
在过滤器中,检查用户权限
默认启用负载均衡
默认不启用重试, 不推荐启用重试
启用重试
添加spring-retry依赖
zuul.retryable=true
配置重试参数
默认启用Hystrix
降级
实现FallbackProvider接口
用 actuator 暴露监控端点 hystrix.stream
默认使用Git存储
分支
版本历史
Tag
......
本地存储
数据库存储
Config Server依赖
Git仓库连接信息
@EnableConifigServer注解
Config客户端
config client依赖
bootstrap.yml
从eureka获取配置中心服务器的地址
指定下载的配置文件
同时刷新多台服务器的配置
向多台服务器群发刷新指令, 要求多台服务器同时刷新
配置
添加 Bus 和 RabbitMQ 依赖
添加 RabbityMQ 连接信息
刷新端点
在配置中心暴露 bus-refresh
接收刷新指令
其他服务接收刷新指令, 执行刷新操作
产生监控数据
只需要添加Sleuth依赖
分析展现监控数据
默认10%的监控数据发送到Zipkin
添加zipkin客户端依赖
zipkin.sender.type=rabbit
添加RabbitMQ依赖, 和连接信息