目录
分布式配置中心_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
C Derby
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 以上都是正确