SpringCloud Alibaba

springcloud alibaba

1、springcloud
        spring团队开源微服务工具集帮助我们快速构建分布式系统(微服务系统)
提供spring组织netflix开源解决方案
2、springcloud alibaba
        alibaba团队开源微服务工具集帮助我们快速构建分布式系统(微服务系统)提供alibaba解决方案
3、springcloud alibaba
        最新版本: 2021.0.1.0
        官方定义:spring Cloud Allibaba provides a one-stop solut ion(解决方案) for distributed application development (分布式应用开发)
                          spring cloud 阿里巴巴为分布式应用开发了提供一站 式解决方案

                          包含开发分布式应用的所有组件
4、 springcloud alibaba   特性   特点   提供了哪些组件

        a. Flow control and service degradation:服务流量控制和  服务降级(熔断)====>        Sentinel        替换 springcloud 原有 Systrix 组件

        b. Service registration and discovery:服务注册和发现组件                           ====>        Nacos        替换 springcloudconsul       和 eureka 组件

        c. Distributed configuration:统一配置中心组件                                               ====>        Nacos        替换 springcloud config 组件

        d. Event-driven:事件驱动利用 MQ  RocketMQ                                                ====>        事件驱动        替换Bus 组件实现消息总线

        e. Message  Bus:消息总线(异步处理)

        f. Distributed Transaction:分布式事务                                                             ====>        Seata        

        g. Dubbo   RPC:集成 Dubbo 实现服务间通信                                                ====>        Dubbo   RPC        ==>替换原始项目中 RestTemplate  Openfeign

5、微服务项目实战开发 Springcloud  NetFlix  +  SpringCloud  Spring  +  Springcloud  Alibaba

        1. 服务注册中心  ===> Nacos

        2. 服务间通信负载均衡      ===> HttpRest        a. ResrTemplate+Ribbon   b. openfeign

        3. 服务流控和服务降级      ===> Sentinel

        4. 服务网关组件                 ===> Gatway

        5. 统一配置中心                 ===> Nacos

 nacos 持久化配置

1、nacos 持久化

        持久化:管理的配置信息持久化

        注意:默认 nacos 存在配置信息持久化,默认的持久化方式为内嵌数据库derby

        缺点:无法友好的展示数据

        官方建议:在生产情况下推荐将配置存入mysql数据库        注意:nacos到目前为止仅仅支持mysql

2、将nacos持久化到mysql中

        a. 安装 mysql数据库服务       版本在 5.7 以后

        b. 如果 nacos 持久化到 mysql 数据库

                1.创建一个数据库 nacos 编码为 utf-8

                2.在 nacos 库中执行 nacos-mysql.sql

                3.修改 nacos 配置文件持久化到mysql 中      编辑 application.properties

                  

springcloud     alibaba 环境搭建

1、创建全局父项目        

        维护 springcloud 依赖        Hoxton.SR6

        维护 alibaba 依赖                2.2.1.RELEASE

        继承 springboot 父项目        2.2.5.RELEASE

2、父项目中的依赖维护

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhang</groupId>
    <artifactId>SpringCloudAlibaba_Parent</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 继承 springboot父项目 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
    </parent>

    <!-- 定义版本号 -->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.cloud.version>2021.0.3</spring.cloud.version>
        <spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 维护 springcloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 维护 springcloud alibaba 依赖 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


</project>

Nacos 组件

1、Nacos 组件 Name  Service(服务注册中心)  Configuration Service(配置宗鑫)

        Nacos = Name + Configuration + Service

        作用:服务注册中心(关注)统一配置中心

2、 使用 Nacos 组件  ====> Nacos 软件  服务注册中心

        a. 访问 Nacos 官方网站:home

        b. github 仓库地址:https://github.com/alibaba/nacos

        c.下载地址:Releases · alibaba/nacos · GitHub

       

        找到 Nacos 下的 bin 目录:cd  /Users/zhang/devTools/nacos/bin        进入

        Nacos 单机启动命令:sh startup.sh -m standalone

        Nacos 停止命令sh shutdown.sh

 Nacos Client 微服务

1、创建独立 springboot 应用

 2、引入 nacos client依赖

3、编写配置文件

nacos server 服务注册中心细节

1、安装并启动 nacos  server

        默认监听 web 端口:8848

        访问 web 界面:localhost/nacos    用户名密码:nacos

2、开发微服务进行服务注册

        a. 创建独立 springboot 应用

        b. 引入依赖 springcloud-starter-alibaba-nacos-discovery

        c.  编写配置

                # nacos server 总地址

                spring.cloud.nacos.server-addr=localhost:8848

                # 注册 nacos 地址

                

服务间通信

 1、服务间通信

        两种方式:1.Http RestTemplate        推荐        2.RPC

