SpringCloud学习(组件列表)
restTemplate
一个 Spring 用来调用 http 接口的工具@LoadBalanced:template自带的负载均衡,这样就可以通过服务名称负载均衡
服务注册与发现
Eureka
Eureka Client:负责将这个服务的信息注册到Eureka Server中
Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号
各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里
Spring Boot Actuator
Spring Boot Actuator端点通过 JMX 和HTTP 公开暴露给外界访问,大多数时候我们使用基于HTTP的Actuator端点,因为它们很容易通过浏览器、CURL命令、shell脚本等方式访问。
服务发现Discovery
在集群模式下,多个服务之间获取信息,会用到服务发现插件。
启用服务发现 @EnableDiscoveryClient
@Autowired
private DiscoveryClient discoveryClient; // 服务发现对象
eureka自我保护机制
在某一刻,一个微服务不可用了,eureka不会立即删除该服务,这种机制就eureka的自我保护机制。
这样有个好处:避免因为网路卡顿造成误删服务的情况。
属于CAP里面的AP分支
如何让设置eureka的自我保护机制:
eureka:
server:
enable-self-preservation: true # 关闭自我保护机制
instance:
lease-renewal-interval-in-seconds: 1 # 间隔1秒发送心跳
lease-expiration-duration-in-seconds: 2 # 超过2秒没有发送心跳即删除服务(服务器等待最后一次心跳的上限)
这个设置应该是设置在eureka服务端上的。
Nacos
一个更易于构建云原生应用的 动态服务发现 、 配置管理 和 服务管理 平台。
备注
用 nacos 做 SPringBoot 的配置管理时, 每次修改了配置信息, SpringBoot 控制台会输出一条日志, 格式如下:
Replacing PropertySource 'resume|DEFAULT_GROUP|||127.0.0.1:8848|||||UTF-8||' with 'resume|DEFAULT_GROUP|||127.0.0.1:8848|||||UTF-8||'
Consul
Consul包含多个组件,但是作为一个整体,为你的基础设施提供 服务发现 和 服务配置 的工具。
API网关
Kong
Getwagy
Zuul
如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务
负载均衡服务调用
Ribbon:
提供客户端的软件负载均衡算法和服务调用。
服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台
IRule
ribbon的算法插件
可以根据特定算法中从服务列表中选取一个要访问的服务
服务接口调用
OpenFeign
动态代理,
声明式Restful调用
基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
就是用来在自己服务写一个对接其他服务接口的接口
Hystrix
隔离、熔断以及降级的一个框架
发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
服务降级
就是一个服务出现异常了, 或者请求时间超时了, 需要一个其他方法来处理异常或者超, 并返回相关错误信息.
OpenFeign也可以配置服务降级的, 只需要实现接口, 然后对应接口方法写降级逻辑, 并在Feign配置callback即可
服务熔断
感觉就是多个调用出现问题后, 暂停后续调用的机制.
可以避免无效调用.
Hystrix dashboard
可视化监控服务情况的.
服务隔离
???
网关
geteway
三大核心概念
- 路由
- 断言
- 过滤
路由配置
- yml配置
- 硬编码
需要RouteLocator的bean
Predicate(断言)
有请求过来时, 通过Predicate配置, 可以决定由请求拿一些服务.
有点类似过滤器, 但是他拦截的时指定配置的请求.
Ribbon
作用是负载均衡
客户端负载均衡
Config
Spring cloud config 是用来分布式集中配置的的, 可以配合git用来管理所有服务的公用配置, 达到一处更新, 处处更新的目的.
bootstrap.yml
系统级别的配置文件, 优先级比application.yml更高.
动态刷新
可以配合使用 actuator 实现动态刷新配置文件.
bus
消息总线
我的理解是: 用来广播配置更新的.
比如: 当config中配置修改了, 我们只需要通知其中一个3355服务器更新配置, 让3355去自动通知其他服务更新配置,
这样可以避免修改配置后, 需要点击多次去更新服务器配置.
cloud Stream
消息驱动: 将市场上常用消息中间件抽象, 方便开发人员使用.
推送RabbitMQ时, 相同消费则配置一个组, 这样可以保证同一个组只会消费一次.
持久化
生产者生产产生了一个消息, 如果没有消费者消费, 那么, RabbitMQ 会保存该消息, 直到有消费者消费.
这种模式就是持久化
Sleuth
链路跟踪, 查看请求都访问了哪些服务的工具
Nacos
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos就是注册中心 + 配置中心的组合
Alibaba开发的组件
Sentinel
服务熔断与限流工具
Alibaba开发的组件
流控
流量控制, 就是控制访问量的
- 直接
- 关联
关联就是: A服务挂了, 让B服务降级; 比如: 支付接口挂了, 就让下订单的接口降级. - 链路
降级
- RT
大于平均响应时间就会降级. - 异常比例
出现异常的比例超过阈值, 就会降级. - 异常数
出现异常的数量超过阈值, 就会降级.
热点key限流
何为热点: 热点即经常访问的数据
就是通过一个参数来动态限制接口的访问.
比如: 在一个接口中, 第一个参数为 1 时, 每秒访问5次, 超过就降级;
第一个参数为 5 时, 每秒访问可以允许访问 100 次.
系统规则
系统级别的规则: 比如按照CPU核心数, CPU的利用路, 总访问数来配置.
@SentinelResource
这个注解可以支持用户自定义服务降级时的兜底方法.
服务降级
fallback 和 blockhandler:fallback 是: 有异常就降级blockhander 是: 达到异常比例就降级.
如果 fallback 和 blockhander 都有, 就走 blockhander
seata
分布式事务管理器
其他
2021-12-21
今天在重新学习 eureka 时, 出现了一个报错:
Batch update failure with HTTP status code 404; discarding 1 replication tasks
Discarding 1 tasks of TaskBatchingWorker-target_eureka7003.com-7 due to permanent error
Batch update failure with HTTP status code 404; discarding 1 replication tasks
Batch update failure with HTTP status code 404; discarding 1 replication tasks
Discarding 1 tasks of TaskBatchingWorker-target_eureka7003.com-7 due to permanent error
Discarding 1 tasks of TaskBatchingWorker-target_eureka7002.com-0 due to permanent error
这个错误一直在滚动,查百度都说密码的问题,但是经过排查,其实是eureka配置的问题。
正常的 eureka 配置应该是:
eureka:
instance:
hostname: eureka7001.com # eureka服务端的实例名称
client:
register-with-eureka: false # false表示不需要注册, 因为注册中心不需要自己注册自己
fetch-registry: false # false表示自己就是注册中心, 职责是维护服务,不是检索服务
service-url:
defaultZone: http://eureka7002.com:7002/eureka/,http://admin:admin@eureka7003.com:7003/eureka/ # 设置eureka service交互地址查询服务
但是, 我写的是:
eureka:
instance:
hostname: eureka7001.com # eureka服务端的实例名称
client:
register-with-eureka: false # false表示不需要注册, 因为注册中心不需要自己注册自己
fetch-registry: false # false表示自己就是注册中心, 职责是维护服务,不是检索服务
service-url:
defaultZone: http://eureka7002.com:7002/,http://admin:admin@eureka7003.com:7003/ # 设置eureka service交互地址查询服务
其实就是 defaultZone 配置的服务地址少了 eureka/,
通过百度查询, 在这儿 看到一篇关于 eureka/ 后缀的描述,
看完后, 个人猜测应该少了 eureka/ 后导致 springcloud 无法识别注册的服务是否是 eureka 服务, 所以就一直报错.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!