Spring Cloud和Spring Cloud Alibaba

Spring Cloud和Spring Cloud Alibaba

1.spring Cloud是什么?

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导层选举、分布式对话、集群状态)。分布式系统的协调导致了锅炉板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。他们在任何分布式环境中都能很好的工作,包括开发人员自己的笔记本电脑、数据中心,托管平台。

Spring Cloud是由Spring提供的一套能够快速搭建微服务架构程序,解决分布式微服务框架中各种问题的框架集(每个框架都针对微服务中问题提供了解决方案)

框架集表示Spring Cloud不是一个框架,而是很多框架的集合。

1.1 Spring Cloud Alibaba

Spring Cloud Alibaba和Spring Cloud的关系。

spring cloud提供的是接口 alibaba是根据这套接口实现的功能

一站式解决方案的选型

1.2 阿里巴巴的组件

nacos:注册中心,基础,配置中心

dubbo:远程调用 rpc框架

sentinel:熔断限流

rocketMQ:异步通信,提升性能

1.3 Spring Cloud原生组件

spring cloud gateway:网关

2、Nacos介绍

Nacos致力于帮助您发现、配置和管理微服务,Nacos提供了一组简单易用的特性集,帮助您快速发现实现动态服务发现、服务配置、服务元数据以及流量管理。

Nacos在微服务架构中,实现使用的功能包括 服务治理,配置的管理

当前时长上任何一种微服务落地方案,都需要这种软件存在,即使不使用nacos,也需要别的相同功能的软件技术来带提(console eureka zookeeper)

2.1 核心功能

注册中心:

        发现(抓取 查询)

        注册(新增)

配置中心

Nacos启动脚本:尽量在没有中文以及空格的目录下启动

startup.cmd -m standalone

 startup.cmd 是一个 Windows 平台下的脚本文件,用于执行一系列命令以启动应用程序。而-m standalone 参数指示应用程序以独立模式(standalone mode)启动。

停止关闭Nacos服务端

直接在cmd窗口 或者终端ctrl+c 看到提示符重新出现

2.2 页面介绍

 

 配置管理:nacos作为配置保存管理的数据显示

服务管理:nacos作为注册中心保存的服务数据显示

权限管理:典型的用户 角色 权限管理的逻辑

命名空间:管理不同开发环境的配置和注册信息隔离的相关内容

集群管理:如果Nacos集群启动的,集群管理可以对集群中的nacos节点做管理操作,下线,查看状态

2.3 Nacos的客户端配置

2.3.1 客户端

Nacos是一个web应用绑定的组件,每个nacos客户端可以通过web应用的配置,和服务端进行逻辑交互,帮助web应用整合到微服务框架组件结构中.

2.3.2 Spring Boot整合Nacos

Spring Boot存在,任何经过整理优化的软件技术,可以通过非常简单的步骤完成 

1、添加依赖

<!--引入nacos的依赖-->
<dependency>
    <groupId>***.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

 2、yaml配置

spring:
  #spring 应用名称
  #微服务中 服务名称
  application:
    name: luban-demo-cart
  #微服务 nacos客户端配置属性
  cloud:
    nacos:
      discovery:
        # 提供给当前底层客户端nacos的服务端地址 域名:端口
        server-addr: localhost:8848

3、做一些简单的代码配置或者注解的使用

2.4客户端和服务端交互基本原理

nacos服务端支持http协议的访问,可以将其当成一个支持http协议web服务

nacos客户端只要通过http协议访问nacos服务端暴露的接口,就可以实现和服务端交互

根据官网提示的信息

nacos客户端 具备一个接受post请求的接口地址

/nacos/v1/ns/instance

 nacos客户端请求到这个地址,携带一些参数,可以在nacos服务生成注册信息(服务信息)

serviceName=luban-demo-stock&ip=20.18.7.10&port=8080

 可以使用任何支持http请求的插件 实现在nacos服务端进行注册测试,比如postman

比如curl命令

curl支持http西医访问的插件命令,用法:

curl -X [METHOD] args目标地址

 如果使用curl发送一个post请求

 curl -X POST "http://localhost:8848/nacos/v1/ns/instance?serviceName=test-demo&ip=127.0.0.1&port=10010"

 

 结论:客户端nacos进程已经组织好了所有交互代码逻辑,无需我们介入,我们只需要将这个客户端进程整合到web应用,自动和服务交互,注册当前服务实例信息,携带当前web应用中服务名称(spring.application.name),ip(自动获取),port(server.port)服务端会记录保存这个数据到内存。