2、使用 Rest 方式实现服务间通信

        1.RestTemplate

        2. RestTemplate + Ribbon

        3. OpenFeign 方式调用

nacos统一配置中心使用

1、启动 nacos server

        nacos 作为统一配置中心:

                1.他管理配置文件的方式是在自己所在服务器上形成一个版本库,因此不需要再创建远程版本库

                2.开发微服务作为统一配置中心客户端将配置交给 nacos 进行管理

2、开发微服务作为统一配置中心客户端将配置交给 nacos 进行管理

        a. 开发config client 微服务        独立 springboot 应用

        b. 将自身的配置交给 nacos 进行管理

          

        c. 自身项目中引入 nacos client 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

        d. 配置配置文件      

# 告诉 config server 地址
spring.cloud.nacos.config.server-addr=localhost:8848
# 告诉从那个组进行配置获取
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 从这个组中拉取哪个配置文件
spring.cloud.nacos.config.name=configclinet-prod
# 拉取这个配置的哪个后缀的配置文件
spring.cloud.nacos.config.file-extension=yml

        e. 直接启动项目出现报错,发现当前项目在启动时,并不会等待拉取配置完成之后再启动,因此直接报错,解决方案:让当前项目在启动时预先拉取配置,在已拉取的配置信息启动

        application.yml 改为 bootstrap.yml

nacos     配置中心细节

1、统一配置中心 nacos

        dataId细节:代表完整配置文件名称   ===>   spring.cloud.nacos.config.name 

        完整配置文件名称 = prefix(前缀)+(env)环境 + file-extension(后缀)

        dataId = spring.cloud.nacos.config.name + spring.cloud.nacos.config.file-extension  

        dataId = ${prefix} + ${spring.profile+active} + ${file-extension}      

2、微服务拉取配置

# 告诉 config server 地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 告诉从那个命名空间进行配置获取
spring.cloud.nacos.config.namespace=b1850f34-8a2b-4e95-a6d6-ff8da5da895a
# 告诉从那个组进行配置获取
spring.cloud.nacos.config.group=CONFIGCLIENT
第一种获取配置文件的方式      dataId = name + file-extension
# 从这个组中拉取哪个配置文件
spring.cloud.nacos.config.name=configclient-prod
# 拉取这个配置的哪个后缀的配置文件
spring.cloud.nacos.config.file-extension=yaml
# 第二种获取配置文件的方式      dataId = prefix + env + file-extension
spring.cloud.nacos.config.prefix=configclient
spring.profiles.active=prod
spring.cloud.nacos.config.file-extension=yaml

3、统一配置中心 nacos 三个重要概念

        命名空间:namespace        默认 nacos 安装完成之后会有一个默认命名空间   这个命名空间名字为 public        作用:站在项目中角度隔离每一个项目配置文件

        组:group                默认 nacos 中在管理配置文件时不显示执行 group 名称之默认的组名称为 DEFAULT_GROUP        作用:站在项目中每个服务角度,隔离同一个项目中不同服务的配置

        文件名:dataId        获取一个配置文件唯一标识

nacos 集群 

1、集群规划

        nacos01        127.0.0.1:8845

        nacos02        127.0.0.1:8846

        nacos03        127.0.0.1:8847

        mysql             127.0.0.1:3306

        nginx              127.0.0.1:8999

2、搭建 nacos 集群注意事项

        a. 数据持久化必须配置 mysql 持久化

        b. 要求一个机器启动时当前内存不能少于 3G

3、搭建 nacos 集群

        1. 准备三个 nacos 节点,并连接 mysql 数据库

        2. 重新初始化 mysql 数据

        3. 修改 nacos conf 目录中 cluster.conf 文件添加所有集群节点

         4. 修改 nacos 各自端口号

                 nacos/conf/applicatino.properties                8841        8843        8845       

                 注意:nacos2.0 之后端口号连续的话有可能会报错

nacos 高可用

1、配置 nginx.conf 配置文件

 2、启动测试

Sentinel 哨兵

1、Sentinel 哨兵     

        作用:alibaba 开源用来对现有微服务系统进行保护       ====>        替换 Hystrix

        Hystrix 豪猪  用来保护微服务系统主要用来解决服务雪崩====>  服务熔断

        Sentinel  组件    用来解决服务雪崩  ===> 服务熔断机制(服务降级)、服务流控 等....

        Sentinel  规则网址:Home · alibaba/Sentinel Wiki · GitHub

        Sentinel  官方网址:home

2、Sentinel 简介      Sentinel    历史

  • 2012年,Sentinel诞生于阿里巴巴,主打流量控制。
  • 2013-2017 年,Sentinel 快速成长,成为阿里巴巴所有微服务的基础组件。它被用于6000多个应用程序,几乎涵盖了所有核心电子商务场景。
  • 2018 年,Sentinel 演变为一个开源项目。
  • 2020 年,Sentinel Go发布,带来云原生生态的进化。
  • 2021 年,Sentinel Rust发布。
  • 2022 年,Sentinel 演变为“流量治理”的云原生组件

