【Nginx】负载均衡

news2025/2/26 14:18:37

文章目录

  • 负载均衡概述
  • 负载均衡的原理及处理流程
  • 负载均衡常用的处理方式
    • 方式一:用户手动选择
    • 方式二:DNS轮询方式
    • 方式三:四/七层负载均衡
  • Nginx七层负载均衡的指令
    • upstream指令
    • server指令
  • Nginx七层负载均衡的实现流程
  • 负载均衡状态
  • 负载均衡策略
  • 负载均衡案例
    • 案例一:对所有请求实现一般轮询规则的负载均衡
    • 案例二:对所有请求实现加权轮询规则的负载均衡
    • 案例三:对特定资源实现负载均衡
    • 案例四:对不同域名实现负载均衡
    • 案例五:实现带有URL重写的负载均衡
  • Nginx四层负载均衡
    • 添加stream模块的支持
    • Nginx四层负载均衡的指令
      • stream指令
      • upstream指令
    • 四层负载均衡的案例

负载均衡概述

早期的网站流量和业务功能都比较简单,单台服务器足以满足基本的需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也跟着越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器进行性能的水平扩展及避免单点故障出现。那么如何将不同用户的请求流量分发到不同的服务器上呢?
在这里插入图片描述

负载均衡的原理及处理流程

系统的扩展可以分为纵向扩展和横向扩展:

  • 纵向扩展是从单机的角度出发,通过增加系统的硬件处理能力来提升服务器的处理能力

  • 横向扩展是通过添加机器来满足大型网站服务的处理能力。

在这里插入图片描述

这里面涉及到两个重要的角色分别是"应用集群"和"负载均衡器":

  • 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理并返回响应的数据。

  • 负载均衡器:将用户访问的请求根据对应的负载均衡算法,分发到集群中的一台服务器进行处理。

负载均衡的作用

1、解决服务器的高并发压力,提高应用程序的处理性能。

2、提供故障转移,实现高可用。

3、通过添加或减少服务器数量,增强网站的可扩展性。

4、在负载均衡器上进行过滤,可以提高系统的安全性。

负载均衡常用的处理方式

方式一:用户手动选择

这种方式比较原始,只要实现的方式就是在网站主页上面提供不同线路、不同服务器链接方式,让用户来选择自己访问的具体服务器,来实现负载均衡。

在这里插入图片描述

方式二:DNS轮询方式

域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换。

DNS 轮询是一种简单的负载均衡方式。它的工作原理是:

  1. 将多个服务器的 IP 地址绑定到一个域名下,这多个 IP 地址被轮流解析到这个域名。
  2. 当用户访问这个域名时,DNS 服务器每次会返回这个域名的一个 IP 地址,这个 IP 地址顺序是轮流的,依次循环每个服务器的 IP。
  3. 所以不同用户在不同时间访问这个域名,会得到不同的 IP 地址,实现负载均衡效果。

DNS 轮询的工作过程如下:

  1. 用户访问域名 www.example.com,发送域名解析请求到 DNS 服务器。
  2. DNS 服务器维护着 www.example.com 域名对应的多个 IP 地址,比如 IP1,IP2,IP3。每次解析,它会选择列表中的一个 IP 返回。
  3. 例如这次返回 IP2,那么用户就会访问 IP2 对应的服务器。
  4. 过一段时间,另一个用户访问 www.example.com,DNS 服务器这次返回 IP3。
  5. 然后下一个用户访问,返回 IP1,如此循环。
  6. 通过这种方式,域名 www.example.com 对应的多个服务器就实现了负载均衡,流量被分发到不同的服务器。

在这里插入图片描述

如下是我们为某一个域名添加的IP地址,用2台服务器来做负载均衡。

在这里插入图片描述

验证:

ping www.nginx521.cn

清空本地的dns缓存

ipconfig/flushdns

