负载均衡集群——LVS

目录

1.LVS简介

2.LVS体系结构

3.LVS相关术语

4. LVS工作模式

5. LVS调度算法

6.LVS集群介绍

6.1 LVS-DR模式

6.2  LVS – NAT 模式

 6.3 LVS – TUN 模式

7.LVS 集群构建

7.1 LVS/NAT 模式配置

实验操作步骤

步骤 1 Nginx1 和 Nginx2 配置

步骤 2 安装和配置 LVS

步骤 3 检查验证 LVS 配置

附加任务:尝试将 LVS 的算法修改加权轮询。

步骤 1 修改 LVS 配置

步骤 2 修改两台 RS 的权重

7.2LVS/DR 模式配置

步骤 1 Nginx1 和 Nginx2 配置

步骤 2 LVS 预配置

步骤 3 LVS 配置

步骤 4 检查验证 LVS 配置


1.LVS简介

        LVS是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器 , 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是 www.linuxvirtualserver.org 。现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已 经完全内置了LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。 使用LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用 的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
        LVS自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩 的、高可用的网络服务,例如WWW 服务、 Cache 服务、 DNS 服务、 FTP 服务、 MAIL 服务、视频 / 音频点 播服务等等,有许多比较著名网站和组织都在使用LVS 架设的集群系统,例如: Linux 的门户网站( www.linux.com )、向 RealPlayer 提供音频视频服务而闻名的 Real 公司、( www.real.com )、全球最大的开 源网站(sourceforge.net )等。

2.LVS体系结构

        使用LVS 架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用 Load Balancer 表示,中间的服务器群组层,用Server Array 表示,最底端的数据共享存储层,用 Shared Storage 表示。
        Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器( Director Server ) 组成,LVS 模块就安装在 Director Server 上,而 Director 的主要作用类似于一个路由器,它含有完成 LVS 功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array 层的应用服务( Real Server)上。同时,在 Director Server 上还要安装对 Real Server 服务的监控模块 Ldirectord ,此模块用于监测各个Real Server 服务的健康状况。在 Real Server 不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
        Server Array层:由一组实际运行应用服务的机器组成, Real Server 可以是 WEB 服务器、 MAIL 服务器、FTP 服务器、 DNS 服务器、视频服务器中的一个或者多个,每个 Real Server 之间通过高速的 LAN 或分布在各地的WAN 相连接。在实际的应用中, Director Server 也可以同时兼任 Real Server 的角色。
        Shared Storage层:是为所有 Real Server 提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS 网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如 Red hat 的 GFS 文件系统,oracle 提供的 OCFS2 文件系统等。

3.LVS相关术语

为了方便大家探讨 LVS 技术, LVS 社区提供了一个命名的约定,内容如下表

 

4. LVS工作模式

        当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server 节点,而 Real Server节点如何返回数据给用户,是 IPVS 实现的重点技术, IPVS 实现负载均衡机制有三种,分别是NAT、 TUN 和 DR 。
        VS/NAT: 即( Virtual Server via Network Address Translation ) 也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址 (即虚拟IP 地址)改写成选定的 Real Server 地址,同时报文的目标端口也改成选定的 Real Server 的相应端口,最后将报文请求发送到选定的Real Server 。在服务器端得到数据后, Real Server 返回数据给用户 时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟 IP 地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
        VS/TUN :即( Virtual Server via IP Tunneling ) 也就是IP 隧道技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 方式一样,只是它的报文转发方法不同,VS/TUN 方式中,调度器采用 IP 隧道技术将用户请求转发到某个 Real Server ,而这个 Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server 的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在 TUN 方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
        VS/DR: 即( Virtual Server via Direct Routing )也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT 和 VS/TUN 中的一样,但它的报文转发方法又有不同,VS/DR 通过改写请求报文的 MAC 地址,将请求发送到 Real Server ,而 Real Server将响应直接返回给客户,免去了VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server 与 Real Server 都有一块网卡连在同一物理网段上。

5. LVS调度算法

固定调度算法: rr , wrr , dh , sh
动态调度算法: wlc , lblc , lblcr , SED , NQ (后两种官方站点没提到)
详细讲述最常用的四种调度算法:
        轮询调度(Round Robin )“轮询 ” 调度也叫 1:1 调度,调度器通过 “ 轮询 ” 调度算法将外部用户请求按顺序 1:1 的分配到集群中的每个Real Server上,这种算法平等地对待每一台 Real Server ,而不管服务器上实际的负载状况和连接状态。
        加权轮询调度(Weighted Round Robin )“加权轮询 ” 调度算法是根据 Real Server 的不同处理能力来调度访问请求。可以对每台 Real Server 设置不同的调度权值,对于性能相对较好的Real Server 可以设置较高的权值,而对于处理能力较弱的 Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server 的负载情况,并动态地调整其权值。
        最少链接调度(Least Connections ) “ 最少连接 ” 调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“ 最小连接 ” 调度算法可以较好地均衡负载。
        加权最少链接调度(Weighted Least Connections ) “ 加权最少链接调度 ” 是 “ 最少连接调度 ” 的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1 ,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。

