Spring Cloud Alibaba【Nacos配置动态刷新、Nacos集群架构介绍 、Nacos的数据持久化、认识分布式流量防护 】(五)

目录

分布式配置中心_Nacos配置动态刷新

分布式配置中心_Dubbo服务对接分布式配置中心

分布式配置中心_Nacos集群架构介绍

分布式配置中心_Nacos的数据持久化

分布式配置中心_Nacos集群配置

分布式流量防护_认识分布式流量防护

分布式流量防护_认识Sentinel


分布式配置中心_Nacos配置动态刷新

配置动态刷新

配置的动态刷新,仅需要使用@RefreshScope注解即可。

注解方式

复制代码
@RestController
/* 只需要在需要动态读取配置的类上添加此注解就可以 */
@RefreshScope
public class ConfigController {
    
 @Value( "${config.config}" )
 private String appName;
  
 @GetMapping("/getConfig")
 public String nacosConfingTest2(){
      return(appName);
 }
}

实时效果反馈

1.Nacos分布式配置中心通过____注解实现动态刷新。

A Refresh

B RefreshScope

C Scope

D 以上都是错误

分布式配置中心_Dubbo服务对接分布式配置中心

POM引入依赖

复制代码
       <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

控制台创建dataId

创建bootstrap.yml

复制代码
spring:
 main:
   allow-bean-definition-overriding: true
   allow-circular-references: true
 application:
    #应用名字
   name: consumer-dubbo-order
 cloud:
   nacos:
     config:
        # 设置应用名字
       prefix: ${spring.application.name}
        # 配置文件后缀
       file-extension: yaml
        # 配置中心地址
       server-addr: 192.168.66.101:8848
 profiles:
    # 设置环境
   active: dev

测试

请求http://localhost:80/order/index

分布式配置中心_Nacos集群架构介绍

为什么需要搭建Nacos集群

默认Nacos使用嵌入式数据库Derby实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集 群化部署,目前只支持MySQL的存储。

Nacos支持三种部署模式

1、单机模式 - 用于测试和单机试用。

2、集群模式 - 用于生产环境,确保高可用。

3、多集群模式 - 用于多数据中心场景。

集群模式

实时效果反馈

1.搭建Nacos集群解决_____问题。

A 数据不一致

B 安全

C 单点故障

D 以上都是错误

2. Nacos默认的内存数据库是____。

A SQLite

B MySQL

CDerby

D 以上都是错误

分布式配置中心_Nacos的数据持久化

初始化数据库

Nacos的数据库脚本文件在我们下载Nacos-server时的压缩包中就有进入 \nacos\conf 目录,初始化文件: nacos-mysql.sql 此处我创建一个名为 mynacos 的数据库,然后执行初始化脚本,成功后会生成 11 张表;

修改配置文件

这里是需要修改Nacos-server的配置文件Nacos-server其实就是一 个Java工程或者说是一个Springboot项目,他的配置文件在 nacos\conf 目录下,名为 application.properties,在文件底部添加 数据源配置:

复制代码
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/mynacos?
characterEncoding=utf8&connectTimeout=1000&so
cketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

启动Nacos-server和Nacos-config

先启动Nacos-server,启动成功后进入Nacos控制台,此时的Nacos控制台中焕然一新,之前的数据都不见了。

注意: 因为加入了新的数据源,Nacos从mysql中读取所有的配置文件,而我们刚刚初始化的数据库是干干净净的,自然不会有什么数据和信息显示。

在公共空间(public)中新建一个配置文件DataID: nacos-config.yml , 配置内容如下:

复制代码
server:
   port: 9989
nacos:
   config: 配置文件已持久化到数据库中...

再启动Nacos(四)中的demo项目。服务启动成功后,观察Nacos 控制台如下

验证是否持久化到数据库中

分布式配置中心_Nacos集群配置

集群启动

在本地通过3个端口模拟3台机器,端口分别是:8848,8858, 8868。

复制代码
#copy3份解压后的nacos,修改各自的application.properties中的端口号,分别为:8848,8858,8868
server.port=8848
server.port=8858
server.port=8868

各自的conf目录下放cluster.conf文件,文件内容为:

