Spring Cloud Alibaba核心组件概述
概览Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。其核心组件有:Nacos:主要的功能有注册中心和配置中心,可以代替 Eureka 和 Apollo 两个组件;Sentinel:可实现流量控制、熔断降级、系统负载保护等,比Hystrix功能更加丰富;
目录
概览
Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构。
其核心组件有:
- Nacos:主要的功能有注册中心和配置中心,可以代替 Eureka 和 Apollo 两个组件;
- Sentinel:可实现流量控制、熔断降级、系统负载保护等,比Hystrix功能更加丰富;
- Dubbo:高性能的RPC通信框架;
- Seata:提供高性能和简单易用的分布式事务服务;
- Spring Cloud Gateway:高性能异步非阻塞网关;
- RocketMQ:高性能、高可靠的消息中间件。
架构图
Nacos
Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。主要的功能有注册中心和配置中心。
Nacos可以同时作为注册中心和配置中心,默认情况注册中心采用Distro协议(AP),配置中心采用Raft(CP);
Nacos client可以通过ephemeral属性设置节点为临时节点或持久节点,临时节点对应了Distro协议,持久节点对应Raft协议;
注册中心
- Distro协议是为了注册中心而创造出的协议,与Eureka类似,是一种无中心化、无持久化的AP协议;
- 服务提供者通过Nacos 客户端向服务端 Naming Service 注册临时节点,然后通过心跳连接与服务端集群保持通信;
- 服务端节点都存储所有数据,但每个节点只负责其中一部分服务的事务操作,如果一个节点收到的请求不是自己负责,则将请求转发给对应的节点处理,写入后再异步同步给其它节点;
- 当服务端节点信息发生变更时,会基于udp协议向服务消费者push变更信息,同时客户端也会通过以10s为周期的定时任务去服务端检查变更;
配置中心
- 配置中心基于Raft协议实现事务写入的强一致性,事务请求由Leader节点处理,Follower节点只处理非事务请求;
- Leader选举的时机有两个:一是集群初始化时,二是Leader宕机时;
- 客户端以长轮询方式拉取服务端的配置变更,配置变更是基于MD5比较,如果没有发生变更,长轮询请求会被服务端加入队列(超时时间为29.5s),有变更时再将结果设置到请求的response中返回给客户端;
- 服务端配置信息默认基于MySQL进行持久化存储;
Sentinel
Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 比Hystrix功能更加丰富,可基于控制台进行实时监控与实时规则修改。
Sentinel 分为两个部分:
- 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
限流
流量控制有以下几个角度:
- 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
- 运行指标,例如 QPS、线程池、系统负载等;
- 控制的效果,例如直接限流、冷启动、排队等。
熔断降级
Sentinel 采用了与 Hystrix 不一样的方法:
- 通过并发线程数进行限制(Hystrix 采用线程池隔离,需要预先创建线程池);
- 通过响应时间对资源进行降级。
控制台
Sentinel 控制台基于Spring Boot 开发,打包后可直接运行。它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。
动态规则扩展
Sentinel 提供两种方式修改规则:
- 通过 API 直接修改 (
loadRules
),这种方式只修改内存数据,一般线上环境不推荐; - 通过
DataSource
适配不同数据源修改,例如集成Nacos、Apollo、Zookeeper等,这样一来控制台便可以将变更的规则推送到统一的规则中心做持久化存储。
Seata
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
AT模式
AT 模式基于支持本地 ACID 事务的关系型数据库,是一种无侵入弱一致的2pc模式:
- 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
- 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
- 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。
关于读写的隔离:
- 写隔离:AT模式会基于全局锁保证写隔离,事务操作必须获取到全局锁才能执行commit或rollback,获取不到会重试直到超时,超时后会回滚本地事务,以此避免脏写;
- 读隔离:AT模式默认的读隔离级别为读未提交,出于性能考虑,一般的SELECT语句都不会阻塞,目前只对SELECT FOR UPDATE语句进行全局锁控制。
TCC模式
TCC 模式不依赖于底层数据资源的事务支持:
- 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
- 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
- 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。
Saga模式
Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
适用场景:
- 业务流程长、业务流程多;
- 参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口。
优点:
- 一阶段提交本地事务,无锁,高性能;
- 事件驱动架构,参与者可异步执行,高吞吐;
- 补偿服务易于实现。
缺点:
- 不保证隔离性(回滚时发现数据已被修改,导致无法回滚)。
XA模式
XA模式是分布式强一致性的解决方案,但性能低而使用较少,很多模式都是基于XA进行改进。
Spring Cloud Gateway
Spring Cloud Gateway 是 Spring 自己开发的新一代 API 网关产品。它基于 NIO 异步处理,摒弃了 Zuul 基于 Servlet 同步通信的设计,因此拥有更好的性能。
关键特性
- 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建;
- 支持动态路由,能够匹配任何请求属性上的路由;
- 支持基于 HTTP 请求的路由匹配(Path、Method、Header、Host 等);
- 过滤器可以修改 HTTP 请求和 HTTP 响应(增加/修改 Header、增加/修改请求参数、改写请求 Path 等等);
核心概念
Gateway 网关三个关键名词:路由(Route)、断言(Predicate)、过滤器(Filter)。
- Route:路由,是指一个完整的网关地址映射与处理过程。一个完整的路由包含两部分配置:断言(Predicate)与过滤器(Filter)。前端应用发来的请求要被转发到哪个微服务上,是由断言决定的,而转发过程中请求、响应数据被网关如何加工处理是由过滤器决定的。
- Predicate:断言,指定了路由的规则条件;
- Filter:过滤器,可以在请求发出的前后执行一些业务处理,如鉴权、限流、埋点等。
负载均衡
Gateway可以基于Ribbon来实现对请求URL的负载均衡,请求列表可以是配置的静态列表,也可以通过集成Nacos来实现动态列表的获取。
更多推荐
所有评论(0)