6.LVS集群介绍

6.1 LVS-DR模式

LVS-DR模式工作原理   

        首先,来自客户端计算机CIP 的请求被发送到 Director 的 VIP 。然后 Director 使用相同的 VIP 目的 IP 地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过director ),并且以此回复数据包使用的目的 VIP 地址作为源 IP 地址。因此,实际上是客户计算机被“ 欺骗 ” 了,客户计算机始终认为它正与同一台计算机对话,而实际上它正在发送请求数据包给一台计算机(LB ),并从另一台计算机( RS )接收回复的数据包。

6.2  LVS – NAT 模式

(a). 当用户请求到达 Director Server ,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源IP 为 CIP ,目标 IP 为 VIP
(b). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c). IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标 IP 地址为后端服务器 IP ,然后将数据包发至POSTROUTING 链。 此时报文的源 IP 为 CIP ,目标 IP 为 RIP
(d). POSTROUTING 链通过选路,将数据包发送给 Real Server
(e). Real Server 比对发现目标为自己的 IP ,开始构建响应报文发回给 Director Server 。 此时报文的源 IP为RIP ,目标 IP 为 CIP
(f). Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。 此时报文的源IP 为 VIP ,目标 IP 为 CIP

 6.3 LVS – TUN 模式

(a) 当用户请求到达 Director Server ,此时请求的数据报文会先到内核空间的 PREROUTING 链。 此时报文的源IP 为 CIP ,目标 IP 为 VIP 。
(b) PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c) IPVS 比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层 IP 报文,封装源IP为为 DIP ,目标 IP 为 RIP 。然后发至 POSTROUTING 链。 此时源 IP 为 DIP ,目标 IP 为 RIP
(d) POSTROUTING 链根据最新封装的 IP 报文,将数据包发至 RS (因为在外层封装多了一层 IP 首部,所以可以理解为此时通过隧道传输)。 此时源IP 为 DIP ,目标 IP 为 RIP
(e) RS 接收到报文后发现是自己的 IP 地址,就将报文接收下来,拆除掉最外层的 IP 后,会发现里面还有一层IP 首部,而且目标是自己的 lo 接口 VIP ,那么此时 RS 开始处理此请求,处理完成之后,通过 lo 接口送给eth0网卡,然后向外传递。 此时的源 IP 地址为 VIP ,目标 IP 为 CIP
(f) 响应报文最终送达至客户端

7.LVS 集群构建

7.1 LVS/NAT 模式配置

        本实验由四台 Linux构成,分别是 Client、LVS、Ngxin1 和 Nginx2,其中 LVS 的 VIP 为192.168.186.50/24、DIP 为 192.168.186.100/24,Nginx1 的 RIP 为 192.168.186.101/24,Nginx2 的 RIP 为192.168.186.102/24

实验操作步骤

步骤 1 Nginx1 和 Nginx2 配置

[root@Nginx2 ~]# yum install nginx -y
[root@Nginx2 ~]# systemctl start nginx
[root@Nginx2 ~]# mkdir -p /data/nginx
[root@Nginx2 ~]# touch  /data/nginx/index.html
[root@Nginx1 ~]# cat /etc/nginx/conf.d/vhost.conf 
server{listen 80;server_name www.test.com;root /data/nginx;index index.html;}
[root@Nginx1 ~]# curl 192.168.186.102
hello,nginx2
[root@Nginx2 ~]# curl 192.168.186.101
hello,nginx1在 LVS 虚拟机上开启路由转发功能,具体参考命令如下:sed -i "s/ip_forward=0/ip_forward=1/g" /etc/sysctl.confsysctl -p | grep net.ipv4.ip_forwardsysctl -a | grep net.ipv4.ip_forward
配置完成后,测试是否能够正常访问 Nginx1 和 Nginx2,具体如下:
[root@LVS ~]# curl 192.168.186.101
hello,nginx1
[root@LVS ~]# curl 192.168.186.102
hello,nginx2

步骤 2 安装和配置 LVS