我们发现使用DNS来实现轮询,不需要投入过多的成本,虽然DNS轮询成本低廉,但是DNS负载均衡存在明显的缺点:

  1. 可靠性低:假设一个域名DNS轮询多台服务器,如果其中的一台服务器发生故障,那么所有的访问该服务器的请求将不会有所回应,即使你将该服务器的IP从DNS中去掉,但是由于各大宽带接入商将众多的DNS存放在缓存中,以节省访问时间,导致DNS不会实时更新。所以DNS轮流上一定程度上解决了负载均衡问题,但是却存在可靠性不高的缺点。

  2. 负载均衡不均衡:DNS负载均衡采用的是简单的轮询负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能好的服务器多分配请求,另外本地计算机也会缓存已经解析的域名到IP地址的映射,这也会导致使用该DNS服务器的用户在一定时间内访问的是同一台Web服务器,从而引发Web服务器减的负载不均衡。

    • 负载不均衡则会导致某几台服务器负荷很低,而另外几台服务器负荷确很高,处理请求的速度慢,配置高的服务器分配到的请求少,而配置低的服务器分配到的请求多。

方式三:四/七层负载均衡

介绍四/七层负载均衡之前,我们先了解一个概念,OSI(open system interconnection),叫开放式系统互联模型,这个是由国际标准化组织ISO指定的一个不基于具体机型、操作系统或公司的网络体系结构。该模型将网络通信的工作分为七层。

在这里插入图片描述

  • 应用层:为应用程序提供网络服务。

  • 表示层:对数据进行格式化、编码、加密、压缩等操作。

  • 会话层:建立、维护、管理会话连接。

  • 传输层:建立、维护、管理端到端的连接,常见的有TCP/UDP。

  • 网络层:IP寻址和路由选择

  • 数据链路层:控制网络层与物理层之间的通信。

  • 物理层:比特流传输。

所谓四层负载均衡指的是OSI七层模型中的传输层,主要是基于IP+PORT的负载均衡

实现四层负载均衡的方式:
硬件:F5 BIG-IP、Radware等
软件:LVS、Nginx、Hayproxy等

所谓的七层负载均衡指的是在应用层,主要是基于虚拟的URL或主机IP的负载均衡

实现七层负载均衡的方式:
软件:Nginx、Hayproxy等

四层和七层负载均衡的区别

四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。
四层负载均衡不识别域名,而七层负载均衡识别域名。

除了层和七层负载以外其实还有二层、三层负载均衡,二层是在数据链路层基于mac地址来实现负载均衡,三层是在网络层一般采用虚拟IP地址的方式实现负载均衡。

实际环境采用的模式

四层负载(LVS)+七层负载(Nginx)

Nginx七层负载均衡

Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。

Nginx七层负载均衡的指令

upstream指令

该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1。

语法upstream name {…}
默认值
位置http

server指令

该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket

语法server name [paramerters]
默认值
位置upstream

Nginx七层负载均衡的实现流程

在这里插入图片描述

Nginx 七层负载均衡的实现流程如下:

  1. 客户端向 Nginx 发起请求,请求首先被 Nginx 接收。
  2. Nginx 根据负载均衡方法(轮询、least_conn 等)选择一台上游服务器。
  3. Nginx 将客户端请求中的内容替换成选出的上游服务器的 IP 和端口。然后将这个修改后的请求发送到上游服务器。
  4. 上游服务器处理请求后,将响应发送回 Nginx。
  5. Nginx 收到来自上游服务器的响应后,会将响应的内容替换回原客户端请求中的 IP 和端口。
  6. Nginx 最终将修改后的响应内容返回给客户端。在整个过程中,客户端只知道自己在和 Nginx 服务器进行交互,并不知道上游服务器的存在。
  7. 由于 Nginx 替换了请求和响应中的目标 IP,在客户端看来整个请求过程是连续的,这就是所谓的七层转发的由来。

服务端设置

