Nacos介绍与使用

Nacos介绍与使用

文章目录

  • Nacos介绍与使用
    • 一. 什么是Nacos
      • 1 Nacos功能
        • 1.1 配置中心
        • 1.2 注册中心
      • 2.为什么要使用Nacos
    • 二.Nacos 部署安装
      • 1. Nacos 部署方式
      • 2. Nacos 安装
      • 3. 配置数据源
      • 4. 开启控制台授权登录(可选)
    • 三. Nacos配置中心的使用
      • 1. 创建配置信息
      • 2. Spring Boot使用配置中心
        • 1. 添加依赖
        • 2. 设置配置文件
        • 3. 读取配置文件
      • 3.注册中心的使用
        • 1.生产者实现
        • 2.消费者实现
    • 四. 健康检测机制

一. 什么是Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

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

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

1 Nacos功能

Nacos主要功能有以下两种:

  1. 配置中心
  2. 注册中心
1.1 配置中心

配置中心是一种集中化管理配置的服务。

主要作用如下:

  1. 集中管理配置信息:配置中心将不同服务的配置信息集中进行管理,实现了配置信息的集中管理。
  2. 动态更新配置:通过操作界面或者API进行动态配置更新,消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
  3. 配置信息共享:将配置集中在配置中心中,不同的服务实例可以共享一套配置信息
  4. 配置信息安全:配置中心可以对配置信息提供安全管理、权限管理等管理功能。
  5. 配置快照:支持配置信息版本管理、历史记录等管理功能。
1.2 注册中心

注册中心是微服务架构中的一个重要组件,用于实现不同服务实例的注册与发现

主要作用如下:

  1. 服务注册:服务实例启动时,将自身信息注册到注册中心,包括服务名称、地址、端口等。
  2. 服务发现:消费者向注册中心查询服务,并获取服务实例信息来访问服务。
  3. 服务健康检查:注册中心定期检查服务实例健康状况,过滤不健康实例。
  4. 服务路由:提供服务的路由和负载均衡功能。
  5. 服务监控:统计服务调用次数、时长等,用于监控服务状态
  6. 服务更新:当服务实例信息变更时,向注册中心发送更新信息通知。

通过注册中心,服务提供者和消费者只需与注册中心交互即可,从而实现服务的注册与发现,降低了服务间的耦合度。

2.为什么要使用Nacos

  • 易⽤: 简单的数据模型, 标准的 restfulAPI, 易用的控制台, 丰富的使用文档。
  • 稳定: 99.9% 高可用, 脱胎于历经阿里巴巴 10 年生产验证的内部产品, 支持具有数百万服务的大规模场景, 具备企业级 SLA 的开源产品。
  • 实时: 数据变更毫秒级推送生效; 1w 级, SLA 承诺 1w 实例上下线 1s, 99.9% 推送完成; 10w级, SLA 承诺 1w 实例上下线 3s, 99.9% 推送完成; 100w 级别, SLA 承诺 1w 实例上下线 9s,99.9% 推送完成。
  • 规模: 十万级服务/配置, 百万级连接, 具备强大扩展性。

二.Nacos 部署安装

1. Nacos 部署方式

Nacos有三种部署方式;

  1. 单机模式:将注册中心、配置中心等功能集成在一个进程内,全部部署在一台机器上,适用于测试和单机试用。
  2. 集群模式:多个Nacos服务器实例组成一个集群。这些实例通过相互通信和协调工作,共同提供服务注册、配置管理和服务发现等功能。在集群模式下,所有实例共享相同的数据,数据变更会自动部署到所有的实例中,客户端可以随机选择任意一个实例进行服务的注册与发现。适用于生产环境,确保高可用。
  3. 多集群模式:多集群模式是为了满足在不同的区域或网络中进行部署和扩展的需求,在多集群模式中,可以选择不同的Nacos实例组成多个相互独立的集群,每个集群可以拥有自己独立的配置和注册中心,并可以跨集群进行服务注册与发现。多集群模式适用于分布式系统的多区域部署,并可以使用不同的网络和存储设施。每个集群具有独立的数据和配置,但可以通过自定义的同步机制在集群之间共享数据。