yum install -y ipvsadm
等待安装完成后,创建 ipvsadm 启动时所需的配置文件:touch /etc/sysconfig/ipvsadm
然后使用启动该服务,并查看该服务是否启动正常,具体如下:
[root@LVS ~]# systemctl enable ipvsadm --now
[root@LVS ~]# systemctl status ipvsadm

如果服务启动正常,使用以下命令创建算法为轮询的集群:
ipvsadm -A -t 192.168.186.50:80 -s rr
再将 Nginx1 和 Nginx2 添加为后端 RS,具体命令如下:
ipvsadm -a -t 192.168.186.50:80 -r 192.168.186.101 -m
ipvsadm -a -t 192.168.186.50:80 -r 192.168.186.102 -m
配置完成后,检查和核实配置是否生效:
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.186.50:80 rr-> 192.168.186.101:80           Masq    1      0          0         -> 192.168.186.102:80           Masq    1      0          0  

步骤 3 检查验证 LVS 配置

在 LVS 所在的 ECS 上,多次通过 LVS VIP 访问 web 服务,可以查看到以下现象

附加任务:尝试将 LVS 的算法修改加权轮询。

步骤 1 修改 LVS 配置

使用以下命令将当前 LVS 的算法修改为加权轮询:ipvsadm -E -t 192.168.186.50:80 -s wrr
修改完成后,查看是否生效,具体如下:

步骤 2 修改两台 RS 的权重

使用以下命令,将 Nginx1 的权重修改为 2:
[root@LVS ~]# ipvsadm -e -t 192.168.186.50:80 -r 192.168.186.101 -m -w 2
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.186.50:80 wrr
-> 192.168.186.101:80 Masq 2 0 0
-> 192.168.186.102:80 Masq 1 0 0

步骤 3 检查验证 LVS 配置
登录 Client 虚拟机,多次通过 LVS VIP 访问 web 服务,可以查看到以下现象:

 

根据上图,可得出 LVS 的算法已修改为加权轮询

7.2LVS/DR 模式配置

        本实验共使用四台虚拟机,其中一台配置为 LVS 服务器,两台用于 Nginx 服务器的搭建,剩余一台为 Client。其中 Nginx 服务器可以和上一实验复用,两台 Nginx 服务器和 LVS 服务器处于同一子网中,客户端 处于另外一个子网。Nginx 服务器和 LVS 服务器配置 dummy 类型的接口接口用于承载 VIP 。

步骤 1 Nginx1 和 Nginx2 配置

Nginx1 和 Nginx2 中的 Nginx 服务相关配置和上实验保持一致即可。
两台 Nginx 上都需完成以下网络相关的配置。
网络需增加 VIP 的相关配置,具体命令如下:
[root@Nginx1 ~]# nmcli connection add type dummy ifname dummy2 ipv4.method manual
ipv4.addresses 192.168.186.50/32
[root@Nginx2 ~]# nmcli connection add type dummy ifname dummy2 ipv4.method manual
ipv4.addresses 192.168.186.50/32
将 RIP 的网关地址修改为路由器接口地址,参考命令如下:
[root@Nginx1 ~]# nmcli connection modify ens33 ipv4.gateway 192.168.186.1
[root@Nginx1 ~]# nmcli connection down ens33
[root@Nginx1 ~]# nmcli connection up ens33
[root@Nginx2 ~]# nmcli connection modify ens33 ipv4.gateway 192.168.186.1
[root@Nginx2 ~]# nmcli connection down ens33
[root@Nginx2 ~]# nmcli connection up ens33
完成网络配置后,修改相应的 arp 内核配置,具体命令如下:
[root@Nginx1 ~]# cat >> /etc/sysctl.conf << EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.dummy2.arp_ignore = 1
> net.ipv4.conf.dummy2.arp_announce = 2
> EOF
[root@Nginx2 ~]# cat >> /etc/sysctl.conf << EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> net.ipv4.conf.dummy2.arp_ignore = 1
> net.ipv4.conf.dummy2.arp_announce = 2
> EOF

步骤 2 LVS 预配置

如果本实验中的 LVS 服务器和上实验复用,则需删除残留配置。
删除上实验中增加的 LVS 相关配置,具体命令为:
[root@LVS ~]# ipvsadm -D -t 192.168.186.50:80
清理完成后,新增 VIP 相关配置,具体命令如下:
[root@LVS ~]# nmcli connection add type dummy ifname dummy2 ipv4.method manual
ipv4.addresses 192.168.186.50/32
如果需要,请将 DIP 网关配置为路由器接口地址,参考命令如下:
[root@LVS ~]# nmcli connection modify ens33 ipv4.gateway 192.168.186.1
[root@LVS ~]# nmcli connection down ens33
[root@LVS ~]# nmcli connection up ens33
如果是新创建的 LVS 服务器,则仅需要添加 VIP 和修改网关地址即可

