目录
目录
springcloud的优点?
- springcloud是一系列框架的集合,它利用了Springboot开发简便性简化分布式基础设置的开发,
- 如服务发现注册,配置中心,消息总线,负载均衡,断路器,数据监控都可用springboot做到一键启动和配置,
- 把各家成熟的服务框架组合起来,通过springboot封装屏蔽掉复杂的配置和实现原理,简单易懂,已部署和好维护的分布式系统开发包
- 标准化的、一站式的技术方案
springcloud与Doubbo的区别?
- 初始定位不同: SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理
- 生态环境不同: SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。
- 调用方式: SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。
- 组件差异比较多,例如SpringCloud注册中心一般用Eureka,而Dubbo用的是Zookeeper
- SpringCloud生态丰富,功能完善,更像是品牌机,Dubbo则相对灵活,可定制性强,更像是组装机。
- SpringCloud:Spring公司开源的微服务框架,SpirngCloud 定位为微服务架构下的一站式解决方案。
- Dubbo:阿里巴巴开源的RPC框架,Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断
eurka的配置
eureka:
server:
enable-self-preservation: falseeureka的自我保护:15分钟心跳失败超过85%,Eureka Server保护信息,发出警告,进入保护模式,不删不销毁微服务
instance:
hostname: eureka1集群通过 hostname来区分
client:
register-with-eureka: false不向自身注册
fetch-registry: false不从自身拉取注册信息
lease-renewal-interval-in-seconds
心跳间隔时间30s
lease-expiration-duration-in-seconds
最后一次心跳,认为微服务不可用 ,默认90
defaultZone,
默认位置,eureka服务器的部署位置
registry-fetch-interval-seconds
拉去注册表间隔30s
eureka 都要配置那些东西?
- 自我保护机制,15min85% 就开启保护机制,不删不改
- 集群区分是否从自身注册和拉去
- 不可用的微服务,90s
- 心跳每次30s,拉去消息也是30s
- 部署位置
@EnableEurekaServer---启动类,启动eurka客户端
@EnableDiscoveryClient--让注册中心发现配置,可以扫描到改服务
@LoadBalanced ---负载均衡 注解,对
RestTemplate实例进行封装,创建动态代理对象,加入aop负载均衡代码,把请求分发到集群中服务器中
RIBBON
RestTemplate
是用来调用其他微服务的工具类,封装了远程调用代码,提供了一组用于远程调用的模板方法
ConnectionTimeout
建立连接等待超时时间
ReadTimeout等待接受响应的超时时间
OkToRetryOnAllOperations=true
默认只对GET请求重试, 当设置为true时, 对POST等所有类型请求都重试
MaxAutoRetriesNextServer
更换服务器的次数
MaxAutoRetries
单台服务器重试次数
通过SimpleClientHttpRequestFactory()设置超时,不开始就不会有重试。
Hystrix 断路器
@EnableCircuitBreaker
启用 hystrix 断路器
降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级
@SpringCloudApplication可以代替
@EnableCircuitBreaker
和@EnableDiscoveryClient @SpringBootApplication@HystrixCommand(fallbackMethod = "getItemsFB") 指定降级方法的方法名
服务请求出错,降级后要返回的方法(降级方法的参数和返回值,需要和原始方法一致,方法名任意)
hystrix 超时设置: 等待超时,执行降级,超时时间小于ribbon
配置监控工具
hystrix dashboard 断路器仪表盘
对hystrix 对请求的降级和熔断进行监控
actuator是什么?
配置仪表表盘
@EnableHystrixDashboard 启动仪表盘,进行监控
hystrix + turbine 集群聚合监控?
优点:hystrix dashboard 一次只能监控一个服务实例,使用 turbine 可以汇集监控信息,将聚合后的信息提供给 hystrix dashboard 来集中展示和监控
turbine:
app-config: order-service
cluster-name-expression: new String("default")
@EnableTurbine 开启trubine集群
hystrix 熔断
- 10S内产生超过20次请求,
- 请求错误大于阙值,打开断路器,50%
- 5s后,处于半开状态,发请求,失败,保持打开,成功,关闭
feign 声明式客户端接口
- 用 feign 代替 hystrix+ribbon
- 如果 score 参数名与变量名不同,需要添加参数名设置:@RequestParam(“score”)
@EnableDiscoveryClient
feign 启用 hystrix
feign.hystrix.enabled=true
zuul API网关
- zuul API 网关,为微服务应用提供统一的对外访问接口。
- zuul 还提供过滤器,对所有微服务提供统一的请求校验。
配置zuul
zuul: routes: 路由配置可以省略,缺的用服务id作为访问路径,用**简写
item-service: /item-service/**
user-service: /user-service/**
order-service: /order-service/**
@EnableZuulProxy
启动zuul网关
zuul + hystrix 降级
- getRoute() 方法中指定应用此降级类的服务id,星号或null值可以通配所有服务
实现FallbackProvider,ClientHttpResponse中封装降级响应
zuul 请求过滤
定义过滤器,继承ZuulFilter,重写里头的方法,都过滤直接返回true
问题:eureka客户端向eureka注册时, 会自动选择网卡, 并可能注册主机名而不是ip地址.?
1.选择正确的网卡
bootstrap.yml
spring:
cloud:
inetutils:
ignored-interfaces: # 忽略的网卡
- VM.* #.是任意字符
preferred-networks: # 要是用的网卡的网段
- 192\.168\.0\..+
2.注册ip地址,而不是主机名
问题:注册时,有可能自动选择主机名进行注册,而不使用ip地址. 主机名在局域网内有可能不会被正确的解析,最好使用ip地址进行注册,而不注册主机名
DNS--把主机名解析成ip地址
在应用配置application.yml
中配置:
eureka:
instance:
prefer-ip-address: true # 使用ip进行注册
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # 界面列表中显示的格式也显示ip
config 配置中心
yml配置文件保存到git服务器,从服务器获取配置文件
spring:
cloud:
config:#设置禁止配置中心的配置将客户端配置覆盖掉
override-none: true
配置刷新
spring cloud 允许运行时动态刷新配置,可以重新从配置中心获取新的配置信息
-
yml 配置文件中暴露 refresh 端点
- 只允许对添加了
@RefreshScope
或@ConfigurationProperties
注解的 Bean 刷新配置,可以将更新的配置数据注入到 Bean 中
sleuth 链路跟踪
可以跟踪调用链路,分析链路中每个节点的执行情况
[服务id,请求id,span id,是否发送到zipkin]
- 请求id:请求到达第一个微服务时生成一个请求id,该id在调用链路中会一直向后面的微服务传递
- span id:链路中每一步微服务调用,都生成一个新的id
sleuth + zipkin 链路分析
zipkin 可以收集链路跟踪数据,提供可视化的链路分析,10%可以被发送到zipkin
spring:
sleuth:
sampler:
probability: 0.1