2. Nacos 安装

  1. 环境准备:

    • 安装好 JDK,需要 1.8 及其以上版本
    • 建议: 2核 CPU / 4G 内存 及其以上
    • 建议: 生产环境 3 个节点 及其以上
  2. 安装方式:

    1. 源码安装
    2. 编译压缩包安装(推荐):操作简单

    编译压缩包安装流程:

    1. 下载压缩包: 下载地址 ,下载最新发现版
    2. 解压压缩包:使用unzip nacos-server-$version.zip 或者tar -xvf nacos-server-$version.tar.gz
    3. 进入Nacos运行目录:cd nacos/bin
    4. 启动Nacos服务(单机模式启动):
      • Linux/MacOS: sh startup.sh -m standalone
      • Windows:cmd startup.cmd -m standalone

    启动成功后可以使用:localhost:8848/nacos进行访问Nacos的控制台,如下图所示:

    image-20231111000158601

集群部署说明:https://nacos.io/zh-cn/docs/v2/guide/admin/cluster-mode-quick-start.html

3. 配置数据源

Nacos单机模式下默认使用的数据源是内置的嵌入式数据库Derby作为数据库,但是Derby不适合承载生产环境大规模部署,因为有以下限制:

  1. 数据存储容量只有2GB;
  2. 不支持集群模式下的高可用复制;
  3. 性能和并发能力有限制

因此在生产环境中使用单机模式时,可以使用外置数据库作为数据存储,例如MySQL。

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  1. 安装MySQL,版本要求:5.6.5+;

  2. 初始化MySQL数据库,数据库初始化文件:sql语句源文件;

  3. 修改Nacos安装目录中conf/application.properties文件,增加支持MySQL数据源配置,配置如下:

    spring.datasource.platform=mysql
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=nacos
    db.password.0=nacos
    

    参考文档:application.properties配置文件

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

    最后,重新启动Nacos服务。

对于集群模式下的部署可参考官方文档:集群模式下运行Nacos

4. 开启控制台授权登录(可选)

首先找到Nacos安装目录中conf/application.properties文件,修改以下内容:

nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.key=${自定义,保证所有节点一致}
nacos.core.auth.server.identity.value=${自定义,保证所有节点一致}

注意,文档中的默认值SecretKey012345678901234567890123456789012345678901234567890123456789VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=为公开默认值,可用于临时测试,实际使用时请务必更换为自定义的其他有效值。

至此,我们Nacos集群环境就搭建成功了,接下来就是使用Nacos服务的两个核心功能了。

三. Nacos配置中心的使用

1. 创建配置信息

image-20231113182408418

参数说明:

  1. 命名空间:Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
  2. Data ID:配置的唯一标识,用于查找配置文件。
  3. Group:配置分组,用于设置小组信息。

2. Spring Boot使用配置中心

实现步骤:

  1. 添加nacos-config依赖。
  2. 在配置文件(application.properties)中设置Nacos相关信息。
  3. 使用@Value@RefreshScope实现配置的读取和自动更新。
1. 添加依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 设置配置文件
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.config.import=nacos:nacos-config-example
# 配置文件类型
spring.cloud.nacos.config.file-extension=properties
3. 读取配置文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class TestController {
    @Value("${myconfig}")
    private String myconfig;

    @RequestMapping("/getconfig")
    public String getMyconfig(){
        return  myconfig;
    }
}	

3.注册中心的使用

注册中心的交互流程:

image-20231121194329602

注册中心通常有两个角色:

  1. 服务提供者(生产者):对外提供服务的微服务应用。它会把自身的服务注册到服务中心,以供消费者发现和调用。
  2. 服务调用者(消费者):调用其他微服务的应用程序。它会向注册中心订阅自己需要的服务,并基于服务提供者信息发起远程调用。
1.生产者实现

生产者实现有以下3步:

  1. 添加nacos-discovery依赖
  2. 配置nacos服务端信息
  3. 编写调用接口
  1. 添加依赖

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>
    
  2. 设置服务端信息

    spring:
      application:
        name: nacos-discovery-demo #nacos服务名
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            
    
  3. 编写调用接口

    @RestController
    @RequestMapping("/user")
    public class UserController {   
        @RequestMapping("/getnamebyid")
        public String getNameById(Integer id) throws InterruptedException {
            return "name: "+ id;
        }
    }
    
2.消费者实现