步骤 3 LVS 配置

然后使用以下命令,添加相关配置:
[root@LVS ~]# ipvsadm -A -t 192.168.186.50:80 -s rr
[root@LVS ~]# ipvsadm -a -t 192.168.186.50:80 -r 192.168.186.101
[root@LVS ~]# ipvsadm -a -t 192.168.186.50:80 -r 192.168.186.102
添加完成后,查看具体配置,具体如下:
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.186.50:80 rr
-> 192.168.186.101:80 Route 1 0 0
-> 192.168.186.102:80 Route 1 0 0

步骤 4 检查验证 LVS 配置

登录 Client 虚拟机,多次通过 LVS VIP 访问 web 服务,可以查看到以下现象:
可以看出, LVS 服务器以轮询方式分别向 Nginx1 和 Nginx2 转发请求,并将页面返回给客户端。

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

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

相关文章

windows下的文件路径怎么在pycharm中使用(python)

在Windows操作系统中&#xff0c;文件路径的格式与Unix/Linux系统略有不同&#xff0c;主要在于路径分隔符的使用。Windows系统通常使用反斜杠&#xff08;\&#xff09;作为路径分隔符&#xff0c;而Unix/Linux系统使用正斜杠&#xff08;/&#xff09;。当在Python中处理文件…

【AIGC调研系列】Bunny-Llama-3-8B-V与其他多模态大模型相比的优劣

Bunny-Llama-3-8B-V作为基于Llama-3的多模态大模型&#xff0c;其优势主要体现在以下几个方面&#xff1a; 性能超越其他模型&#xff1a;根据我搜索到的资料&#xff0c;Bunny-Llama-3-8B-V在多个主流Benchmark上表现良好&#xff0c;超越了LLaVA-7B、LLaVA-13B、Mini-Gemini…

Navicat连接SQLSever报错:[08001] MicrosoftTCP Provider 远程主机强迫关闭了一个现有的连接

Navicat连接SQLSever报错&#xff1a;[08001] [Microsoft][SQL Server Native Client 10.0]TCP Provider: 远程主机强迫关闭了一个现有的连接 问题分析 旧版的MSSQL 如果不是最新版的&#xff0c;可以去这安装以下即可。 最新版的MSSQL 如果是安装最新版的MSSQL连接不上很正…

2024高级卫生职称考试报名时间汇总

20地报名时间汇总&#xff0c;其他时间安排见图 上海&#xff1a;4.23-5.24 黑龙江&#xff1a;4.23-5.24 陕西&#xff1a;4.23-5.24 重庆&#xff1a;4.23-5.24 浙江&#xff1a;4.23-5.24 20地报名时间汇总 甘肃&#xff1a;4.23-5.24 江西&#xff1a;4.28-5.10 河北&#…

【黑马点评Redis——004达人探店】

1.发布探店笔记 2.点赞 利用Redis中的Set集合来判断是否点赞过。 3.点赞排行榜 可以通过SortedSet来按点赞时间进行排序。 4.好友关注 4.1.关注和取关 4.2.共同关注 可以通过set实现交集的功能 4.3.关注推送 4.3.1 拉模式 拉模式&#xff08;Pull&#xff09;&#x…

linux 上 jps 列出一堆 jar,如何快速定位 jar 文件启动位置?

例如&#xff0c;在 /data下有一个 xxx.jar &#xff0c;如果是通过 "java -jar /data/xxx.jar" 方式启动&#xff0c;则 jps会列出的名字中带 xxx.jar&#xff0c;这时再 "ps -ef | grep xxx.jar" 就会列出 更详细的信息&#xff0c;例如 "java -ja…

【VScode】VScode+如何从git上面拉取代码?

目录标题 1、打开VSCode。File>New Window。2、打开集成终端&#xff08;Terminal > New Terminal 或使用快捷键Ctrl \)。3、在终端中&#xff0c;使用Git命令克隆仓库。4、打开项目。 1、打开VSCode。File>New Window。 2、打开集成终端&#xff08;Terminal > …

Apache Spark 的基本概念

Apache Spark是一个快速、可扩展的大数据处理和分析引擎。它提供了一套丰富的API和库&#xff0c;可以处理大规模的数据集&#xff0c;并支持复杂的图计算、机器学习、实时数据处理和图形处理等任务。 以下是Apache Spark的一些基本概念&#xff1a; 弹性分布式数据集&#x…

