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

三大核心概念

  1. 路由
  2. 断言
  3. 过滤

路由配置

  1. yml配置
  2. 硬编码
    需要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开发的组件

流控

流量控制, 就是控制访问量的

  1. 直接
  2. 关联
    关联就是: A服务挂了, 让B服务降级; 比如: 支付接口挂了, 就让下订单的接口降级.
  3. 链路

降级

  1. RT
    大于平均响应时间就会降级.
  2. 异常比例
    出现异常的比例超过阈值, 就会降级.
  3. 异常数
    出现异常的数量超过阈值, 就会降级.

热点key限流

何为热点: 热点即经常访问的数据

就是通过一个参数来动态限制接口的访问.
比如: 在一个接口中, 第一个参数为 1 时, 每秒访问5次, 超过就降级;
第一个参数为 5 时, 每秒访问可以允许访问 100 次.

系统规则

系统级别的规则: 比如按照CPU核心数, CPU的利用路, 总访问数来配置.

@SentinelResource

这个注解可以支持用户自定义服务降级时的兜底方法.

服务降级

fallbackblockhandler:
fallback 是: 有异常就降级
blockhander 是: 达到异常比例就降级.

如果 fallbackblockhander 都有, 就走 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 协议 ,转载请注明出处!