Spring Cloud Alibaba核心组件概述

2023-10-27

目录

 

概览

Nacos 

注册中心

配置中心

Sentinel

限流

熔断降级

控制台

动态规则扩展

Seata

AT模式

TCC模式

Saga模式

XA模式

Spring Cloud Gateway

关键特性

核心概念

负载均衡

 


概览

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来实现动态列表的获取。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Cloud Alibaba核心组件概述 的相关文章

随机推荐

  • 线程池参数配置与Linux CPU

    1 线程池核心线程数配置 1 核心线程计算 计算密集型 cpu的个数 1 IO密集型 2 cpu个数 1 2 linux查看cpu核数 查看物理CPU个数 cat proc cpuinfo grep physical id sort uni
  • Educoder--Java高级特性 - 多线程基础(2)常用函数

    注意啦 这期的复制又恢复正常了 第一题 有三种原因可以导致线程不能运行 它们是 A 等待 B 阻塞 C 休眠 D 挂起及由于I O操作而阻塞 Java语言中提供了一个 线程 自动回收动态分配的内存 A 异步 B 消费者 C 守护 D 垃圾收
  • 字符串截取大全

    C 几个经常用到的字符串的截取 string str 123abc456 int i 3 1 取字符串的前i个字符 str str Substring 0 i or str str Remove i str Length i 2 去掉字符串
  • [C语言]猜数字

    本文章为c语言猜数字小游戏的教学 设计思路 目录 1 菜单的创建 2 猜数字的实现 3 完整代码 1 菜单的创建 先设计一个类似菜单的界面 供选择来实现游戏或退出 void menu printf n printf 猜数字 n printf
  • iTween基础之Look(使对象面朝指定位置)

    一 基础介绍 二 基础属性 原文地址 http blog csdn net dingkun520wy article details 50578142 一 基础介绍
  • 【Java基础】关于语言:编译型与解释型

    编译型 一 定义 使用专门的编译器 针对特定的平台 将高级语言源代码一次性的编译成可被该平台硬件执行的机器码 并包装成该平台所能识别的可执行性程序的格式 二 特点 程序执行前需要专门的一个编译过程 将源代码编译成机器语言 如 exe后缀的文
  • Python调用sort函数自定义排序函数

    当有一组比较复杂的对象需要进行排序时 我们的第一想法就是尽量利用已有的函数快速完成自己的排序需求 接触过c 的码友应该知道 在c 里若想利用已有的sort函数来完成复杂的排序 对运算符进行重载即可 好久没接触过c 里的概念 应该是这个叫法
  • java项目连接mysql卡死_我的Java连接数据库之后就卡住了 不能输出结果 到底是为什么呢?程序的功能是要完成一个地址的最大正向查...

    以下是基本的函数实现最重要的是第四个要实现街道的最大正向查找 ResultSetrs s executeQuery sql if rs next Stringpostaddress rs getString 1 Joutput setTex
  • 用Python开始机器学习(5:文本特征抽取与向量化)

    假设我们刚看完诺兰的大片 星际穿越 设想如何让机器来自动分析各位观众对电影的评价到底是 赞 positive 还是 踩 negative 呢 这类问题就属于情感分析问题 这类问题处理的第一步 就是将文本转换为特征 因此 这章我们只学习第一步
  • Hyperledger Fabric 应用实战(3)--配置文件core.yaml

    1 简介 core yaml主要是为Peer服务提供一些配置定义 当Peer节点启动时 会先从命令行获取参数 环境变量 和core yaml读取配置信息 通过docker去搭建一个Peer服务 命令行默认是不带参数的 主要通过docker
  • 考研 打赢这场信息站 上岸

    23考研已经结束了 新的考研马上开始 考研 是一个 持久战 也是一个 信息战 因为大多数同学都是自我监督 自我学习 所以经常出现想要摆烂 放弃的念头 意念坚定的同学只占一小部分 这个时候我们就要先在考研之前进行问题分析 这是一个非常非常重要
  • Spark Streaming入门

    什么是Spark Streaming 首先 什么是流 streaming 数据流是连续到达的无穷序列 流处理将不断流动的输入数据分成独立的单元进行处理 流处理是对流数据的低延迟处理和分析 Spark Streaming是Spark API核
  • openssl常用参数

    文章目录 前言 对称加密 标准语法 常用选项 应用示例 单向加密 标准语法 常用选项 应用示例 参考文档 前言 OpenSSL 是一个开源项目 可以实现 秘钥证书管理 对称加密和非对称加密 其主要由一下三个组件组成 openssl 多用途的
  • Synchronized与锁升级

    目录 1 先从阿里及其他大厂面试题说起 2 路线总纲 3 Synchronized的性能变化 4 Synchronized锁种类及升级步骤 4 1多线程访问情况 3种 4 2升级流程 4 3无锁 4 4偏向锁 4 5轻量级锁 4 6重量级锁
  • 【经典】springboot 配置文件统一管理

    背景 为实现快速搭建和开发 项目以Springboot框架搭建 springboot搭建的项目可以将项目直接打成jar包并运行 无需自己安装配置Tomcat或者其他服务器 是一种方便快捷的部署方式 假设项目以最常规的方式打包成一个整体的ja
  • Onvif协议学习:7、鉴权认证

    Onvif协议学习 7 鉴权认证 文章目录 Onvif协议学习 7 鉴权认证 1 前言 2 ONVIF哪些接口需要认证 3 如何认证 4 安装OpenSSL 5 实现认证 6 特别注意 原文链接 https blog csdn net be
  • QT学习(十九)——用QFile读写文件

    写文件 两种方法 1 第一种使用QString获取编辑区的内容之后直接用toUtf8 转化为QByteArray 2 第二种使用QString获取编辑区的内容之后先转化成std string 再转换成char 不过最后的文件类型都是UTF
  • Zookeeper(一)简介说明

    1 1 什么是Zookeeper Zookeeper是一个高效的分布式协调服务 它暴露了一些公用服务 比如命名 配置管理 同步控制 群组服务等 我们可以使用ZK来实现比如达成共识 集群管理 leader选举等 Zookeeper是一个高可用
  • 编写高质量代码:改善Java程序的151个建议(第9章:多线程和并发___建议125~131)

    建议125 优先选择线程池 建议126 适时选择不同的线程池来实现 建议127 lock与synchronized是不一样的 建议128 预防线程死锁 建议129 适当设置阻塞队列的长度 建议130 使用CountDownLatch协调子线
  • Spring Cloud Alibaba核心组件概述

    目录 概览 Nacos 注册中心 配置中心 Sentinel 限流 熔断降级 控制台 动态规则扩展 Seata AT模式 TCC模式 Saga模式 XA模式 Spring Cloud Gateway 关键特性 核心概念 负载均衡 概览 Sp