spring-cloud Alibaba

212 阅读10分钟

介绍:

Spring Cloud Alibaba 是一套基于 Spring Cloud 的开源框架,用于构建分布式应用程序和服务的工具包。它提供了一系列解决方案,帮助开发者在云原生场景中快速构建分布式应用,包括服务注册与发现、配置管理、消息总线、负载均衡、熔断器、数据治理、分布式事务等功能。

主要组件和特性:

  1. Nacos(注册中心和配置中心)

    • 提供服务注册、服务发现和配置管理功能。
    • 可以作为服务注册中心,管理微服务实例的注册与发现。
    • 可以作为配置中心,集中管理各个微服务的配置信息。
  2. Sentinel(流量控制和服务保护)

    • 提供实时的流量控制、熔断降级、系统负载保护等功能。
    • 通过实时监控、实时保护、实时控制等手段保障微服务的稳定性和可靠性。
  3. RocketMQ(消息驱动能力)

    • 提供分布式消息队列服务,支持事务消息、顺序消息、广播消息等。
    • 用于解决微服务之间的异步通信和解耦问题。
  4. Dubbo(高性能服务框架)

    • 提供高性能的远程服务调用框架,支持多种协议、负载均衡、容错机制等。
    • 可以作为微服务之间的RPC框架,用于服务间的远程调用。
  5. Seata(分布式事务解决方案)

    • 提供高性能和简单易用的分布式事务解决方案。
    • 支持全局事务管理和分布式事务协调。
  6. Alibaba Cloud SDK(云原生应用开发套件)

    • 集成阿里云SDK,提供丰富的云原生开发能力和服务。
  7. Spring Cloud Gateway(网关服务)

    • 基于Spring Cloud的API网关服务,提供动态路由、负载均衡、灰度发布等功能。

Spring Cloud Alibaba 提供了这些组件的集成和支持,使得开发者可以基于Spring Cloud和阿里巴巴的技术栈,快速搭建、部署和管理分布式应用程序,支持微服务架构的各种需求和场景。

这里我们简单带入一下nacos,sentinel,seata

nacos

下载:在nacos.io中前往github中下载压缩包即可(github下载速度非常慢,建议用迅雷下载)

在文件夹的bin目录下打开cmd窗口输入

startup.cmd -m standalone

打开游览器打开 localhost:8848

出现

image.png

就算是成功了

什么是nacos,与consul又有什么区别:

Nacos(又称阿里巴巴注册中心)是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴开发并开源,旨在帮助开发者简化微服务架构中的服务注册与发现、动态配置管理和服务健康监测等任务。

具体来说,Nacos提供了以下核心功能:

  1. 服务发现与注册:允许服务实例注册和发现,支持多种服务实例的动态注册与注销,以及服务间的基于DNS和HTTP的发现。
  2. 配置管理:提供动态配置管理功能,支持按环境管理、配置推送和即时更新,使得微服务的配置管理更为灵活和高效。
  3. 服务健康检查:支持多种健康检查方式,确保服务能够及时发现和处理故障实例,提高系统的可用性和稳定性。
  4. 动态DNS服务:支持动态DNS服务,允许通过服务名自动解析到最新的服务实例地址,简化服务间通信。
  5. 多环境支持:支持多个环境(如开发、测试、生产等)下的配置管理和服务注册,方便不同环境下的部署和管理。
  6. 扩展能力:提供了插件化的架构设计,支持自定义扩展和第三方插件集成,以应对各种复杂的场景和需求。

image.png

相关配置前往spring 官网查看

sentinel

Sentinel 是一个开源的流量控制、熔断降级、系统自适应保护的库,由阿里巴巴开发并开源。它旨在解决分布式系统中的稳定性和可靠性问题,通过实时的流量监控和自动的熔断降级机制,保护服务不被突发的流量问题击垮。

具体来说,Sentinel 提供了以下核心功能:

  1. 流量控制:对服务的入口流量进行控制,通过配置限流规则,保护后端服务免受过载的影响。
  2. 熔断降级:监控服务调用的异常率和响应时间,当服务出现异常时,自动触发熔断,避免异常的服务继续拖累整个系统。
  3. 系统自适应保护:基于实时的流量和系统指标,对服务的负载进行自动调整,防止服务在高负载时崩溃或性能下降。
  4. 实时监控:提供实时的运行指标和监控面板,方便开发者实时查看服务的运行状态和异常情况。
  5. 多维度限流:支持按资源、调用关系、时间等多种维度的限流策略,灵活适应不同的业务场景。
  6. 与Spring Cloud集成:提供了与Spring Cloud、Dubbo等常见微服务框架的集成支持,方便在现有微服务架构中快速部署和使用。

Sentinel 的设计目标是提高系统的稳定性和可用性,通过自动化的流量控制和保护机制,帮助开发者更好地管理和运维分布式系统。

同样也是在github下载jar文件运行

可以在localhost:8080中查看是否安装成功

与resilience4j比较

  • Sentinel 的规则配置和管理更加基于配置和面向运维,提供了丰富的监控和管理功能。
  • Resilience4j 更加注重于编程模型和代码级的容错处理,通过函数式风格和注解来定义容错策略,更适合开发者在代码中直接控制和配置。

从使用过程中就会发现sentinel不需要编写过多的yml文件去管控流量和异常 .也添加了限流降级和异常降级

而且一切的管控只需要在服务器上的8080端口号直接添加就行,界面化的管控显得更加通俗易懂