Mongodb语法使用说明(含详细示例)

点击下载《Mongodb语法使用说明&#xff08;含详细示例&#xff09;》 1. 前言 MongoDB是一款高性能、开源、面向文档的NoSQL数据库&#xff0c;它使用类似JSON的BSON格式存储数据&#xff0c;提供了灵活的数据模型和强大的查询功能。本文将详细介绍MongoDB数据库的基本增删改…

vue快速入门(四十四)自定义组件

注释很详细&#xff0c;直接上代码 上一篇 新增内容 全局注册自定义组件并应用局部注册自定义组件并应用 此篇使用了axios模块没有安装导入的先看这一篇 axios模块下载与导入 源码 main.js import Vue from vue import App from ./App.vue//全局引入axios // 引入axios impor…

HTTP与HTTPS 对比,区别详解(2024-04-25)

一、简介 HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上&#xff0c;通常使用端口 80。 HTTPS&#xf…

php使用SoapClient对接sap的那些坑

4年前我对接过一次SAP,当时用的PHP5.6,对接的很不顺利。第一次用这玩意好不容易调试通了,主要是传参需要注意下。 $ws = "http://localhost/sap/XXX.wsdl"; //wsdl文件位置 $client = new SoapClient ($ws);//初始化client//获取SoapClient对象引用的服务所提供的…

算法学习笔记——专题拓展5:并查集(Union-find)算法

介绍 并查集&#xff08;Union-Find&#xff09;算法是一个专门针对「动态连通性」的算法&#xff0c;同时它也是最小生成树算法的前置知识。 模板代码 class UF{private:int count;int* parent;public:UF(int n){this->count n;this->parent new int[n];for(int i …

【自然语言处理】InstructGPT、GPT-4 概述

InstructGPT官方论文地址&#xff1a;https://arxiv.org/pdf/2203.02155.pdf GPT-4 Technical Report&#xff1a;https://arxiv.org/pdf/2303.08774.pdf GPT-4&#xff1a;GPT-4 目录 1 InstructGPT 2 GPT-4 1 InstructGPT 在了解ChatGPT之前&#xff0c;我们先看看Instr…

OpenHarmony开源软件供应链安全风险

慕冬亮&#xff0c;华中科技大学网络空间安全学院副教授&#xff0c;武汉英才&#xff0c;华中科技大学OpenHarmony技术俱乐部、开放原子开源社团指导教师。研究方向为软件与系统安全&#xff0c;在国际安全会议上发表十余篇论文&#xff0c;并获得ACM CCS 2018杰出论文奖。创立…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读&#xff1a;在产品创新过程中&#xff0c;市场调研的重要性不言而喻。它不仅是产品创新的起点&#xff0c;也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述&#xff1a;市场调研重要性 1、相关概…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积,替换YoloV8的常规卷积,轻量高效,即插即用!改进方法非常简单。 DO-Conv(Depthwise Over-parameterized Convolutional Layer)是一种深度过参数化的卷积层,用于提高卷积神经网络(CNN)的性能。它的核心思想是在训练阶段使用额外的深度卷积来增…

【C++题解】1037. 恐龙园买门票

问题&#xff1a;1037. 恐龙园买门票 类型&#xff1a;分支 题目描述&#xff1a; 恐龙园买门票&#xff0c;身高低于 1.3 米购儿童票( 60元 )&#xff0c;否则成人票 120 元。 试编写一个程序&#xff0c;输入身高&#xff0c;输出相应的门票价格。 输入&#xff1a; 一行…

OpenCV鼠标绘制线段

鼠标绘制线段 // 鼠标回调函数 void draw_circle(int event, int x, int y, int flags, void* param) {cv::Mat* img (cv::Mat*)param;if (event cv::EVENT_LBUTTONDBLCLK){cv::circle(*img, cv::Point(x, y), 100, cv::Scalar(0, 0, 255), -1);} }// 鼠标回调函数 void dra…

阿斯达年代记游戏下载教程 阿斯达年代记下载教程

《阿斯达年代记&#xff1a;三强争霸》作为一款气势恢宏的MMORPG大作&#xff0c;是Netmarble与STUDIO DRAGON强强联合的巅峰创作&#xff0c;定于4月24日迎来全球玩家热切期待的公测。游戏剧情围绕阿斯达大陆的王权争夺战展开&#xff0c;三大派系——阿斯达联邦、亚高联盟及边…