Spring Cloud

Spring Cloud

特点

  • 微服务是SOA思想的一种扩展。
  • 更加强调服务个体的独立性,拆分粒度更小。

思想

  • 将单一应用程序拆分为一组小型服务的方法。
  • 服务之间采取轻量级的通信机制来沟通。

六边形架构

  • 六边形架构又称为端口-适配器。
  • 六边形架构将系统分为内部(内部六边形)和外部
    • 内部代表了应用的业务逻辑。
    • 外部代表应用的驱动逻辑、基础设施或其他应用。
  • 内部通过端口和外部系统通信,端口代表了一定协议,以API呈现。一个端口可能对应多个外部系统,不同的外部系统需要使用不同的适配器,适配器负责对协议进行转换。

Eureka:服务治理与服务发现

  • @EnableEurekaServer:启动了Eureka模块。

  • @EnableDiscoveryClient:启用服务发现,新版本不需要注解。

  • 运行流程:

    • Eureka客户端启动后,定期向Eureka服务端注册自己的信息(包括服务名,IP,端口)。
    • Eureka客户端定时拉取服务端已保存的服务注册信息。
    • 拉取服务端保存的注册信息后,就可以调用其他的服务。
  • 客户端如何注册

    • Eureka客户端启动后,首先会创建一个心跳的定时任务向Eureka服务器发送心跳信息。
    • Eureka服务端响应客户端心跳,如果状态码为404,表示服务端没有客户端的信息,客户端注册服务名,IP,端口等信息带服务端中。
  • 服务端如何保存信息

    • 服务实例信息注册到了register变量(ConcurrentHashMap)中。
  • 客户端如何拉取信息

    • Eureka客户端通过定时任务拉取Eureka服务端服务信息。
    • 拉取后刷新本地已保存的信息。
    • 使用时从本地直接获取。
  • 高可用的Eureka集群

    • Eureka集群配置,指定其他Eureka服务端的地址
    eureka.client.service-url.defaultZone=
    http://localhost:10000/eureka/,http://localhost:10001/eureka/,http://localhost:10002/eureka/
    
    • Eureka集群的信息同步死循环问题
      • 注册中心判断收到的注册信息来源。
      • 如果是客户端的注册信息,则同步到其他注册中心。
      • 否则不操作。
  • 心跳机制

    • Eureka客户端启动后,会定时向服务端发送心跳数据,告知自己仍然存活。
  • 服务剔除机制

    • 针对非正常关闭服务的情况,超过一定阈值没有检查到心跳,Eureka服务器会剔除该服务。
  • 自我保护机制

    • Eureka服务端检查心跳正常占比,低于一定阈值就会触发。
    • 触发自我保护机制后,Eureka服务端锁定该服务,不让服务列表内的服务过期。

Feign:声明式服务调用

  • 基于动态代理机制,调用接口会调用Feign创建的动态代理

  • 基于接口的注解,整合了Ribbon和Hystrix,提供接口式的声明服务调用编程。

  • 使用:启动类@EnableFeignClients,调用的服务(@FeignClient(name="......"))

Ribbon:客户端负载均衡

  • @LoadBalanced:使用@LoadBalanced注解的RestTemplate使用调用调用微服务请求时,会自动实现负载均衡。

  • 通过负载均衡的算法使每个节点能够比较平均地分摊请求。

  • 某个节点故障,通过负载均衡的算法可以将故障节点排除,使后续请求分散到其他可用的节点上。

  • 负载均衡算法:随机、轮询、随机轮询、加权轮询。

Hystrix:断路器

  • @EnableCircuitBreaker:启动断路器。

  • @HystrixCommad:指定方法启用断路机制,超过一定时间(可自定义)用降级方法做请求响应,避免请求的积压。

  • 保证在一个依赖出问题的情况下,不会导致整体服务的失败,避免级联故障,提高分布式系统的弹性。

  • 通过HystrixCommand注解实现服务熔断

    • 失败的次数达到阈值,熔断该节点微服务的调用,调用服务降级方法响应。
  • 服务降级

    • 保证重要服务运行,对不重要的服务延迟使用或暂停使用。
    • 触发自动降级:超时降级,失败次数降级,故障降级,限流降级。
    • 降级后的处理策略:页面降级,延迟服务,读/写降级,缓存降级,fallback处理逻辑。
  • 通过fallbackMethod(回退函数)具体实现服务降级:

    • 在客户端完成,与服务器无关。
    • 服务熔断后,客户端准备本地的fallback回调,返回一个缺省值。

Zuul: API网关

  • EnableZuulProxy:将网关服务注册到服务注册中心中。

  • 将请求的地址映射为真实服务器的地址。

  • 路由分发,降低单个节点的负载。

  • 过滤验证码错误的请求,降低网站服务的风险。

  • 限流算法:

    • 漏桶算法:请求进入到漏桶中,漏桶限制数据的传输速率。不能实现某种程度的突发传输。
    • 令牌桶算法:以特定的速率向令牌桶投放令牌;不符合匹配规则的报文直接发送;符合匹配规则的报文需要令牌桶处理,桶中有足够的令牌,则报文可以继续被发送,令牌数量按报文长度相应地减少,达到限流的目的。

如何安全调用微服务

  • 用户提供信息给认证服务器。
  • 服务器验证成功,返回token。
  • 用户携带token访问受保护的接口。
posted @ 2020-08-01 10:04  樱空废宅  阅读(212)  评论(0)    收藏  举报