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 以上都是正确

相关推荐
向阳121826 分钟前
mybatis 缓存
java·缓存·mybatis
上等猿33 分钟前
函数式编程&Lambda表达式
java
蓝染-惣右介1 小时前
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
java·设计模式
一只淡水鱼661 小时前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
秋恬意1 小时前
IBatis和MyBatis在细节上的不同有哪些
java·mybatis
荆州克莱2 小时前
Golang的性能监控指标
spring boot·spring·spring cloud·css3·技术
齐 飞2 小时前
BeanFactory和FactoryBean
java·sprint
大霞上仙2 小时前
lxml 解析xml\html
java·服务器·网络
Xiaoweidumpb2 小时前
tomcat temp临时文件不清空,占用硬盘,jdk字体内存泄漏
java·tomcat