3、Sentinel 概念

        资源 Resource:java 中一切皆资源,服务/demo        资源:是一个微服务访问路径 rest 接口

        规则 Rule: 流量规则        熔断        负载规则....

4、Sentinel 使用

        Sentinel 开源组件

                Sentinel(项目中实现  流量控制 熔断  降级)  ------> Hystrix

                Sentinel  dashboard(哨兵仪表盘组件)  ------------>Hystrix DashBoard 

5、Sentinel  实现原理

            

Sentinel  DashBoard 使用 

1、下载:Tags · alibaba/Sentinel · GitHub

2、运行:sentinel-dashboard-1.8.1.jar

3、直接启动 springboot 应用 jar 包

        java -jar sentinel-dashboard-1.8.1.jar

        注意:默认端口是 8080

        进入 jar 包目录:cd /Users/zhang/devTools

        指定端口启动:java -jar -Dserver.port=9191 sentinel-dashboard-1.8.1.jar

4、访问 dashboard管理界面

        http://127.0.0.1:9191

       

        用户名密码:sentinel

Sentinel  组件保护微服务

1、开发微服务        独立 springboot 应用

2、添加 rest 接口   作为 sentinel 资源

3、在微服务中引入 sentinel 组件

<!-- 引入 sentinel 依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

4、配置项目中配置文件链接到 sentinel  dashboard

5、直接启动微服务

6、查看启动微服务

        注意:dashboard信息必须在指定服务进行资源调用之后才能进行初始化配置

关于系统吞吐量相关观念

1、QPS

        Query-Per-Second:QPS        称之为系统每秒的请求数

        5/s

2、RT

        Response Time:RT        每个请求响应时间        单位毫秒级

Sentinel 中对系统的保护规则

1、五大规则

        a. 流控规则:流量控制(flow control)

                定义:其原理就是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

        b. 降级规则:熔断降级(Degrade Service)

                定义:其原理是监控应用中资源调用请求,达到指定阈值时自动触达熔断降级

        c. 热点规则

                热点:何为热点?热点即经常访问的数据。

                定义:其原理很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。

        d. 系统规则(Systemflow)

                定义:其原理 Sentinel 系统自适应限流从整体维度对应用入口流量进行控制

        e. 授权规则        黑白名单控制规则

                定义: 很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有来源位于白名单时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

Sentinel 流控规则

1、流控        流量控制        FlowContorll

        定义:其原理是监控应用流量的 QPS 或 并发线程指数 指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

        QPS:每秒请求书        当每秒的请求书超过指定阈值之后对当前请求进行限流

        并发线程数:                当服务其中创建的线程数超过指定的阈值之后对当前请求进行限流

2、高级选项

        a.流控模式

                1.直接:当配置资源在运行过程超过当前规则配置的阈值之后对该资源做的处理是什么

                2.关联模式:当配置资源在运行过程中超过当前规则配置的阈值之后对他所关联资源进行请求做什么样的处理

                3.链路模式(问题):当配置资源在运行过程超过当前规则配置的阈值之后对他链路中资源做什么的处理

        b.流控效果

                1.快速失败:直接拒绝请求,并抛出相应异常

                2.Warm Up:(冷启动   预热)缓慢增长

                3.排队等待:(始终匀速通过)

Sentinel 中降级规则

1、熔断降级

        熔断:用来避免微服务架构中雪崩现象

        原理:当监控到调用链路中某一个服务,出现异常(20 个以上异常)自动触发熔断,在触发之后对于该服务调用不可用

        熔断:达到某个阈值之后自动触发熔断

2、Sentinel 提供熔断

        a.RT        根据请求响应时间熔断

        b.异常比例        根据请求调用过程中出现异常百分比进行熔断

        c.异常数        根据请求调用过程中异常数进行熔断

3、熔断条件

       

热点参数限流

1、热点

        定义:经常访问数据称之为热点

        热点限流  也称之为热点参数限流,日后访问资源中携带了指定参数进行限流

2、如何使用

        注意:使用热点参数限流时,不能使用资源路径,必须使用资源别名

        a. 必须使用 sentinel 提供资源别名注解@SentinelResource(value="别名")

// blockHandler:使用 sentinel 进行不同规则控制时的默认处理方案    fallback:自定义业务出错时默认处理方案     defaultFallback:指定一个业务时默认方案
@SentinelResource(value = "aaa", blockHandler = "blockHandler", fallback = "fall", defaultFallback = "defaultFall")    // 作用:代表这是一个 sentinel 资源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值