nacos服务端除了提供注册的接口(新增)还提供了一个抓取的接口(查询)

接口地址:

/nacos/v1/ns/instance/list

通过这个接口,可以传递参数,获取某个服务的详细信息

serviceName=luban-demo-stock

通过curl命令来测试

 curl -X GET "http://localhost:8848/nacos/v1/ns/instance/list?serviceName=luban-demo-cart-haha"

 

{
  "hosts": [
    {
      "ip": "10.1.6.132",
      "port": 10005,
      "valid": true,
      "healthy": true,
      "marked": false,
      "instanceId": "10.1.6.132#10005#DEFAULT#DEFAULT_GROUP@@luban-demo-cart-haha",
      "metadata": {
        "preserved.register.source": "SPRING_CLOUD"
      },
      "enabled": true,
      "weight": 1.0,
      "clusterName": "DEFAULT",
      "serviceName": "luban-demo-cart-haha",
      "ephemeral": true
    }
  ],
  "dom": "luban-demo-cart-haha",
  "name": "DEFAULT_GROUP@@luban-demo-cart-haha",
  "cacheMillis": 3000,
  "lastRefTime": 1692176089735,
  "checksum": "e12bd76eb3558f8f25b480393365ea08",
  "useSpecifiedURL": false,
  "clusters": "",
  "env": "",
  "metadata": {
  }
}

nacos客户端进程 除了进行注册之外,还会根据自己的需求,对nacos客户端保存的注册信息进行抓取,隔一段时间进行更新

3、Nacos客户端yaml详解

3.1临时实例 永久实例

概念:服务 服务实例(每一个web应用进程)在一个服务中 服务实例多个

 

当前启动进程是永久实例还是临时实例true 表示临时实例 false表示永久实例

 spring:
    cloud:
        nacos:
            discovery:
                ephemeral: true

永久实例:nacos永远不删除的注册信息,就是永久实例

临时实例:暂时为某些应用,环境准备的扩容实例,就是定义为临时实例

3.1.1为什么要区分永久实例和临时实例

淘宝每一个功能都是一个服务,而且具备多个实例,平日访问时固定流量,所以使用永久实例支持,如果双11来临,流量激增,需要增加临时实例,等待11完成,删除临时实例

3.2服务实例的ip地址

ip值时nacos客户端默认情况下根据寻求网卡的逻辑,自动从某一个网卡获取的ip地址

概念:服务器多网卡,每个网卡都有本机的一个ip地址网段,功能不一样,网络范围也不一样

如果ip地址时nacos自己选的,不一定能够选择正确的ip地址

正确的IP地址:在nacos注册的ip 如果被别人抓取到,能够正常访问服务实例的ip地址

spring:
    cloud:
        nacos:
            discovery:
                ip: 

3.3命名空间 

开发过程中,使用的开发,测试,上线环境时不同的,所以nacos提供隔离的环境

不同的环境 对应使用微服务框架的时候,nacos注册在不同的命名空间

nacos默认命名空间-public

 nacos客户端配置的时候没有指定命名空间,默认使用public,可以在右上角创建命名空间,

nacos客户端指定注册命名空间,使用属性配置namespace

spring:
    cloud:
        nacos:
            discovery:
                namespace: 

 

3.4 分组配置 

nacos管理的注册信息,同一个命名空间下有多个服务,但是服务注册可以放到不同的分组

分组的主要目的是--灰度发布,同时在环境中 存在多个版本不同的服务端进程

通过nacos客户端属性配置,默认不填写group 叫做DEFUALT_GROUP

spring:
    cloud:
        nacos:
            discovery:
                group: 

 3.5 服务剔除

nacos实例,作为一个进程,内部包含了一个nacos客户端,在启动注册之后,需要和nacos服务端建立一个健康状态检测机制

永久实例:nacos服务端会进行下探,主动询问,如果下探发现没有相应,记录健康状态为false,下探不会停止

临时实例:临时实例自己,主动上报(心跳检测)nacos服务端记录每次上报的时间戳

服务端会根据时间戳的值,判断是否健康,是否剔除

spring:
    cloud:
        nacos:
            discovery:
                heart-beat-interval: 5
                ip-delete-timeout: 20

  heart-beat-interval: 5

