注册中心Eureka
主要解决微服务之间调用时路径写死的问题,
小结:
1.服务的注册和发现,服务的心跳检测
2.可以通过DiscoverClient根据服务的名称动态获取IP地址和端口号
高可用:
互联网环境下为了保证某个服务应用一定可以提供服务,对同一个服务应用,采取冗余备份的方式搭建多台,形成一个集群
高可用解决单点问题,高并发问题
负载均衡Ribben
概念:当多个节点可选时,从多个节点选取一台服务器的策略
为什么要做负载均衡?
避免单点风险,提高并发量
Ribbon内置了多种负载均衡策略:
-
com.netflix.loadbalancer.RoundRobinRule:以轮询的方式进行负载均衡。 默认的负载均衡算法
-
com.netflix.loadbalancer.RandomRule:随机策略
-
com.netflix.loadbalancer.RetryRule:重试策略。
-
com.netflix.loadbalancer.WeightedResponseTimeRule:权重策略。会计算每个服务的权重,越高的被调用的可能性越大。
- com.netflix.loadbalancer.BestAvailableRule:最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回。
-
com.netflix.loadbalancer.AvailabilityFilteringRule:可用过滤策略。过滤掉故障和请求数超过阈值的服务实例,再从剩下的实力中轮询调用。
小结:
ribbon: 负责提供负载均衡算法 负责计算,轮训、随机和权重等等
discoveryClient: 负责从eureka注册中心中获取服务名称响应的ip和端口列表127.0.0.1:8081,127.0.0.1:8082
restTemplate: 负责http请求的发送 url
ribbon通过discoveryClient获取的url列表来选择一个,交给restTemplate发送请求
熔断降级Hystrix(豪猪)一种自我保护措施
可以使用hystrix对响应超时或者出现问题的访问进行熔断降级
雪崩效应:由于某个环节调用产生大量积压,造成的整个流程其他环节大范围出现访问积压的连锁反应
为什么会产生雪崩效应?某写调用环节不能得到及时的响应,长期的积压
怎么解决? 如果超过某个时间范围,不再继续调用,熔断,强制给出备选的响应方案,降级;
触发熔断的情况有:
服务提供者超时
服务消费者的hystrix线程池满了,为了减少整体的响应时间,直接调用本地的降级方法
服务消费者被保护的方法抛出了异常
在消费者的启动类添加相关注解:@EnableCircuitBreaker
在消费者的实现类添加注解@HystrixCommand(fallbackMethod=“xxxxx”)
配置默认超时时间,默认是1秒,可以根据情况进行修改
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000 #单位是毫秒hystrix的三种状态:
打开
关闭
半开(完全断开之后,默认5秒开启半开状态,可以尝试访问user-server1次,如果访问没问题,那么保险丝变关闭,就是完好,可以继续正常访问user-server,如果访问有问题,那么继续完全打开)
保险丝完好》》20次访问超时 完全断开》》5秒 中之内不会再去访问user服务》》有一次尝试》》成功了》》变为第一步
保险丝完好》》20次访问超时 完全断开》》5秒 中之内不会再去访问user服务》》有一次尝试》》失败
了》》变为第二步
Feign微服务之间的远程调用
使用feign解决远程调用地址拼写容易写错的问题
gateway网关
整体性能优于zuul所以用gateway
网关的核心功能:鉴权 路由 -
网关旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。
-
在微服务架构中,不同的微服务可以有不同的网络地址,各个微服务之间通过互相调用完成用户请求,客户端可能通过调用N个微服务的接口完成一个用户请求。
gateway的两种路由:
静态路由 yml配置文件写死的uri就是静态路由
动态路由 将uri改成 lb://服务名称
启动类添加@EnableDiscoveryClient -
Gateway 支持过滤器功能,对请求或响应进行拦截,完成一些通用操作。
-
Gateway 提供两种过滤器方式:“pre”和“post”
pre 过滤器,在转发之前执行,可以做参数校验、权限校验、流量监控、日志输出、协议转换等。
post 过滤器,在后端微服务响应之后并且给前端响应之前执行,可以做响应内容、响应头的修改,日志的输出,流量监控等。 -
Gateway 还提供了两种类型过滤器
GatewayFilter:局部过滤器,针对单个路由
GlobalFilter :全局过滤器,针对所有路由
Nacos
•Nacos(Dynamic Naming and Configuration Service) 是阿里巴巴2018年7月开源的项目。
•它专注于服务发现和配置管理领域 致力于帮助您发现、配置和管理微服务。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。
•一句话概括就是Nacos = Spring Cloud注册中心 + Spring Cloud配置中心。
SpringCloud的总结
1、Eureka 注册中心 ZooKeeper、consul、Nacos
2、Robbin 负载均衡
3、Hystrix 熔断器
4、Feign 远程调用
5、gateway网关(路由、鉴权)
6、 Nacos 注册配置中心