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 协议 ,转载请注明出处!