实现过程:消费者首先调用生产者的HTTP接口,需要引入Spring Cloud OpenFeign进行HTTP调用,其次为了实现负载均衡,我们还需要引入客户端负载均衡器:Spring Cloud LoadBalancer

具体的OpenFeignLoadBalancer的功能,将会在后续文章中进行详细介绍。

因此消费者实现有以下步骤:

  1. 引入依赖(Nacos注册中心、OpenFeign、Spring Cloud LoadBalancer)
  2. 配置Nacos服务端信息
  3. 在项目中开启OpenFeign
  4. 编写OpenFeign调用代码
  5. 通过OpenFeign调用生产者
  1. 引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 配置Nacos服务端信息

    spring:
      application:
        name: nacos-consumer-demo
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
            username: nacos
            password: nacos
            register-enabled: false # 消费者(不需要注册到nacos中)
    
  3. 在项目中开启OpenFeign

    在启动类文件中添加@EnableFeignClients注解即可

  4. 编写OpenFeign调用代码

    @Service
    @FeignClient("nacos-discovery-demo") // 表示调用 nacos 中的 nacos-discovery-demo 服务
    public interface UserService {
        @RequestMapping("/user/getnamebyid") // 调用生产者的"/user/getnamebyid"接口
        public String getNameById(@RequestParam("id") int id);
    
    }
    
  5. 通过OpenFeign调用生产者

    @RestController
    public class BusinessController {
        
        @Autowired
        private UserService userService;
    
        @RequestMapping("/getnamebyid")
        public String getNameById(Integer id){
            return userService.getNameById(id);
        }
    
    }
    

启动服务后,我们就可以在Nacos控制台看到生产者的服务

image-20231121201201077

进入详情页面后可以看到服务的相关信息

image-20231121201237890

在服务详情页面中,可以看到有许多的参数信息

**分组:**注册服务的所在的组名,默认是DEFAULT_GROUP

**保护阈值:**健康节点要求的最小百分比。用于在服务出现不健康实例时,阻止流量过度向少量健康实例中,保护服务的整体可用性。保护阈值的范围是0到1之间的浮点数,默认为0。当集群中健康的实例占比小于设置的保护阈值时,就会触发阈值保护功能。触发阈值保护后,Nacos会将全部实例(健康实例+不健康实例)全部返回给调用者,虽然损失了一部分流量,但是保证了集群中剩余的健康实例能正常工作。

**服务路由类型:**由于实现不同的路由需求,常见的路由类型有以下两种:

  • **none:**默认路由,基于权重的轮询负载均衡路由策略。
  • **label:**标签路由,相同标签的实例会被聚合为一个集群,不同标签则实现流量隔离。

**临时实例:**Nacos会将服务分为临时实例和永久实例,临时实例的生命周期和服务运行周期相同,服务停止运行,Nacos会将临时实例删除;而永久实例即使程序运行停止,也会在Nacos中。

  • 临时实例(Temporary instances):是指注册到注册中心的服务实例,其注册信息在实例下线或不可用时会自动删除。如果服务实例下线、断开连接或主动注销,Nacos会自动从注册表中删除实例的信息。临时实例适用于临时性的服务实例。
  • 永久实例(Permanent Instance):是指注册到注册中心的服务实例,其注册信息一直保存在Nacos服务器上,直到主动注销或被删除。意味着当服务下线或不可用时,它的注册信息仍保留在Nacos上,直到显示取消注册。永久实例适用于需要长期存在的服务。

对于永久实例实现,通过在配置文件中ephemeral: true实现(yaml文件中于nacos.discover.username同级)

**权重:**用于实现负载均衡,取值范围为0到10000,数值越大,权重越大,负载均衡分配的概率就越高。设置0表示下线。

四. 健康检测机制

Nacos中健康检测机制是用来检测服务健康状态的,只要健康的节点才能被服务端调用,这样程序才能正常的、稳定的运行。

在Nacos中有两种健康检测机制:

  1. 客户端主动上报机制。
  2. 服务端反向探测机制。
image-20231121210954495

如何设置健康检测机制:

在Nacos中健康检测机制不能主动设置,但健康检测机制是和Nacos的服务实例类型强相关的。在Nacos中的两种服务实例分别对应不同的健康检测机制:

  1. 临时实例(也可以叫做非持久化实例):对应客户端主动上报机制。
  2. 永久实例(也可以叫做持久化实例):对应服务端反向探测机制。

