SpringCloud

SpringCloud组件

  • 服务注册中心/服务治理
    • Eureka:Java 写的,官网停止更新,AP,可视化页面,可以设置自我保护机制开关
    • Zookeeper:CP,Java 写的,临时节点,没有可视化页面
    • Consul:Go语言写的,CP
    • Nacos:
  • 服务调用
    • Ribbon:负载均衡+RestTemplate调用,Eureka 内置了 Ribbon,
    • LoadBalancer
    • Feign:停止更新
    • OpenFeign:可以开启日志功能,查看详细调用过程
  • 服务降级
    • Hystrix:官网停止更新,既可以用在服务端,又可以用在客户端
    • Resilience4j:国内用的比较少
    • Sentinel:阿里巴巴开发,
  • 服务网关
    • Zuul:基于阻塞IO
    • Zuul2:还没有被springcloud整合
    • Gateway:基于非阻塞IO,通信框架是 Netty
  • 服务配置
    • Config
    • Nacos
  • 服务总线
    • Bus:配合 Spring Cloud Config 实现配置的动态刷新
    • Nacos

RestTemplate

提供了多种便捷访问远程 Http 服务的方法。
是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具类集。

服务治理

SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。
在传统的 RPC 远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

服务注册与发现

Eureka 采用了 CS 的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server 并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

Eureka 的保护模式

保护模式主要用于客户端和 Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server 将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

为什么会产生 Eureka 自我保护机制

为了防止 EurekaClient 可以正常运行,但是与 EurekaServer 网络不通情况下,EurekaServer 不会立刻将 EurekaClient 服务剔除。自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可保留所有微服务也不盲目注销任何健康的微服务。使用自我保护模式,可以让 Eureka 集群更加健壮、稳定。

Consul

提供了微服务系统中的服务治理、配置中心、控制总线等功能。

  • 服务发现
  • 健康监测
  • KV 存储
  • 多数据中心
  • 可视化 Web 界面

Ribbon

Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。
提供一系列完善的配置项如:连接超时、重试等。
简单的说,就是在配置文件中列出 Load Balancer 后年所有的机器,Ribbon 会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。

Ribbon和Nginx的区别

  • Nginx是服务器负载均衡,客户端所有请求都会交给Nginx,然后由Nginx实现转发请求。
  • Ribbon是本地负载均衡,在调用微服务接口时,会在注册中心上获取信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

Feign

Feign 是一个声明式 WebService 客户端,使用 Feign 能让编写 Web Service 客户端更加简单。
它的使用方法是定义一个服务接口然后在上面添加注解。
Feign 内置了 Ribbon。

Hystrix

用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix额能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
功能:

  • 服务降级 fallback:程序运行异常、超时、服务熔断触发服务降级、线程池/信号量打满
  • 服务熔断 break
  • 服务限流 flowlimit
  • 接近实时的监控

Spring Cloud Gateway

  • 动态路由:能够匹配任何请求属性
  • 可以对路由指定 Predicate (断言)和 Filter(过滤器)
  • 集成 Hystrix 的断路器功能
  • 集成 Spring Cloud 服务发现功能
  • 易于编写的 Predicate(断言)和 Filter(过滤器)
  • 请求限流功能
  • 支持路径重写

Spring Cloud Config

为微服务架构中的微服务提供集中化的外部配置支持。

Spring Cloud Bus

是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 Java 的事件处理机制和消息中间件的功能。
目前支持 RabbitMQ 和 Kafka。

总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个公用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息。

Spring Cloud Stream

屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型。
应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中的 binder 对象交互。
通过我们配置来 binding(绑定),而 Spring Cloud Stream 的 binder 对象负责与消息中间件交互。

Nacos

naming+configuration+service
注册中心+配置中心
支持AP CP切换
Nacos 默认使用嵌入式数据库实现数据的存储。所以启动多个默认配置下的 Nacos 节点,数据存储是存在一致性问题的。
为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,目前只支持 MySQL 的存储。

Sentinel

面向原生微服务的流量控制、熔断降级组件

分布式事务

一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题

Seata

是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
1+3组件模型:
全局唯一的事务ID
TC:事务协调器。维护全局和分支事务的状态,驱动全局事务提交或回滚
TM:事务管理器。定义全局事务的范围:开启全局事务、提交或回滚全局事务
RM:资源管理器。管理分支事务处理的资源,与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚

步骤:

  • TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID
  • XID 在微服务调用链路的上下文中传播
  • RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖
  • TM 向 TC 发起针对 XID 的全局提交或回滚决议
  • TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求

AT 模式两阶段提交协议:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源
  • 二阶段:提交异步化,非常快速的完成。/ 回滚通过一阶段的回滚日志进行反向补偿。

你可能感兴趣的:(spring,cloud,spring,后端)