复制代码
192.168.66.100:8848
192.168.66.100:8858
192.168.66.100:8868

启动Nacos服务

复制代码
./startup.sh

使用Nginx作负载均衡访问集群的Nacos

环境安装

复制代码
yum -y install gcc make automake pcre-devel
zlib zlib-devel openssl openssl-devel

安装Nginx

复制代码
./configure
make && make install

配置nginx.conf文件

复制代码
#定义upstream名字,下面会引用
upstream nacos{  
        #指定后端服务器地址
        server 192.168.66.100:8848;        
        server 192.168.66.100:8858;  
        server 192.168.66.100:8868;    
}
server {
  listen 80;
  server_name localhost;
  location / {
      proxy_pass http://nacos;        #引用upstream
 }
}

重启Nginx

复制代码
docker restart nginx

通过访问nginx就可以实现nacos访问的负载均衡

请求http://localhost/nacos

分布式流量防护_认识分布式流量防护

在分布式系统中,服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护,并有效控制流量,是分布式系统的技术挑战之一。

什么是服务雪崩

假设我有一个微服务系统,这个系统内包含了 ABCD 四个微服务, 这四个服务都是以集群模式构建的。

雪崩问题:

微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

解决方案

服务保护技术

在SpringCloud当中支持多种服务保护技术:

1、Hystrix

2、Sentinel

3、Resilience4J

Sentinel 服务容错的思路

Sentinel 是 Spring Cloud Alibaba 的⼀款服务容错组件,我们也经常把它叫做"防流量哨兵"。它是阿里巴巴双十一促核心场景的保护神,内置了丰富的服务容错应用场景。它以流量作为切入点,通过各种内外防控手段达到维持服务稳定性的目的。

内部异常治理

在 Sentinel 中,我们可以采用降级和熔断的方式处理内部的异常。 所谓降级,是指当服务调用发生了响应超时、服务异常等情况时, 我们在服务内部可以执行一段"降级逻辑"。

而所谓熔断,是指当异常调用量达到一定的判定条件,比如在异常降级和慢调用请求的比例达到⼀个阈值、窗口时间内降级请求达到 ⼀定数量的情况下,微服务在一段时间内停止对⽬标服务发起调用,所有来访请求直接执行降级逻辑。所以,熔断是"多次服务调用 异常"累积的结果。

外部流量控制

限流是流量整形流控方案的一种。在 Sentinel 中我们可以根据集群的处理能力,为每个服务设置⼀个限流规则,从 QPS 维度或者并发 线程数的维度控制外部的访问流量。⼀旦访问量超过阈值,后续的请求就会被 "fast fail",这是最为常用的⼀种限流手段。

实时效果反馈

1.下列___可以解决服务雪崩问题。

A 超时机制

B 熔断机制

C 流量控制

D 以上都是正确

2.Sentinel外部流量控制指的是_____。

A 熔断

B 降级

C 限流

D 隔离

分布式流量防护_认识Sentinel

Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。

Sentinel 的主要特性

Sentinel 分为两个部分

1、控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。

2、核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

注意:

Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心 库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的 效果。

Sentinel谁在用

Sentinel 与 Hystrix、resilience4j 的对比

实时效果反馈

1.下列属于Sentinel优点的是___。

A 提供开箱即用的控制台

B 丰富的熔断降级策略

C 支持流量整形

D 以上都是正确

相关推荐
wellc34 分钟前
SpringBoot集成Flowable
java·spring boot·后端
Hui Baby1 小时前
springAi+MCP三种
java
hsjcjh1 小时前
【MySQL】C# 连接MySQL
java
敖正炀1 小时前
LinkedBlockingDeque详解
java
wangyadong3171 小时前
datagrip 链接mysql 报错
java
untE EADO1 小时前
Tomcat的server.xml配置详解
xml·java·tomcat
ictI CABL2 小时前
Tomcat 乱码问题彻底解决
java·tomcat
敖正炀2 小时前
DelayQueue 详解
java
敖正炀2 小时前
PriorityBlockingQueue 详解
java
shark22222222 小时前
Spring 的三种注入方式?
java·数据库·spring