客户端主动上报机制

临时实例每隔5秒会主动上报一次自己的健康状况,发送的数据包叫做心跳包,发送心跳包的机制叫做心跳机制。如果心跳包的间隔时间超过了15秒,那么Nacos服务器端就会将此服务实例标记为非健康实例,如果超过了30秒,那么Nacos服务器端将会把此服务实例从服务列表中删除掉。

服务端反向探测机制

永久实例使用的是服务器端反向探测机制,它的探测周期是2000毫秒+随机数(5000毫秒以内),如果检测异常会将此服务实例标记为非健康实例,但不会把实例删除。

Nacos服务器反向探测目前内置了3中探测协议:HTTP探测、TCP探测、MySQL探测。默认使用的是TCP探测。

关于Nacos更多的使用可以参考Nacos官方手册:https://nacos.io/zh-cn/docs/architecture.html

以上是博主对Nacos的介绍,制作不易,看完留下你的一键三连吧!
的间隔时间超过了15秒,那么Nacos服务器端就会将此服务实例标记为非健康实例,如果超过了30秒,那么Nacos服务器端将会把此服务实例从服务列表中删除掉。

服务端反向探测机制

永久实例使用的是服务器端反向探测机制,它的探测周期是2000毫秒+随机数(5000毫秒以内),如果检测异常会将此服务实例标记为非健康实例,但不会把实例删除。

Nacos服务器反向探测目前内置了3中探测协议:HTTP探测、TCP探测、MySQL探测。默认使用的是TCP探测。

关于Nacos更多的使用可以参考Nacos官方手册:https://nacos.io/zh-cn/docs/architecture.html

以上是博主对Nacos的介绍,制作不易,看完留下你的一键三连吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/172978.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

暴力求解欲哭无泪之保安问题

身为程序员哪一个瞬间让你最奔溃&#xff1f; > 提醒&#xff1a;在发布作品前&#xff0c;请把不需要的内容删掉。 方向一&#xff1a;身为程序员遇到过的奔溃瞬间 写题目想到第一个方法便是暴力求解,然后少情况 题目如下: 方向二&#xff1a;如何解决遇到的奔溃瞬间 不…

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大特点分析

数字化时代银行网点厅堂营销存在以下5大特点&#xff1a; 1、产品多样化&#xff1a;在数字化时代&#xff0c;银行的产品和服务变得更加多样化。除了传统的存款、贷款、理财等金融服务外&#xff0c;还新增了各种创新产品&#xff0c;如网上银行、移动支付、投资咨询、保险、…

C++刷题 -- 二分查找

C刷题 – 二分查找 文章目录 C刷题 -- 二分查找一、原理二、例题1.二分查找2.使用二分查找确定target左右边界3.x的平方根 一、原理 条件&#xff1a;数组为有序数组&#xff0c;数组中无重复元素&#xff0c;因为一旦有重复元素&#xff0c;使用二分查找法返回的元素下标可能…

Hibernate 一级缓存,二级缓存,查询缓存

概念&#xff1a; 1.什么是缓存呢&#xff1f; 缓存&#xff1a;是计算机领域的概念&#xff0c;它介于应用程序和永久性数据存储源之间。 缓存&#xff1a;一般人的理解是在内存中的一块空间&#xff0c;可以将二级缓存配置到硬盘。用白话来说&#xff0c;就是一个存储数据的…

问题 R: 胜利大逃亡(HUST)

#include <deque> #define inf 200000 #include<iostream> #include<queue> using namespace std;// 迷宫坐标 int map[59][59][59] { 0 };// 可访问标记 int visit[51][51][51] { 0 }; // 移动方式 int next1[7][4] { {1,0,0},{-1,0,0}, {0,1,0},{0,-1,…

gitlab安装配置及应用

安装 ##安装依赖 yum install -y curl policycoreutils-python openssh-server perl#上传包 rz gitlab-jh-16.5.2-jh.0.el7.x86_64.rpm 安装 yum install gitlab-jh-16.0.3-jh.0.el7.x86_64.rpm 初始化并启动 # 以下两种方法都可以配置访问地址&#xff0c;第一种需要在yum安…

千字文||无聊又数了一下千字文字数

