当前位置:   article > 正文

SpringCloud Alibaba入门_spring cloud alibaba入门

spring cloud alibaba入门

1.springcloud alibaba

1.1主要功能

服务限流降级:默认支持WebService、WebFlux、OpenFeign、RestTemplate、SpringCloudGateway、Zuul、Dubbo和RocketMQ限流降级功能的接入。

服务注册与发现:适配SpringCloud服务注册与发现标准,默认集成Ribbon支持。

消息驱动能力:基于SpringCLoudStream为微服务应用构建消息驱动能力。

分布式事务:使用@GlobalTransactional注解,高效并且对业务零侵入地解决分布式事务问题。

阿里云对象存储:阿里云提供云存储服务。

分布式任务调度:提供秒级定时(基于Cron)任务调度。同时提供分布式的任务执行模型。网格任务支持海量子任务均匀分配到所有Worker(scheduler-clirnt)上

阿里云短信服务:...

1.2组件

Sentinel:从流量控制,熔断降级,系统负载保护等多个维度保护服务稳定性。

Nacos:动态服务发现,配置管理和服务管理平台。

RocketMQ:分布式消息系统

Dubbo:高可用Java RPC框架

Seata:高性能微服务分布式事务解决方案。

Alibaba Cloud OSS:阿里云对象存储服务。

Alibaba Cloud SchedulerX:分布式任务调度产品

Alibaba Cloud SMS:短信服务

1.3使用

地址:https://spring.io/projects/spring-cloud-alibaba

github:https://github.com/projects/spring-cloud-alibaba

父工程依赖

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>com.alibaba.cloud</groupId>
  5. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  6. <version>2021.0.1.0</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>

1.4版本对应

2.SpringCloud Alibaba Nacos服务注册和配置中心

2.1是什么?

1.Nacos:服务注册和配置中心

github:https://github.com/alibaba/Nacos

Nacos= Eureka + Config + Bus

2.Nacos概念

Nacos文档:https://nacos.io/zh-cn/

2.2Nacos2.0

新增长链接功能:Nacos2.0比1.x新增gRPC的通信方式。因此需要增加2个端口,新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

2.3对比

2.4下载

1.下载地址:https://github.com/alibaba/nacos/releases

2.下载压缩包解压,进入bin目录,打开dos窗口,执行startup命令启动它。

startup.cmd -m standalone  #单机模式

3.端口8848

4.访问http://locaohost:8848/nacos/index.html 默认账号密码nacos

2.5注册中心功能

 

1.服务提供者nacos-provider8000

依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>

yml

  1. server:
  2. port: 8000
  3. spring:
  4. application:
  5. name: nacos-provider
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: localhost:8848

主启动类

@EnableDiscoveryClient

2.新建nacos-provider8001

同上

查看nacos服务管理

3. 搭建nacos-consumer9000

同上,注意alibaba已经不支持ribbon做负载均衡了,使用loadbalancer替换

pom:

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>
  5. <dependency>
  6. <exclusions>
  7. <exclusion>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  10. </exclusion>
  11. </exclusions>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.springframework.cloud</groupId>
  15. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  16. <version>3.1.1</version>
  17. </dependency>
  18. </dependencies>

application.yml:

  1. server:
  2. port: 9000
  3. spring:
  4. application:
  5. name: nacos-consumer
  6. cloud:
  7. loadbalancer:
  8. ribbon:
  9. enable: false
  10. nacos:
  11. discovery:
  12. server-addr: localhost:8848

4.整合feign

导包+写feign接口

代码:https://gitee.com/xuyu294636185/xuy-cloud-alibaba.git​​​​​​

2.6服务与注册中心对比

A:可用性 B:一致性 C:分区容错性

Nacos默认AP,qiehuanCP: curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

2.7配置中心功能

1.创建工程nacos-client7777

1.pom

2.appliction.yml

3.bootstrap.yml

2.分类配置

问题:实际开发中,通常一个系统会准备dev/test/prod环境,如何保证环境启动时服务能正确读取nacos上相应环境的配置文件?