server {
    listen   9001;
    server_name localhost;
    default_type text/html;
    location /{
    	return 200 '<h1>192.168.200.146:9001</h1>';
    }
}
server {
    listen   9002;
    server_name localhost;
    default_type text/html;
    location /{
    	return 200 '<h1>192.168.200.146:9002</h1>';
    }
}
server {
    listen   9003;
    server_name localhost;
    default_type text/html;
    location /{
    	return 200 '<h1>192.168.200.146:9003</h1>';
    }
}

负载均衡器设置

upstream backend{
	server 192.168.200.146:9091;
	server 192.168.200.146:9092;
	server 192.168.200.146:9093;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

负载均衡状态

代理服务器在负责均衡调度中的状态有以下几个:

状态概述
down当前的server暂时不参与负载均衡
backup预留的备份服务器
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后, 服务暂停时间
max_conns限制最大的接收连接数

down

down:将该服务器标记为永久不可用,那么该代理服务器将不参与负载均衡。

upstream backend{
	server 192.168.200.146:9001 down;
	server 192.168.200.146:9002
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

该状态一般会对需要停机维护的服务器进行设置。

backup

backup:将该服务器标记为备份服务器,当主服务器不可用时,将用来传递请求。

upstream backend{
	server 192.168.200.146:9001 down;
	server 192.168.200.146:9002 backup;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

此时需要将9094端口的访问禁止掉来模拟下唯一能对外提供访问的服务宕机以后,backup的备份服务器就要开始对外提供服务,此时为了测试验证,我们需要使用防火墙来进行拦截。

介绍一个工具firewall-cmd,该工具是Linux提供的专门用来操作firewall的。

查询防火墙中指定的端口是否开放

firewall-cmd --query-port=9001/tcp

如何开放一个指定的端口

firewall-cmd --permanent --add-port=9002/tcp

批量添加开发端口

firewall-cmd --permanent --add-port=9001-9003/tcp

如何移除一个指定的端口

firewall-cmd --permanent --remove-port=9003/tcp

重新加载

firewall-cmd --reload

其中

​ --permanent表示设置为持久

​ --add-port表示添加指定端口

​ --remove-port表示移除指定端口

max_conns

max_conns=number:用来设置代理服务器同时活动链接的最大数量,默认为0,表示不限制,使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。

max_fails和fail_timeout

max_fails=number:设置允许请求代理服务器失败的次数,默认为1。

fail_timeout=time:设置经过max_fails失败后,服务暂停的时间,默认是10秒。

upstream backend{
	server 192.168.200.133:9001 down;
	server 192.168.200.133:9002 backup;
	server 192.168.200.133:9003 max_fails=3 fail_timeout=15;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

负载均衡策略

介绍完Nginx负载均衡的相关指令后,我们已经能实现将用户的请求分发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采用什么样的负载算法?

Nginx的upstream支持如下六种方式的分配算法,分别是:

算法名称说明
轮询默认方式
weight权重方式
ip_hash依据ip分配方式
least_conn依据最少连接方式
url_hash依据URL分配方式
fair依据响应时间方式

轮询

是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置。

upstream backend{
	server 192.168.200.146:9001 weight=1;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

weight加权[加权轮询]

weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况。

upstream backend{
	server 192.168.200.146:9001 weight=10;
	server 192.168.200.146:9002 weight=5;
	server 192.168.200.146:9003 weight=3;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

ip_hash

ip_hash 策略是根据客户端 IP 的 hash 值来选择上游服务器的。每个客户端 IP 会一直映射到同一台上游服务器,直到上游服务器不可用。

语法ip_hash;
默认值
位置upstream
upstream backend{
	ip_hash;
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

ip_hash 策略的使用场景有:

  1. 需要实现会话保持的场景:由于同一客户端 IP 的请求会转发到同一台服务器,所以可以实现会话数据的共享,不需要额外的会话同步机制。
    • 例如:购物车的实现,需要将同一个客户的请求连接到同一台服务器,以保证购物车的数据一致性。
  2. 上游服务器的缓存数据需要重用的场景:如果我们的上游服务器使用了缓存,ip_hash 可以最大限度地重用缓存数据,避免同一用户的请求被分发到不同服务器,导致缓存无效。
    • 例如:基于内容的静态网站可以使用 ip_hash 充分利用上游服务器的缓存,避免缓存命中率低下的问题。
  3. 上游服务器具有强烈的session定界的数据共享需求:如果上游应用服务器处理请求依赖于某个会话,那么 ip_hash 可以将这个会话的所有请求定向到同一台服务器,保证 session 数据的一致性。

所以,ip_hash 策略的主要使用场景是需要会话保持、重用上游服务器缓存以及上游应用服务器的 session 共享等需求的场景。

在这里插入图片描述

ip_hash 的主要缺点是:

  1. 无法实现真正的负载均衡:由于 ip_hash 会固定把同一 IP 的请求导向一台上游服务器,可能导致部分上游服务器压力大,部分上游服务器闲置的现象,无法做到完全的负载均衡。
  2. 上游服务器单点故障问题:当某一台上游服务器不可用时,映射到它的所有 IP 请求都会失败,直到管理员更换上游服务器。
  3. 不能处理上游服务器的重负载情况:如果某一台上游服务器的压力突然增大,ip_hash 也无法实现自动转移,需要管理员人工处理。

least_conn

最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream backend{
	least_conn;
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

在这里插入图片描述

url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

upstream backend{
	hash &request_uri;
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

访问如下地址:

http://192.168.200.133:8083/a
http://192.168.200.133:8083/b
http://192.168.200.133:8083/c

在这里插入图片描述

fair

fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的fair负载均衡策略。

upstream backend{
	fair;
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

但是如何直接使用会报错,因为fair属于第三方模块实现的负载均衡。需要添加nginx-upstream-fair,如何添加对应的模块:

  1. 下载nginx-upstream-fair模块
下载地址为:
	https://github.com/gnosek/nginx-upstream-fair
  1. 将下载的文件上传到服务器并进行解压缩
unzip nginx-upstream-fair-master.zip
  1. 重命名资源
mv nginx-upstream-fair-master fair
  1. 使用./configure命令将资源添加到Nginx模块中
./configure --add-module=/root/fair
  1. 编译
make

编译可能会出现如下错误,ngx_http_upstream_srv_conf_t结构中缺少default_port

在这里插入图片描述

解决方案:

在Nginx的源码中 src/http/ngx_http_upstream.h,找到ngx_http_upstream_srv_conf_s,在模块中添加添加default_port属性

in_port_t	   default_port

在这里插入图片描述

然后再进行make.

  1. 更新Nginx

​ 6.1 将sbin目录下的nginx进行备份

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold

​ 6.2 将安装目录下的objs中的nginx拷贝到sbin目录

cd objs
cp nginx /usr/local/nginx/sbin

​ 6.3 更新Nginx

cd ../
make upgrade
  1. 编译测试使用Nginx

上面介绍了Nginx常用的负载均衡的策略,有人说是5种,是把轮询和加权轮询归为一种,也有人说是6种。那么在咱们以后的开发中到底使用哪种,这个需要根据实际项目的应用场景来决定的。

负载均衡案例

案例一:对所有请求实现一般轮询规则的负载均衡

upstream backend{
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

案例二:对所有请求实现加权轮询规则的负载均衡

upstream backend{
	server 192.168.200.146:9001 weight=7;
	server 192.168.200.146:9002 weight=5;
	server 192.168.200.146:9003 weight=3;
}
server {
	listen 8083;
	server_name localhost;
	location /{
		proxy_pass http://backend;
	}
}

案例三:对特定资源实现负载均衡

upstream videobackend{
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
}
upstream filebackend{
	server 192.168.200.146:9003;
	server 192.168.200.146:9004;
}
server {
	listen 8084;
	server_name localhost;
	location /video/ {
		proxy_pass http://videobackend;
	}
	location /file/ {
		proxy_pass http://filebackend;
	}
}

案例四:对不同域名实现负载均衡

upstream itcastbackend{
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
}
upstream itheimabackend{
	server 192.168.200.146:9003;
	server 192.168.200.146:9004;
}
server {
	listen	8085;
	server_name www.itcast.cn;
	location / {
		proxy_pass http://itcastbackend;
	}
}
server {
	listen	8086;
	server_name www.itheima.cn;
	location / {
		proxy_pass http://itheimabackend;
	}
}

案例五:实现带有URL重写的负载均衡

upstream backend{
	server 192.168.200.146:9001;
	server 192.168.200.146:9002;
	server 192.168.200.146:9003;
}
server {
	listen	80;
	server_name localhost;
	location /file/ {
		rewrite ^(/file/.*) /server/$1 last;
	}
	location / {
		proxy_pass http://backend;
	}
}

Nginx四层负载均衡

Nginx在1.9之后,增加了一个stream模块,用来实现四层协议的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡。

四层协议负载均衡的实现,一般都会用到LVS、HAProxy、F5等,要么很贵要么配置很麻烦,而Nginx的配置相对来说更简单,更能快速完成工作。

添加stream模块的支持

Nginx默认是没有编译这个模块的,需要使用到stream模块,那么需要在编译的时候加上--with-stream

完成添加--with-stream的实现步骤:

》将原有/usr/local/nginx/sbin/nginx进行备份
》拷贝nginx之前的配置信息
》在nginx的安装源码进行配置指定对应模块  ./configure --with-stream
》通过make模板进行编译
》将objs下面的nginx移动到/usr/local/nginx/sbin下
》在源码目录下执行  make upgrade进行升级,这个可以实现不停机添加新模块的功能

Nginx四层负载均衡的指令

stream指令

该指令提供在其中指定流服务器指令的配置文件上下文。和http指令同级。

语法stream { … }
默认值
位置main

upstream指令

该指令和http的upstream指令是类似的。

四层负载均衡的案例

需求分析

在这里插入图片描述

实现步骤

(1)准备Redis服务器,在一条服务器上准备三个Redis,端口分别是6379,6378

1.上传redis的安装包,redis-4.0.14.tar.gz

2.将安装包进行解压缩

tar -zxf redis-4.0.14.tar.gz

3.进入redis的安装包

cd redis-4.0.14

4.使用make和install进行编译和安装

make PREFIX=/usr/local/redis/redis01 install

5.拷贝redis配置文件redis.conf到/usr/local/redis/redis01/bin目录中

cp redis.conf	/usr/local/redis/redis01/bin

6.修改redis.conf配置文件

port  6379      #redis的端口
daemonize yes   #后台启动redis

7.将redis01复制一份为redis02

cd /usr/local/redis
cp -r redis01 redis02

8.将redis02文件文件夹中的redis.conf进行修改

port  6378      #redis的端口
daemonize yes   #后台启动redis

9.分别启动,即可获取两个Redis.并查看

ps -ef | grep redis

使用Nginx将请求分发到不同的Redis服务器上。

(2)准备Tomcat服务器.

1.上传tomcat的安装包,apache-tomcat-8.5.56.tar.gz

2.将安装包进行解压缩

tar -zxf apache-tomcat-8.5.56.tar.gz

3.进入tomcat的bin目录

cd apache-tomcat-8.5.56/bin
./startup

nginx.conf配置

stream {
        upstream redisbackend {
                server 192.168.200.146:6379;
                server 192.168.200.146:6378;
        }
        upstream tomcatbackend {
        		server 192.168.200.146:8080;
        }
        server {
                listen  81;
                proxy_pass redisbackend;
        }
        server {
        		listen	82;
        		proxy_pass tomcatbackend;
        }
}

访问测试。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“多杆合一”降本增效——数字孪生智慧灯杆

随着智慧城市建设的不断深入&#xff0c;智慧灯杆作为城市基础设施的重要组成部分&#xff0c;正在成为城市智能化和绿色化的重要手段之一。 图扑智慧灯杆系统在城市道路照明领域引入信息化手段&#xff0c;通过构建路灯物联网&#xff0c;实现了现代化的路灯按需维修和按需照…

Windows与Linux系统实现文件互传(通俗易懂)

SCP指令可以实Windows系统与Linux系统之间的文件互传 引言Windows系统文件传输到Linux系统上&#xff08;先操作&#xff09;Windows系统文件传输到Linux系统上&#xff08;再细聊&#xff09;Linux系统文件传输到Windows系统上&#xff08;先操作&#xff09;Linux系统文件传输…

【PCIE702-1】基于Kintex UltraScale系列FPGA的高性能PCIe总线数据预处理载板

板卡概述 PCIE702-1是一款基于PCIE总线架构的高性能数据预处理FMC载板&#xff0c;板卡采用Xilinx的高性能Kintex UltraScale系列FPGA作为实时处理器&#xff0c;实现各个接口之间的互联。板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1路PCIe x8主机接口&#x…

【首发】全道科技轻地图数据闭环解决方案

近日&#xff0c;全道科技执行董事王闯在WGDC 2023进行了《从‘重感知、轻地图’看城市NOA解决方案创新与发展》的主题演讲&#xff0c;不仅从高精地图自动化量产技术服务商角度&#xff0c;以更加专业的视角阐释了自动驾驶实现“轻地图”的路径&#xff0c;同时发布了基于此趋…

域名所有权验证教程

申请域名型证书&#xff0c;可以通过以下方式验证域名的所有权&#xff1a;1. 文件验证&#xff08;云建站主机请选择dns方式&#xff09;2. 手动DNS验证 3. 自动DNS验证 申请域名型证书&#xff0c;可以通过以下方式验证域名的所有权&#xff1a; 1. 文件验证 根据提示需要创…

数字化军港管理:智慧可视化的力量

随着科技的不断发展和军事需求的日益增长&#xff0c;智慧军港可视化技术成为军事领域中备受瞩目的创新应用。以数据可视化为核心&#xff0c;智慧军港可视化将军港运营管理提升到一个全新的水平&#xff0c;为军事力量的部署、维护和战备提供了前所未有的支持和优势。 山海鲸 …

全面SOA化,详解华为iDVP数字底座

交流群 | 进“传感器群/滑板底盘群/汽车基础软件群/域控制器群”请扫描文末二维码&#xff0c;添加九章小助手&#xff0c;务必备注交流群名称 真实姓名 公司 职位&#xff08;不备注无法通过好友验证&#xff09; 作者 | 张萌宇 在汽车产业向智能化转型的过程中&#xff0c…

WindowManager 1.1.0-beta01 新功能详解

作者 / 技术撰稿人兼软件工程师 Jon Eckenrode Jetpack WindowManager 库的 1.1.0-beta01 版本正继续有条不紊地推进 1.1.0 稳定版本的发布。Beta 版增加多个新特性和功能&#xff0c;欢迎您即刻进行测试、抢先体验&#xff01; 我们需要您的反馈以优化 WindowManager 的功能&a…

丁凯博士在CCIG:文档图像处理「新未来」

文章目录 ⭐️ CCIG大会简介⭐️ 合合信息 与 丁凯博士⭐️ 领先世界的智能文档处理技术&#x1f31f; 智能图像处理&#xff1a;为文字识别 "增质提效" 筑基✨ 切边增强 - 提升文档图像质量✨ 弯曲矫正 - 解决图像畸变问题✨ 去摩尔纹 - 保证图像信息完整 &#x1f…

各行业防雷工程和防雷接地的应用方案

随着现代电气、电子设备的广泛应用&#xff0c;防雷措施也越来越受到重视。特别是在单位、家庭建筑物中&#xff0c;为了保障人们的生命财产安全&#xff0c;必须采取严格的防雷措施。 一、防雷举措 接地系统 接地系统是防雷措施的基础&#xff0c;其目的是将建筑物内部的电…

AI孙燕姿爆火,华语乐坛重温旧梦

最近在B站&#xff0c;AI孙燕姿火了。 浏览相关搜索页面&#xff0c;这位新晋“红人”翻唱了各种类型的歌曲&#xff0c;包括《红豆》《爱在西元前》《水星记》《安河桥》&#xff0c;甚至还有《向天再借五百年》&#xff0c;更重要的是&#xff0c;表现普遍不俗&#xff0c;俘…

态路小课堂丨光口不亮?三种简单故障排查请查收!

在光链路中&#xff0c;当遇到交换机光口互连不亮情况时&#xff0c;很多人不知道如何处理。本文态路为您介绍三种简单故障排查方案&#xff0c;助您快速进行故障排查和问题定位。 一、首先检查一致性 1、两端光模块型号是否一致。一般包括速率、封装模式、接口类型、传输波长、…

pdf如何删除其中一页?不妨试试这些办法

PDF格式是一种非常常见的文档格式&#xff0c;它可以在各种系统和设备上使用&#xff0c;而且无论在哪里打开&#xff0c;都可以保持格式的一致性。有时候&#xff0c;我们需要删除PDF文档中的一页&#xff0c;无论是为了更改文档的结构&#xff0c;还是为了删除错误的信息。在…

chatgpt赋能Python-python_imapclient

Python IMAPClient – 了解如何使用它 Python是一种流行的解释性编程语言&#xff0c;它在Web开发、数据科学、人工智能等领域得到广泛应用。Python提供了极大的灵活性和易用性&#xff0c;几乎可以满足任何编程需求。如果你需要编写电子邮件客户端&#xff0c;Python IMAPCli…

Spring Boot 日志处理

Spring Boot 日志处理 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它提供了简洁的配置和强大的开发工具。日志是应用程序中必不可少的一部分&#xff0c;因为它可以帮助开发人员进行调试和故障排除。Spring Boot 提供了多种日志框架&#xff0c;本文将重点介绍如…

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用?

Spring Cloud Feign 是什么&#xff1f;如何使用它来简化 RESTful 调用&#xff1f; 在分布式系统中&#xff0c;服务之间的通信是非常常见的场景。通常情况下&#xff0c;服务之间的通信是通过 RESTful API 实现的。但是&#xff0c;手动编写 RESTful 调用代码非常繁琐&#…

python---变量(1)

EG:计算方差 1.先把这一组数的平均值计算出来&#xff08;后面会反复使用&#xff09; 2.针对每个数字&#xff0c;分别计算数字和平均值的差&#xff0c;再平方。 3.把2中的平方值相加 4.总和/&#xff08;项数-1&#xff09; 下面我们开始实现这个代码&#xff01; 代码运行…

OpenPCDet系列 | 7.1 KITTI数据集测试流程predicted_boxes预测

文章目录 AnchorHeadTemplate.generate_predicted_boxes部分 AnchorHeadTemplate.generate_predicted_boxes部分 测试流程的结构图如下所示&#xff1a; generate_predicted_boxes函数一开始的数据传入为&#xff1a; 首先对于各类预测的特征图进行重新reshape处理&#x…

Redis配置及优化

一、关系数据库和非关系型数据库 1、关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言…

S20360-SRS科尔摩根KOLLMORGEN

​ S20360-SRS科尔摩根KOLLMORGEN 电机驱动器是一种必不可少的设备&#xff0c;可为步进电机提供所需的电压和电流&#xff0c;使其平稳运行。步进电机是一种步进式转动的直流电机&#xff0c;它无法直接接到直流或交流电源上工作&#xff0c;必须使用专用的驱动电源(步进电机驱…