千字文的字数去除标点符号真的整整一千个不多的不少 该文章无技术含量&#xff0c;仅三字经原文&#xff0c;学技术的同学可以止步了 千字文&#xff08;原文&#xff09; 【作者】周兴嗣 【朝代】南北朝 天地玄黄&#xff0c;宇宙洪荒。 日月盈昃&#xff0c;辰宿列张。 寒来…

【LeetCode】104. 二叉树的最大深度

104. 二叉树的最大深度 难度&#xff1a;简单 题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 …

Spring框架学习 -- 创建与使用

目录 (1) 创建spring 项目 ① 创建maven项目 ②添加spring框架支持 ③ 添加启动项 (2) 创建 Bean对象 (3) 将Bean注入到容器 (4) 获取Bean对象 (5) 注意事项 (6) Spring的创建和使用流程图 创作不易多多支持 (1) 创建spring 项目 首先我们使用的开发工具为idea 专业版…

渲染器——双端Diff算法

简单 Diff 算法利用虚拟节点的 key 属性&#xff0c;尽可能地复用 DOM 元素&#xff0c;并通过移动 DOM 的方式来完成更新&#xff0c;从而减少不断地创建和销毁DOM 元素带来的性能开销。但是&#xff0c;简单 Diff 算法仍然存在很多缺陷&#xff0c;这些缺陷可以通过双端 Diff…

[userfaultfd] 2019-BalsnCTF_KrazyNote

前言 题目不算难, 但是这代码逆向可逆死个人:) 悲悲悲 程序分析 内核版本: v5.1.9 保护: 开了 kaslr, smep, smap. 现在的题目基本都开了, 都不用看. 其中 note 模块中注册了一个 misc 设备, 其函数表中就只有 note_open 和 note_unlocked_ioctl 两个函数, 其中 note_open…

GAMES101—Lec 05~06:光栅化

目录 概念回顾&#xff08;个人理解&#xff09;光栅化1.采样2.采样出现的问题&#xff1a;走样 反走样 概念回顾&#xff08;个人理解&#xff09; 屏幕&#xff1a;在图形学中&#xff0c;我们认为屏幕是一个二维数组&#xff0c;数组里的每一个元素为一个二维像素。 光栅化…

1.8w 字详解 SQL 优化

来源&#xff1a;捡田螺的小男孩 1、MySQL的基本架构 2、SQL优化 3、explain执行计划常用关键字详解 很多朋友在做数据分析时&#xff0c;分析两分钟&#xff0c;跑数两小时&#xff1f; 在使用SQL过程中不仅要关注数据结果&#xff0c;同样要注意SQL语句的执行效率。 本文…

【阿里云】图像识别 摄像模块 语音模块

USB 摄像头模块测试及配置 一、首先将 USB 摄像头插入到 Orange Pi 开发板的 USB 接口中二、然后通过 lsmod 命令可以看到内核自动加载了下面的模块三、通过 v4l2-ctl 命令可以看到 USB 摄像头的设备节点信息为 /dev/video0四、使用 fswebcam 测试 USB 摄像头五、使用 motion …

C#期末速成推荐看的知识和免费视频

【拯救者】C#期末速成 (基础讲解整套题讲解文档下载) 4K ​ 这里讲的是【 &#x1f337;速成&#x1f337; 速成&#x1f337; 速成】版本&#xff0c;按课本章节来&#xff0c; 抽取重点&#xff0c;翻译为人话&#xff01;&#xff01;&#xff01;&#x1f49d; 文末附上 免…

Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

这篇文章主要介绍了PythonSelenium定位不到元素常见原因及解决办法(报&#xff1a;NoSuchElementException),文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 在做web应用的自动…

两种Deformable Attention的区别

先分别写一下流程 Deformable DETR(2020)的Deformable Attention 解释&#xff1a; Deformable Attention如下图所示K3, M3K是指每个zq会和K个offset算attention&#xff0c;M是指M个head&#xff0c; z q z_q zq​有NHW个&#xff1a; 参考点&#xff1a;reference points&am…

基于Apache部署虚拟主机网站

文章目录 Apache释义Apache配置关闭防火墙和selinux 更改默认页内容更改默认页存放位置个人用户主页功能基于口令登录网站虚拟主机功能基于ip地址相同ip不同域名相同ip不同端口 学习本章完成目标 1.httpd服务程序的基本部署。 2.个人用户主页功能和口令加密认证方式的实现。 3.…