一、什么是SpringCloud Alibaba

1、简介

1)简介

阿里云未分布式应用开发提供了一站式解决方案。它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发应用程序。

有了阿里云,你只需要添加一些注解和少量的配置,就可以将spring云应用连接到阿里的分布式解决方案上,用阿里中间件搭建一个分布式应用系统。

2、环境搭建

新建一个空项目,然后按下述建模块(所有springcloud alibaba项目都要准备以下内容)

1)说明

springboot 2.2.x.RELEASE、springcloud alibaba 2.2.1、java 8+、maven 3.3.6+、idea 2020+

2)创建springboot模块,指定版本为2.2.5版本

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

3)引入springcloud alibaba的版本管理

<properties>
<!--springcloud alibaba具体版本号-->
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties> <!--全局引入springcloudalibaba下载依赖地址,并不会引入依赖-->
<dependencyManagement>
<dependencies>
<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>

二、Nacos组件

1、基本介绍

1)什么是nacos?

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

Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka、consul)以及config组件。

2)安装Nacos(nacos server)

(1)下载nacos:

(2)解压缩安装包到指定位置

  bin:启动nacos服务的脚本目录

  conf:nacos的配置文件的目录

  target:nacos的启动依赖存放目录

  data:nacos的启动成功后保存数据的目录

(3)启动安装服务并访问

#linux cd nacos/bin
./startup.sh -m standalone
#windows cmd:执行下述命令或者双击startup.cmd
startup.cmd -m standalone

http://10.7.36.84:8848/nacos/index.html

2、服务开发(nacos client开发)

1)创建项目并引入client依赖

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

2)配置注册地址(application.properties)

#指定当前服务端口
server.port=9000
#指定服务名称
spring.application.name=nacosclient
#声明:指定nacos地址
spring.cloud.nacos.server-addr=localhost:8848
#指定注册中心地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
#暴露所有web端口
management.endpoints.web.exposure.include=*

3)开启启动服务注册注解(新版本之后可以省略)

@SpringBootApplication
@EnableDiscoveryClient
public class NacosclientApplication { public static void main(String[] args) {
SpringApplication.run(NacosclientApplication.class, args);
}
}

3、nacos配置中心

将nacos client的公共配置放入nacos配置中心进行管理。

1)开发步骤

(1)引入nacos config依赖(前提要引入nacos client依赖)

<!--引入nacos配置依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(2)在application.properties(需要改为bootstrap.properties)中配置配置中心地址

Data ID:的完成格式如:${prefix}-${spring.profile.active}.${file-extension}  如:configserver-dev.properties

  prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。

  spring.profiles.acitve即当前环境对应的profile。当spring.profiles.active为空时,对应的连接符-也将不存在,dataId的拼接格式变成${prefix}.${file-extension}。

  file-extension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。

#远程配置中心的地址
spring.cloud.nacos.server-addr=localhost:8848
#读取配置的分组
spring.cloud.nacos.config.group=DEFAULT_GROUP
#指定读取文件后缀
spring.cloud.nacos.config.file-extension=properties
#指定配置文件方式一:
#指定读取文件名称
spring.cloud.nacos.config.name=configserver-dev #指定配置文件方式二:
#指定读取文件前缀
#spring.application.name=configserver
#指定读取文件的具体环境
#spring.profiles.active=dev #服务名称 应该放入nacos配置管理模块
spring.application.name=configserver
#指定向nacos server注册服务的名称
spring.cloud.nacos.discovery.service=${spring.application.name}

(3)在nacos的配置管理模块的配置列表中创建配置

(4)在bootstrap.properties中增加以下配置,则可以在服务管理>服务列表对应的命名空间下查看对应服务

#注册到指定namespace
spring.cloud.nacos.discovery.namespace=0d621a49-3d3f-4f66-a3ed-6d2a4204d9f6
spring.cloud.nacos.discovery.register-enabled=true

2)实现配置中心自动配置刷新

(1)自动刷新

默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入@RefreshScope注解即可。

@RestController
@RefreshScope
public class ConfigController { @Value("${username}")
private String username; @GetMapping("/config/getconfig")
public String getConfig() {
return username;
}
}

3)配置中心

(1)命名空间-namespace

用于进行用户粒度的配置隔离。不同的命名空间下,可以存在相同的Group或Data ID的配置。Namespace的常用场景之一是不同环境的配置文件隔离,例如开发测试环境和生产环境的之间(如配置、服务)隔离等。

在没有明确指定${spring.cloud.nacos.config.namespace}配置的情况,默认使用的是Nacos上Public这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3********************

该配置必须放在bootstrap.properties文件中。此外spring.cloud.nacos.config.namespace的值是namespace对应的id,id值可以在Nacos的控制台获取。并且在添加配置时注意不要选择其他的namespace,否则将会导致读取不到正确的配置。

(2)组-group

默认nacos中在管理配置文件时不显示制定group名称时默认的组名称为DEFAULT_GROUP。

(3)data-id

如上

三、服务间通信方式