答:namespace区分

问题:一个大型分布式微服务系统有很多微服务子项目,每个微服务项目又都会有相应的开发环境,测试环境,预发环境,正式环境,那怎么对微服务配置进行管理呢?

答:用group把不同的微服务划分到同一个分组去。

*service就是微服务,一个service可以包含多个cluster集群,nacos默认cluster是DEFAULT,cluser是对指定微服务的一个虚拟划分。

比方说为了容灾,将service微服务分别部署在了北京机房和上海机房,这是就可以给北京机房的微服务起一个集群名BJ,给上海的service微服务起SH,还可以尽量让同一个机房的微服务互相调用,以提升效率。最后instance就是微服务的实例。

dgn方案:

最后三者关系如下:

2.8集群和持久化配置(重要)

2.8.1Nacos部署环境

nacos定义一个IDC内部应用组件,并非全面向内网环境的产品,建议在内部隔离环境中部署,强烈不建议部署在公共网络环境。

2.8.2nacos支持三种部署模式

*单机模式:用于测试和单机试用

*集群模式:用于生产环境,确保高可用

*多集群模式:用于多数据中心场景

2.8.3单机模式下运行nacos

linux:startup.sh -m standalone

windows:startup.cmd -m standalone

2.8.4单机模式(0.7版本之后)支持mysql

1.mysql要求:5.6.5+

2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql

3.修改conf/applicaion.properties文件,增加支持msyql数据源配置,添加mysql数据源的url等信息

  1. #放开注释
  2. spring.datasource.platform=mysql
  3. db.num=1
  4. db.url.0=jdbc:mysql://localhost:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimeZone=GMT%2B8
  5. db.user=nacos_devtest
  6. db.password=root

再以单机模式启动nacos,所有写嵌入式数据库的数据都写到了mysql 

2.8.5集群部署说明

集群模式部署

1.预备环境

64bitOs Linux/Unix/Mac、64bitJDK1.8+、Maven3.2.x+、3个以上Nacos节点

2.下载源码:

https://github.com/alibaba/nacos/relesases

  1. unzip nacos -source.zip
  2. cd nacos/
  3. mvn -Prelease-nacos clean install -U
  4. cd nacos/distribution/target/nacos-server-1.3.0/nacos/bin

3.配置集群配置文件

在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置IP:port

4.确定数据源

使用内置数据源:无需配置

使用外置数据源:建议成产至少主备模式

初始化sql数据库:sql语句源文件

application.properties配置文件

5.启动服务器 集群模式

使用内置数据源:sh startup.sh -p embedded

使用外置数据源:sh startup.sh  

nginx下载:http://nginx.org/download/nginx-1.20.2.tar.gz

安装:百度 

  1. upstream cluster{
  2. server 192.168.246.128:6666
  3. server 192.168.246.128:7777
  4. server 192.168.246.128:8888
  5. }
  6. server{
  7. //监听5555端口,转发至上述集群
  8. listen 5555;
  9. server_name localhost;
  10. location / {
  11. proxy_pass http://cluster;
  12. }
  13. }

 代码:https://gitee.com/xuyu294636185/xuy-cloud-alibaba.git

3.SpringCloudAlibaba Sentinel实现熔断与限流

3.1简介

hystrix的替代。

sentinel分为两个部分:

核心库:(java客户端)不依赖任何框架,能够运行于所有java运行时环境,同时对Dubbo/SpringCloud支持。

控制台(Dashboard)基于SPringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

3.2下载

https://github.com/alibaba/Sentinel/releases

运行:java -jar sentinel-dashboard-1.8.4.jar

http://localhost:8080

默认账户密码:sentinel

3.3初始化演示工程

cloudalibaba-sentinel-service8000

1.pom

2.配置文件

3.启动类添加注解

4.调用口测试

代码:https://gitee.com/xuyu294636185/xuy-cloud-alibaba.git

3.4流量控制

资源名:唯一名称,默认请求路径