并且多了热点管理和权限管理

何为热点

热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作

授权规则: 在某些场景下,需要根据调用接口的来源判断是否允许执行本次请求。此时就可以使用Sentinel提供的授权规则来实现,Sentinel的授权规则能够根据请求的来源判断是否允许本次请求通过。 在Sentinel的授权规则中,提供了 白名单与黑名单 两种授权类型。白放行、黑禁止

规则持久化:

一旦我们重启微服务,sentinel规则就会消失,而在生产环境下我们需要将规则持久化

解决:将限流配置规则保存进nacos.这样每次重启后只需访问一次规则就会重新出现在sentinel配置中

seata

Seata(分布式事务解决方案)是一种开源的分布式事务解决方案,旨在解决分布式系统中的数据一致性问题。它最初由阿里巴巴开发并开源,现在是一个独立的开源项目,已经得到了广泛的社区支持和使用。

主要特性和组件:

  1. AT 模式

    • AT(两阶段提交)模式是 Seata 最常用的事务模式。它通过在业务中使用注解或者编程方式标记事务的边界,然后由 Seata 来协调分布式事务的提交和回滚,以保证数据的一致性。
  2. TM(事务管理器)

    • Seata 提供了一个全局的事务管理器(Transaction Manager),负责协调和管理分布式事务的生命周期。TM 通过注册中心来管理参与者(如数据库、消息队列等)的事务状态,并在需要时发起全局提交或者回滚操作。
  3. RM(资源管理器)

    • 资源管理器(Resource Manager)负责实际的资源操作,比如数据库的提交或者回滚。Seata 支持多种类型的资源,包括关系型数据库、NoSQL 数据库、消息中间件等。
  4. 全局事务 ID

    • Seata 使用全局唯一的事务 ID 来标识一个分布式事务,通过这个 ID 来关联和协调各个参与者的事务操作。
  5. 高可用和扩展

    • Seata 支持高可用部署,并能够水平扩展以应对大规模的分布式系统需求。它的架构设计允许灵活配置,以适应不同规模和复杂度的应用场景。
  6. 与Spring集成

    • Seata 提供了与 Spring 框架集成的支持,可以通过简单的配置和注解来实现分布式事务管理。这使得在基于 Spring 的应用中使用 Seata 变得更加简单和方便。

使用场景:

  • 微服务架构:适用于微服务架构下的分布式事务管理,确保不同服务之间的数据操作的一致性。
  • 云原生应用:对于运行在容器化和云环境中的应用程序,Seata 提供了良好的支持,能够轻松集成和部署。
  • 复杂业务场景:适用于需要跨多个服务、多个数据源进行事务管理的复杂业务场景,如订单支付、库存管理等。

Seata 的开源性质和活跃的社区使得它成为解决分布式事务问题的一种可靠选择,特别是在大规模和高并发的分布式系统中。 主要讲解AT

主要的目的就是一个服务接口可能涉及到多个数据库的变动,而当变动过程中如果发生异常要所有数据库一同回滚事务

下载seata-server(github)

修改application.yml文件(记得备份)


#  Copyright 1999-2019 Seata.io Group.

#

#  Licensed under the Apache License, Version 2.0 (the "License");

#  you may not use this file except in compliance with the License.

#  You may obtain a copy of the License at

#

#  http://www.apache.org/licenses/LICENSE-2.0

#

#  Unless required by applicable law or agreed to in writing, software

#  distributed under the License is distributed on an "AS IS" BASIS,

#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

#  See the License for the specific language governing permissions and

#  limitations under the License.

 

server:

  port: 7091

 

spring:

  application:

    name: seata-server

 

logging:

  config: classpath:logback-spring.xml

  file:

    path: ${log.home:${user.home}/logs/seata}

  extend:

    logstash-appender:

      destination: 127.0.0.1:4560

    kafka-appender:

      bootstrap-servers: 127.0.0.1:9092

      topic: logback_to_logstash

 

console:

  user:

    username: seata

    password: seata

 

 

seata:

  config:

    type: nacos

    nacos:

      server-addr: 127.0.0.1:8848

      namespace:

      group: SEATA_GROUP #后续自己在nacos里面新建,不想新建SEATA_GROUP,就写DEFAULT_GROUP

      username: nacos

      password: nacos

  registry:

    type: nacos

    nacos:

      application: seata-server

      server-addr: 127.0.0.1:8848

      group: SEATA_GROUP #后续自己在nacos里面新建,不想新建SEATA_GROUP,就写DEFAULT_GROUP

      namespace:

      cluster: default

      username: nacos

      password: nacos    
      
  #自定义修改为自己的数据库配置

  store:

    mode: db

    db:

      datasource: druid

      db-type: mysql

      driver-class-name: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql://localhost:3306/seata?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true

      user: root

      password: 123456

      min-conn: 10

      max-conn: 100
      
     

      global-table: global_table

      branch-table: branch_table

      lock-table: lock_table

      distributed-lock-table: distributed_lock

      query-limit: 1000

      max-wait: 5000

 

 

 

  #  server:

  #    service-port: 8091 #If not configured, the default is '${server.port} + 1000'

  security:

    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017

    tokenValidityInMilliseconds: 1800000

    ignore:

      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login,/metadata/v1/**

修改完后在bin目录下执行 seata-server.bat启动

只要在nacos中能够找到相关的服务就行了