指定服务实例向 Nacos 服务器发送心跳的间隔时间。默认值为 30 秒。上述配置中将其设置为 5 秒,即每 5 秒就会向 Nacos 服务器发送一次心跳。较短的心跳间隔可以更快地检测出故障实例并进行替换。

 ip-delete-timeout: 20

指定 Nacos 服务器删除服务实例的超时时间。默认值为 30 秒。如果一个服务实例在这个时间内没有发送心跳,则将被认为已经下线。上述配置中将其设置为 20 秒,即如果一个服务实例在 20 秒内没有发送心跳,则将被从 Nacos 服务器中删除。

时间具体设置的值,取决于什么因素

1、超过时间不能小于 间隔时间

2、取决于网络因素

        网络畅通,抖动没有:时间缩小5 10

        网络经常抖动 放大 10 60

4 nacos配置中心

4.1应用场景

开发学习一个微服务架构,其中会有很多的服务,每个服务又有很多的实例

每个服务开发过程中,需要编辑配置大量的web文件,比如yaml,json,html,xml...

这么多配置文本,是不方便统一管理的,特点:重复,同时变动...

在多团队和多人员开发的场景中,一般这种文件都需要交给配置中心管理、

4.2实现nacos配置客户端整合

1、依赖nacos config 客户端

<!--引入nacos依赖-配置中心客户端依赖-->
<dependency>
    <groupId>***.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--为属性配置yaml准备的一个依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

 2、yaml属性 告诉nacos到那个服务端读取哪些文件

在项目中引入一个bootstrap.yaml配置文件

如果当前spring boot版本是2.3.x或更早,不需要引用依赖spring-cloud-starter-bootstrap

但是如果springboot高于2.3.x就需要引用

引入新的配置文件,和application.yaml配置文件区别是什么?

        bootstrap.yaml先于application.yaml加载

bootstrap.yaml应该只需要支持nacosConfig客户端链接远程配置中心即可

配置bootstrap的格式

1、如果不区分开发环境,和application.yaml没区别

spring:
  application:
    # 连接配置中心的时候需要配置客户端提供的参数
    name: luban-demo-cart
  # 微服务配置管理
  cloud:
    nacos:
      config: 
        server-addr: localhost:8848

区分开发环境,和application配置稍有区别

spring:
  profiles:
    active: dev
---
spring:
  application:
    # 连接配置中心的时候需要配置客户端提供的参数
    name: luban-demo-cart
  # 微服务配置管理
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
  config:
    activate:
      on-profile: dev
---
spring:
  application:
    # 连接配置中心的时候需要配置客户端提供的参数
    name: luban-demo-cart
  # 微服务配置管理
  cloud:
    nacos:
      config:
        server-addr: 100.99.11.11:8848
  config:
    activate:
      on-profile: prod

4.3配置远程文件

默认情况下,没有指定远程文件名称(dataId),当前nacosConfig客户端也会在启动后读取

文件名称都是基于在bootstrap.yaml配置文件里指定属性值

spring.application.name=luban-demo-cart
file-extension 没给默认值 properties
spring.profiles.active=dev

 4.4本地配置远程化

保证能够读取到远程1个或者多个文件的前提下,可以将本地公用配置

spring.datasource从本地移除,放在远程文件

由于默认读取的文件,不一定满足文件后缀,格式的要求,而且,不能实现多个服务的共性化读取,所以我们需要指定让当前项目读取某一个,某几个文件

yaml属性 bootstrap

spring:
  profiles:
    active: dev
---
spring:
  application:
    name: luban-demo-cart
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        shared-configs:
          - data-id: datasource.yaml
            refresh: true
          - data-id: mybatis.yaml
            refresh: true
          - data-id: nacos-registry.yaml
            refresh: true
  config:
    activate:
      on-profile: dev

 

bootstrap.yaml配置内容如上:

  • 帮助nacosconfig客户端提前连接nacosconfig服务端读取指定文件

  • 如果没指定文件 没有配置shared-configs,会根据spring.applicaiton.name 和spring.profiles.active,和spring.cloud.nacos.config.file-extensions属性值,读取默认的三个文件.

  • 通过shared-configs配置指定文件,可以实现公用文件的读取. 指定读取三个文件 datasource.yaml(spring.datasource.url) nacos-registry.yaml(spring.cloud.nacos.discovery.server-addr),mybatis.yaml(mybatis.configuration.**)

转载请说明出处内容投诉
CSS教程_站长资源网 » Spring Cloud和Spring Cloud Alibaba

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买