见:微服务入门二:SpringCloud(版本Hoxton SR6) ->三、服务间通信方式

注意:

OpenFeign依赖不是alibaba的标准组件,所以引入OpenFeign依赖组件时要写版本号,或者在dependencyManagement同时加入【全局管理springboot版本】机制。

四、sentinel流量卫兵

1、什么是sentinel

1)概念

(1)说明

随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为突破口,在流量控制、断路、负载保护等多个领域进行工作,保障服务可靠性。

(2)特性

丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。

广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。

(3)sentinel提供了两个服务组件

一个是sentinel用来实现微服务系统中服务熔断、降级等功能。一个是sentinel dashboard用来监控微服务中流量调用等情况。

2)sentinel dashboard的安装

(1)下载

(2)启动

仪表盘是个jar包,可以通过java命令启动,如java -jar 方式运行,默认端口是8080

java -Dserver.port=10000 -jar sentinel-dashboard-1.8.1.jar

2、sentinel实时监控服务

1)开发步骤

(1)引入依赖

先要引入nacos client依赖,然后再引入以下依赖:

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

(2)编辑配置文件application.properties,新增以下有关sentinel配置:

#开启sentinel 默认开启
spring.cloud.sentinel.enabled=true
#连接dashboard
spring.cloud.sentinel.transport.dashboard=localhost:10000
# 与dashboard通信的端口
spring.cloud.sentinel.transport.port=8719

(3)访问

http://127.0.0.1:10000/,默认情况下sentinel为延迟加载,不会再启动之后立即创建服务监控,需要对服务进行调用时才会初始化。

(4)创建服务

@RestController
public class SentinelController { @GetMapping("/sentinel/test")
public String test() {
return "sentinel测试服务";
}
}

3、流量控制

流量控制(flow control),其原理是监控应用流量的QPS或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。同一个资源可以创建多条限流规则。FlowSlot会对该资源的所有限流规则依次遍历,直到有规则触发限流或所有规则遍历完毕。

一条限流规则主要由以下几个因素组成,我们可以组合这些元素来实现不同的限流效果:

  • resource:资源名,即限流规则的作用对象
  • count:限流阈值
  • grade:限流阈值类型(QPS或并发线程数)
  • limitApp:流控针对的调用来源,若为default则不区分调用来源
  • strategy:调用关系限流策略
  • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)

流量控制主要由两种统计类型,一种是统计并发线程数,另外一种则是统计QPS。

1)阈值类型

  • QPS限流
  • 线程数限流

2)流控模式

  • 直接:标识流量控制规则到达阈值直接出发流量控制
  • 关联:当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写得速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过渡的争抢,举例来说,read_db和write_db这两个资源分别代表数据库读写,我们可以给read_db设置限流规则来达到写优先的目的:设置strategy为RuleConstant.STRATEGY_RELEATE同时设置refResource为write_db。这样当写库操作频繁时,读数据的请求会被限流。
  • 链路:

3)流控效果

  • 直接拒绝:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。
  • Warm up:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过“冷启动”,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给系统一个预热的实际,避免冷系统被压垮。
  • 匀速排队:(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。只能对请求进行排队等待。

4、熔断降级

todo

5、SentinelResource注解

todo

五、Nacos集群部署

  集群的安装建立在单机安装的基础上,且 Windows 机器和 Linux 机器并没有什么不同,甚至一部分 Nacos 部署在 Windows 上,一部分部署在 Linux 都可以 (需要保证服务器之前可以进行通信)。本节讨论的是如何部署一个生产可用的 Nacos 集群,并使用 MySQL 做数据持久化。

Nacos 集群部署架构图:

1、数据库准备(目前只支持MySQL)

生产使用建议至少主备模式,或者采用高可用数据库,用来存储Nacos的持久化数据。(本文为了演示就采用一个数据库),

初始化数据库:版本要求:5.6.5+,创建一个名为nacos_config 的数据库,运行conf/nacos-mysql.sql 脚本。创建一个名为nacos_config 的数据库,运行conf/nacos-mysql.sql 脚本。

### 配置网页端访问端口
server.port=8848 ### 配置数据持久化的数据库,这里使用 mysql
### 如果需要启用数据库的话,需要导入 conf/nacos-mysql.sql 脚本
### 如果不启用数据库,则数据将持久化到本地 data/ 目录下
### If use MySQL as datasource:
spring.datasource.platform=mysql ### Count of DB:
db.num=1 ### 数据库可以有多个,db.url.0=xxx db.url.1=xxx db.url.2=xxx
### 此处仅使用一个
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=username
db.password=password

2、集群(cluster)配置

1)复制conf/cluster.conf.example并重命名为conf/cluster.conf,这是集群的配置文件,以后如果需要修改集群节点信息,也是编辑这个文件,比如增减节点等。

# 单台机器部署集群
# 需要在application.properties中修改对应的端口,默认的是8848
# IP 相同,端口不同即可
127.0.0.1:8847
127.0.0.1:8848

2) 启动