针对来源:sentinel可以针对调用者进行限流,填写微服务名,默认default

阈值类型/单机值:

        QPS(每秒请求数):当调用该api就QPS达到阈值时进行限流

        线程数:当调用该api线程数达到阈值时限流

是否集群:不需要集群

流控模式:

        直连:api达到限流条件时,直接限流

        关联:当关联的值到阈值,就限流自己,

        链路:只记录指定链路上的流量

        1.(@SentinelResource("goods"))

        2.web-context-unify: false #关闭收敛URL

流控效果:

        快速失败:直接抛异常

        warm up:根据codeFactor的值,从阈值预热达到QPS阈值

        排队等待:匀速排队,让请求以匀速通过,阈值类型必须设置为QPS,否则无效。

3.5熔断降级

微服务之间的相互调用链路上某一环不稳定,就可能会层层级联,导致整个链路不稳定,因此我们需要不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩,熔断降级作为保护自身的手段,通常在客户端进行配置。

sentinel提供下几种熔断策略:

1.慢调用比例(SLOW_REQUEST_RATIO):需要设置允许慢调用RT(最大响应时间),请求的响应大于该阈值则统计为慢带调用,当单位统计时长(statIntervalMs)内请求数目大于设置的最下请求数目,并且慢调用比例大于阈值,则接下来的熔断时长内请求会自动被熔断,经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN),若接下来的一个请求响应时间小于设置的慢调用RT则结束熔断,若大于设置的慢调用RT则会再次被熔断。

2.异常比例(ERROR_RATIO)

3.异常数(ERROR_COUNT)

注意异常降级仅针对业务异常,对Sentinel限流降级本身的异常(BlockException)不生效。

3.6热点参数限流

热点即经常访问的数据,我们希望统计某个热点数据中访问频次最高的TopK数据,并对其进行访问限制,比如:商品Id或用户ID。Sentinel利用LRU策略统计最近最常访问的热点数据,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。

1.添加依赖:

  1. <dependency>
  2. <groupId>com.alibaba.csp</groupId>
  3. <artifactId>sentinel-parameter-flow-control</artifactId>
  4. <version>1.8.4</version>
  5. </dependency>

2.设置规则

 3.错误标志处理

例外情况:

秒杀情况下,某个参数goodsId=100,最新手机id,单独设置阈值1000.

 注意:业务上的错误,sentinel不会管,热点key吸纳之,sentinel才会管。

3.7系统自适应限流

Sentinel系统自适应限流从整体维度对应用入口流量进行控制,结合应用的load,CPU使用率,总体平均RT,入口QPS和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能泡在最大吞吐量的同时保证系统整体的稳定性

3.8@SentinelResource

代码:https://gitee.com/xuyu294636185/xuy-cloud-alibaba.git

3.9降级

熔断:微服务自己限流,不可用了

降级:调用方,提供方错了,返回给客户端一个友好对象。

新建上述三个项目。

不同情况下blockHandler与fallback情况

1.不配置

直接报错

2.只配置fallback

 

3.只配置blockHandler

4.都配置

都生效

5.忽略某些异常

@SentinelResource(value = "add",blockHandler="fail_add",fallback = "fallback_add",exceptionsToIgnore = {IllegalAccessException.class})

3.10feign调用

导包、启动类+注解、feign功能实现,调用,实现见代码

3.11配置持久化

导包

  1. <dependency>
  2. <groupId>com.alibaba.csp</groupId>
  3. <artifactId>sentinel-datasource-nacos</artifactId>
  4. </dependency>

yml

  1. sentinel:
  2. datasource:
  3. ds1:
  4. nacos:
  5. server-addr: localhost:8848
  6. dataId: ${spring.application.name}
  7. groupId: DEFAULT_GROUP
  8. data-type: json
  9. rule-type: flow

nacos添加配置

 

 

 代码:https://gitee.com/xuyu294636185/xuy-cloud-alibaba.git

BV1tT4y1a7LA

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/986984
推荐阅读
相关标签
  

闽ICP备14008679号