配置完成后,如果单台机器模拟集群只需将 nacos-server 安装包,复制两份,然后各自执行命令启动。((standalone代表着单机模式运行,非集群模式,cluster为集群模式)

3)验证

两台台机器全部启动之后,随便访问一台机器上nacos即可。访问http://127.0.0.1:8848/nacos 访问 nacos。可以通过 集群管理 - 节点列表 来查看集群的情况。(节点元数据中naming.state 节点参数,指明了此节点为 Leader 节点,其他两个节点为 Follower。)如下图所示:

注意:以上同一网段下的配置

3、Nginx配置

打开 Nginx 的配置文件 conf/nginx.conf ,并在 http{} 节点下添加以下内容:

upstream server_nacos{
ip_hash;
server 127.0.0.1:8848 weight=5;
server 127.0.0.1:8847 weight=5;
}
server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
proxy_pass http://server_nacos;
proxy_set_header Host $host:$server_port;
index index.html index.htm;
}
}

浏览器打开链接 http://localhost/nacos 访问 nacos。如果正常访问即通过验证。

参考:

1、spring Cloud Alibaba:Nacos 安装及使用

 

微服务入门三:SpringCloud Alibaba的更多相关文章

  1. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  2. .Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)

    前言 上一篇[.Net Core微服务入门全纪录(二)--Consul-服务注册与发现(上)]已经成功将我们的服务注册到Consul中,接下来就该客户端通过Consul去做服务发现了. 服务发现 同样 ...

  3. 微服务架构 | 2.2 Alibaba Nacos 的统一配置管理

    目录 前言 1. Nacos 配置中心基础知识 1.1 Nacos 在配置中心中的功能 1.2 Nacos 配置管理 Data ID 的构成 1.3 Nacos 配置的回滚机制 1.4 Nacos 配 ...

  4. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  5. Java生鲜电商平台-微服务入门与服务的拆分架构实战

    Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在“强大”的JSP上面,那时候SOA已经算是新技术了 ...

  6. 一、微服务概述与SpringCloud

    一.微服务概述与SpringCloud 1.微服务与微服务架构 微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面 ...

  7. .Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

    前言 上一篇[.Net Core微服务入门全纪录(三)--Consul-服务注册与发现(下)]已经使用Consul完成了服务的注册与发现,实际中光有服务注册与发现往往是不够的,我们需要一个统一的入口来 ...

  8. .Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)

    前言 上一篇[.Net Core微服务入门全纪录(一)--项目搭建]讲到要做到服务的灵活伸缩,那么需要有一种机制来实现它,这个机制就是服务注册与发现.当然这也并不是必要的,如果你的服务实例很少,并且很 ...

  9. .Net Core微服务入门全纪录(五)——Ocelot-API网关(下)

    前言 上一篇[.Net Core微服务入门全纪录(四)--Ocelot-API网关(上)]已经完成了Ocelot网关的基本搭建,实现了服务入口的统一.当然,这只是API网关的一个最基本功能,它的进阶功 ...

随机推荐

  1. STC89C52引脚图(彩色)

    不知道大家有没有见过像这样的arduino引脚功能图:   还有ESP系列: 还有stm32的: 给人的第一感觉就是漂亮,清晰明了,相比之下STC51的就...... 楼主搜罗了一下,目前网络上还没有 ...

  2. Redis性能分析思路

    Redis性能分析有几个大的方向.分别是 (1)基准对比 (2)配置优化 (3)数据持久化 (4)键值优化 (5)缓存淘汰 (6)Redis集群 基准对比 在没有业务实例运行的情况下,在服务器上通过测 ...

  3. ApacheCN Java 译文集 20211012 更新

    Effective Java 中文第三版 1. 考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. ...

  4. 【转】JVM--内存区域划分

    [原文地址]https://blog.csdn.net/sd4015700/article/details/50109939 Eden Space.Survivor Space.Tenured Gen ...

  5. java多线程编程(一)

    一.概念基础 进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以多执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运 ...

  6. Jenkins敏捷开发 自动化构建工具

    一.序言 Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面. 所谓自动化构建是按照一定 ...

  7. numpy 知识汇总

    1.增加维度 高纬度打印出来很不好观察,所以打印出来shape更加容易理解维度的增加, 此外一维向量a=np.array([1,2,3]), a[:,None],相当于变为二维并转置了shape=(3 ...

  8. http的报文结构和状态码总结

    1.HTTP报文结构 请求报文 报文由三个部分组成,即开始行.首部行和实体主体.在请求报文中,开始行就是请求行. 响应报文 响应报文的开始行是状态行.状态行包括三项内容,即HTTP的版本,状态码,以及 ...

  9. Linux命令安装Mysql

    关键步骤: 4.创建用户组和用户 groupadd mysql useradd -r -g mysql mysql 5.修改权限 chown -R mysql:mysql ./ 6.安装数据库 ./s ...

  10. Pytest用例编写1

      一.编写pytest测试样例非常简单,只需要按照下面的规则: 测试文件以test_开头(以_test结尾也可以) 测试类以Test开头,并且不能带有 __init__ 方法 测试函数以test_开 ...