当前位置: 首页 > news >正文

深入理解与应用Keepalive机制

目录

引言

一、VRRP协议

(一)VRRP概述

1.诞生背景

2.基本理论

(二)VRRP工作原理

(三)VRRP相关术语

二、keepalive基本理论

(一)基本性能

(二)实现原理

(三)抢占模式

三、keepalive服务

(一)安装keepalive

(二)全局配置

(三)VRRP实例

(四)服务器配置

四、实际操作

(一)web服务器

(二)LVS集群服务器

五、keepalive管理

(一)主从更替

(二)单播组播

1.指定组播地址

2.设置单播

(三)日志功能

六、keepalive实现高可用

(一)基本理论

(二)实现nginx高可用


引言

基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的Keepalive机制是为了解决网络中静态默认网关单点故障的问题。在传统的网络架构中,如果作为默认网关的路由器出现故障,会导致整个子网失去对外通信的能力。而VRRP则通过引入主备模式来提供高可用性。

一、VRRP协议

(一)VRRP概述

1.诞生背景

终端设备访问不同网段设备的时候,必须经过网关。如果只有1个网关,那么网络就存在 单点故障,所以为了避免单点故障导致网络的通信中断, 所以,我们建议在一个网段中,可以同时添加多个网关,从而增加网关的冗余性和网络的可靠性; 但是,多网关的部署会带来其他的问题:
1.网关IP地址冲突
2.终端用户需要频繁的切换网关IP地址 
针对上述两个问题,提出了:
在同网段的多个网关之间运行VRRP,形成1个虚拟网关,终端用户都配置和使用虚拟网关就可以了。

其作用为

在同一个网段的多个真实网关之间配置和运用,形成层一个虚拟路由器, 从而实现网关的冗余和负载均衡

2.基本理论

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种网络层的容错协议。它的主要目的是在多个物理路由器之间提供一个虚拟路由器服务,以实现默认网关的高可用性。在传统的网络环境中,如果静态配置的默认网关出现故障,则会导致网络中的所有主机失去对外通信的能力。VRRP通过将多台路由器联合起来形成一个虚拟路由器,并选举出一台主路由器来处理所有的流量转发,而其他的备份路由器则随时待命,一旦主路由器出现故障,备份路由器能够迅速接替工作,从而确保网络连通性的持续性和可靠性。

(二)VRRP工作原理

(1) 虚拟路由器中的路由器根据优先级(priority)选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;

(2) Master路由器周期性发送VRRP报文(心跳线),以公布其配置信息(优先级等)和工作状况;

(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;

(4) 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

(5) Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式以及延时抢占)决定是否重新选举Master。

(三)VRRP相关术语

虚拟路由器:Virtual Router 不是真实存在 ,虚构出来的

虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

VIP:Virtual IP 192.168.91.100 路由1 路由2

VMAC:Virutal MAC (00-00-5e-00-01-VRID)

物理路由器:

master:主设备

backup:备用设备

priority:优先级

二、keepalive基本理论

Keepalive机制是网络通信中一种重要的保持连接健康状态的方法,有助于优化网络资源使用,提高服务稳定性和响应速度

常见的keepalive版本

VRRP Keepalive:虚拟路由冗余协议(VRRP)中的心跳检测机制,用于选举和维护路由器的主备状态,确保网络高可用性。

TCP Keepalive:是一种内置于TCP协议中的功能,用于检测并维持连接的活跃状态。当两个端点间存在一个已建立的TCP连接,但在一段时间内没有数据传输时,启用Keepalive的一方会周期性地发送特殊的探测报文(通常是一个空TCP段)给对方。如果接收方没有回应足够数量的Keepalive探测报文,发送方就会认为连接已经断开,并关闭该连接。

HTTP Keepalive:允许HTTP客户端与服务器之间复用同一TCP连接来发送多个请求和响应,以减少TCP连接建立和销毁带来的开销。

应用程序级Keepalive:许多应用程序和服务也有自己的Keepalive机制,比如MySQL数据库的连接保活、WebSocket的ping/pong消息等。

主要学习VRRP Keepalive

(一)基本性能

keepalive是专门为LVS与HA设计的一款健康检查软件

支持故障自动切换(Failover)

支持节点健康状态检查(Health Checking)判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。

官方网站:Keepalived for Linux

(二)实现原理

实现原理与虚拟路由一致

1.首先根据优先级选出Master提供服务

2.Master默认每间隔1秒向Baskup发送一次VRRP报文,告知Baskup自己处于工作状态,并公布配置信息(优先级等)情况

3. 如果Master路由器出现故障,Backup将根据优先级重新选举为新的Master

4.当原Master恢复工作时,将根据抢占模式(抢占方式和非抢占方式以及延时抢占)决定是否重新成为Master

(三)抢占模式

1.抢占式
主服务器宕机,过了一段时间修好了,直接把主权抢过来

2.非抢占式
主服务器宕机,过了一段时间修好了,原来的主就作为备了

3延迟抢占
主修好后,等待一定的时间后再次成为主

三、keepalive服务

keepalive服务可以使用yum安装、以及编译安装

本地yum源自带的版本比较旧

编译安装可以从官网下载较新的安装包进行安装

(一)安装keepalive

使用yum安装:yum  install keepalived.x86_64 -y

默认的主配置文件有157行

(二)全局配置

首先看第一部分3-17行,为全局配置

global_defs
#全局配置notification_email
#定义当VRRP实例状态发生变化时,系统将通过电子邮件发送通知给指定的收件人列表。acassen@firewall.loc, failover@firewall.loc, sysadmin@firewall.loc
#邮件通知的接收者。notification_email_from Alexandre.Cassen@firewall.loc
#设置发送邮件通知时显示的发件人地址,这里是 Alexandre.Cassen@firewall.loc。smtp_server  192.168.200.1
#指定SMTP服务器地址,本例中为 192.168.200.1,该服务器用于发送邮件通知。smtp_connect_timeout  30
#设置SMTP服务器连接超时时间,单位为秒,这里为30秒。router_id LVS_DEVEL
#为当前运行的Keepalived实例设置一个唯一的标识符,用在日志和其他网络通信中vrrp_skip_check_adv_addr
#跳过对通告地址(advertised address)的检查。如果启用此选项,在某些情况下
#可以避免错误,比如通告地址未在任何接口上配置。vrrp_strict
#启用严格模式,要求配置必须符合RFC文档的标准规范,否则Keepalived服务可能不会启动。
#建议关闭vrrp_garp_interval 0
#设置发送GARP(即无请求的ARP响应)消息的时间间隔,默认值通常为1秒。设为0表示禁用GARP功能。vrrp_gna_interval 0
#设置发送GNA(即IPv6下的无请求邻居通告)消息的时间间隔。设为0表示禁用GNA功能

(三)VRRP实例

第二部分:VRRP实例配置(19-34)

vrrp_instance VI_1
'定义VRRP实例名称。'state MASTER
'设置当前节点在VRRP组中的初始状态为MASTER。这意味着该节点将优先处理请求,
并拥有VIP(虚拟IP地址)的所有权''interface eth0'
'指定VRRP通告报文通过哪个网络接口发送,这里使用的是eth0接口。'virtual_router_id 51
'每个VRRP实例需要一个唯一的标识符,这里用数字51表示。主备需要在同一个标识符内'priority 100
'设置本节点在VRRP组中的优先级,数值越高代表优先级越高,优先级最高的节点将成为MASTER'advert_int 1
'设置VRRP通告消息的时间间隔,单位为秒。此处设置为每秒发送一次心跳消息以确认其是否在线'authentication:
auth_type PASS  '设置认证类型为密码认证。'
auth_pass 1111  '设置用于身份验证的共享密码。'virtual_ipaddress
'列出此VRRP实例要管理的一系列虚拟IP地址'

(四)服务器配置

第三部分为服务器配置(36-60)

'虚拟服务器'
virtual_server 192.168.200.100 443
#定义了一个虚拟服务器,对外提供服务的地址为192.168.200.100,监听端口为443(即HTTPS服务)。delay_loop 6
#健康检查间隔,每隔6秒对后端服务器执行一次健康检查。lb_algo rr
#负载均衡算法采用轮询(Round Robin)策略。lb_kind NAT
#负载均衡方式采用NAT,客户端与真实服务器之间的通信通过NAT进行转发。#persistence_timeout 50
#会话保持超时时间,同一个客户端在50秒内发起的新请求都会被转发到同一台后端服务器上。protocol TCP
#明确指出虚拟服务器处理的是TCP流量。'真实服务器配置'real_server 192.168.201.100 443
#定义一个真实服务器,其IP地址为192.168.201.100,同样监听443端口weight 1
#权重值为1,表示该服务器在负载均衡中分配请求的相对权重。SSL_GET
#使用SSL协议发送GET请求来进行健康检查。url
#定义了两个需要检查的URL路径及其预期的HTTP响应摘要。一般不适用url,需要更改connect_timeout 3    #设置连接到真实服务器的超时时间为3秒。
nb_get_retry 3       #如果首次请求未能得到正确的摘要,将重试3次。
delay_before_retry   #每次重试前等待3秒。

四、实际操作

LVS + Keepalived 高可用群集

环境设备

LVS1192.168.83.30 (MASTER)
LVS2192.168.83.40 (BACKUP)
web1192.168.83.50
web2192.168.83.60
客户端192.168.83.100
VIP192.168.83.200

(一)web服务器

首先配置web服务

1.下载安装web服务

yum install  httpd  -y

2.建立虚拟IP

3.调整内核参数

net.ipv4.conf.all.arp_ignore 和 net.ipv4.conf.default.arp_ignore
'设置为1表示节点将更严格地处理ARP请求。在某些情况下,系统不会响应非本地IP地址的ARP请求
这有助于防止IP地址冲突,并且可以用于LVS DR模式下的Director节点,以避免对外直接响应ARP请求'net.ipv4.conf.all.arp_announce 和 net.ipv4.conf.default.arp_announce
'设置为2表示节点在发送ARP应答时总是使用其主接口上的最具体的地址(即,优先级最高的源IP地址)
这同样对LVS DR模式很有用,确保Director节点在回应ARP请求时只使用VIP,而不是实际的物理接
口地址。'

调整完毕后开启web服务:systemctl  start  httpd

在站点目录下构建数据文件

两台web服务器同样操作

(二)LVS集群服务器

1.下载服务

yum  install keepalived.x86_64 -y   && yum  install ipvsadm.x86_64 -y

先启动ipvsadm服务

ipvsadm-save >/etc/sysconfig/ipvsadm  #生成配置信息文件
systemctl start ipvsadm.service              #启动服务

2.配置文件

在配置文件之前,最好先进行备份

cp  /etc/keepalived/keepalived.conf   /etc/keepalived/keepalived.conf.bak

删除60行以下的内容

配置全局设置

配置VRRP热备实例

 vrrp_instance VI_1 {
'定义实例名称,默认即可,也可以自定义'state MASTER
'设置为MASTER表示为主'interface ens33
'指定心跳报文从ens33网卡发送'virtual_router_id 51
'实例表示符,默认即可,BACKUP与其一致'priority 100
'设置优先级,其值需要比BACKUP高'advert_int 1
'每间隔一秒发送一次VRRP报文'authentication {auth_type PASSauth_pass 123123
'定义密码认证方式,并设置密码,BACKUP需要与其一致'}   virtual_ipaddress {192.168.83.200
'设置集群VIP地址'}   
}

配置虚拟路由

 virtual_server 192.168.83.200 80 {#定义对外提供服务的IP地址,提供服务为80端口,即http服务delay_loop 6#每6秒对后端服务器进行健康检查lb_algo rr #设置调度算法为rr(轮询)lb_kind DR#负载均衡方式采用DRpersistence_timeout 0#长连接时间为0秒,为体现操作真实性,真实环境建议调高,默认为50秒protocol TCP#虚拟服务器监听TCP协议的流量real_server 192.168.83.50 80 {#定义真实服务器,其IP地址为192.168.83.50,监听80端口weight 1#轮询权重为1TCP_CHECK {#使用TCP_CHECK模块进行真实服务器的健康状态检测connect_port 80#通过TCP协议连接到真实服务器的80端口以确认其是否可用connect_timeout 3#访问超时时间,超过3秒认为该服务器宕机nb_get_retry 3#重复访问3次delay_before_retry 3#每次访问间隔3秒}   }   real_server 192.168.83.60 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3
#原理同上}}}

配置完毕后启动服务:systemctl start  keepalived.service

查看规则情况

另一台服务器与其基本一致

需要修改12,19,22行信息,其余配置与主服务一致

配置完毕后启动服务

ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start  ipvsadm.service
systemctl start  keepalived.service

使用客户端访问进行测试

五、keepalive管理

(一)主从更替

当MASTER关闭后,优先级最高BACKUP会立马变成MASTER继续工作

当主恢复后,立马会变为MASTER,即为抢占模式(默认)

可以通过添加nopreempt参数,设置为非抢占模式

在虚拟服务器段配置

也可以设置延迟抢占,同样在虚拟服务器段配置

(二)单播组播

在Keepalived中,VRRP实例通常通过组播方式来发送心跳和通告消息以实现高可用性和故障切换

组播地址范围为224.0.0.0-239.255.255.255

默认的组播地址为224.0.0.18。如果有多组keepalive服务器,所有的默认心跳线发送路径都为该地址,容易造成混乱,所以需要修改

通过添加vrrp_mcast_group4来指定特定的组播地址,或者改为单播

注意:如果指定组播地址,所有的服务器都要改

1.指定组播地址

当前192.168.83.30为主。可以通过tcpdump抓包来进行查看

可以看到,MASTER发的VRRP包是发往指定的组播地址224.83.83.83

2.设置单播

'MASTER服务器'unicast_src_ip 192.168.83.30
#该指令指定当前节点作为VRRP通告和心跳消息的发送源地址。
#这意味着所有从这个节点发出的VRRP报文都将使用 192.168.83.30 这个IP地址作为源地址unicast_peer { 
192.168.83.40 
}
#这部分定义了单播对等体列表,即指定接收VRRP通告和心跳消息的目标地址。
#在这里,仅指定了一个对等体地址 192.168.83.40,表示此节点将直接向 192.168.83.40 
#发送VRRP通信信息,而不是通过组播方式广播到整个网络。'BACKUP服务器'
#同上

同样抓包查看验证一下

(三)日志功能

因为keepalive服务较为重要,其日志没有独立的文件存在,默认存放在/var/log/messages文件中

为便于分析,需要将它的日志位置,单独存放

在/etc/sysconfig/keepalived文件中第14行有一段信息为:KEEPALIVED_OPTIONS="-D"

这是一个环境变量或启动参数的设置,用于指定Keepalived服务在启动时使用的额外选项。

-D:表示Keepalived以守护进程(daemon)模式运行。这意味着Keepalived会在后台运行,并且         脱离终端控制台

添加-S选项设置日志

-S :代表设置syslog日志设备,它通常与一个数字参数(0-7)结合使用,用于指定syslog记录的         日志设施级别

修改日志管理配置文件/etc/rsyslog.conf

修改完毕后重启日志管理服务与keepalive服务

六、keepalive实现高可用

keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能

(一)基本理论

VRRP Script是Keepalived的一个强大特性,其配置等级global_defs一致,与它允许用户自定义检测脚本,当Keepalived运行时会周期性地执行这些脚本。如果脚本返回成功(通常为0),则认为被监控的服务处于正常状态;如果脚本返回失败(非0值),则Keepalived将根据配置更改VRRP实例的状态,可能导致主备节点的角色切换,从而确保服务的高可用性。

VRRP Script技术实现,需要先定义脚本,而后调用脚本

'定义脚本'
vrrp_script <SCRIPT_NAME> { 			#定义一个检测脚本,在global_defs 之外配置script <STRING>|<QUOTED-STRING> 	#shell命令或脚本路径(注意执行权限)interval <INTEGER> 				#间隔时间,单位为秒,默认1秒timeout <INTEGER> 					#超时时间weight  <INTEGER:-254..254> 			
#默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低
#本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本
#节点权重,即表示 rise.通常使用负值fall <INTEGER>       	#执行脚本连续几次都失败,则转换为失败,建议设为2以上rise <INTEGER>       	#执行脚本连续几次都成功,把服务器从失败标记为成功
}'调用脚本'
track_script {SCRIPT_NAME_1SCRIPT_NAME_2
}


(二)实现nginx高可用

1.下载安装nginx服务

yum  install epel-release.noarch -y  #下载epel源

yum  install  nginx  -y                    #下载nginx

systemctl  stop  ipvsadm.service  #关闭ipvsamd服务

定义一个简单的脚本

脚本表示使用killall -0,这是Linux命令行中用于检查指定进程名是否存在且至少有一个实例在运行的命令。这里的参数 -0 具有特殊含义,它不会发送任何信号给进程,而是仅仅测试这些进程是否存在

修改nginx配置文件,添加反向代理及负载均衡

修改keepalive配置文件,只保留全局配置与实例配置,删除虚拟服务器与真实服务器配置

在全局配置语句块外添加vrrp_script服务

vrrp_script keep
#定义名为 "keep" 的VRRP检查脚本。script "/data/keep.sh"
#指定要执行的shell脚本路径为 /data/keep.sh。这个脚本应该返回0表示成功,非零值表示失败。interval 1
#设置每隔1秒执行一次该脚本以检查服务状态。timeout 30
#如果脚本在30秒内没有响应(即超时),则认为它执行失败。weight -50
#当脚本执行成功时,VRRP实例的优先级权重减50。fall 3
#当连续3次检查失败后,将触发VRRP实例状态变更,可能导致主备切换。rise 3
#当连续3次检查成功后,恢复VRRP实例到正常状态。

配置完毕后重启keepalive服与nginx服务

systemctl restart  keepalived.service

systemctl start  nginx

另一台keepalive配置与其一致

配置完毕后重启服务,使用客户端访问

相关文章:

深入理解与应用Keepalive机制

目录 引言 一、VRRP协议 &#xff08;一&#xff09;VRRP概述 1.诞生背景 2.基本理论 &#xff08;二&#xff09;VRRP工作原理 &#xff08;三&#xff09;VRRP相关术语 二、keepalive基本理论 &#xff08;一&#xff09;基本性能 &#xff08;二&#xff09;实现原…...

嵌入(embedding)概念

嵌入&#xff08;embedding&#xff09;在数学和相关领域中的确是指将一个数学对象在保持其某些关键性质不变的前提下&#xff0c;注入到一个更大或更高维的空间中。这个过程不仅仅是简单的映射&#xff0c;而是要求注入的对象在新空间中的表现形式能够完整反映原有对象的内在结…...

豆瓣书影音存入Notion

使用Python将图书和影视数据存放入Notion中。 &#x1f5bc;️介绍 环境 Python 3.10 &#xff08;建议 3.11 及以上&#xff09;Pycharm / Vs Code / Vs Code Studio 项目结构 │ .env │ main.py - 主函数、执行程序 │ new_book.txt - 上一次更新书籍 │ new_video.…...

Lucene 分词 示例代码

import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.TokenStream; import org...

2.18 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、自动驾驶一周资讯 - 李想回应“年终奖有点大”&#xff1b;智界升级为奇瑞独立事业部&#xff1b;小鹏汽车春节累计智驾总里程公布 自动驾驶一周资讯 - 李想回应“年终奖有点大”&…...

spring中事务失效的场景有哪些?

异常捕获处理 在方法中已经将异常捕获处理掉并没有抛出。 事务只有捕捉到了抛出的异常才可以进行处理&#xff0c;如果有异常业务中直接捕获处理掉没有抛出&#xff0c;事务是无法感知到的。 解决&#xff1a;在catch块throw抛出异常。 抛出检查异常 spring默认只会回滚非检…...

Visual Studio 2022之Release版本程序发送到其它计算机运行

目录 1、缺少dll​ 2、应用程序无法正常启动 3、This application failed to start because no Qt platform plugin could be initialized. 代码在Debug模式下正常运行&#xff0c;然后切换到Release模式下&#xff0c;也正常运行&#xff0c;把第三方平台的dll拷贝到exe所在…...

Xcode下载模拟器报错Could not download iOS 17.4 Simulator (21E213).

xcode14以后最小化安装包&#xff0c;从而将模拟器不集中在安装包中 因此xcode14至以后的版本安装后第一次启动会加载提示安装模拟器的提示框 或者根据需要到xcode中进行所需版本|平台的模拟器进行安装 Xcode > Settings > Platforms 问题来了尝试多次都安装失败例如…...

mac在终端设置代理

前言 本篇文章介绍如何在mac终端设置代理服务器&#xff0c;有时候&#xff0c;我们需要在终端进行外网的资源访问&#xff0c;比如我构建v8引擎项目的时候&#xff0c;需要使用gclient更新组件和下载构建工具。如果单单设置了计算机的代理&#xff0c;依然是无法下载资源的&a…...

傅立叶之美:深入研究傅里叶分析背后的原理和数学

一、说明 T傅里叶级数及其伴随的推导是数学在现实世界中最迷人的应用之一。我一直主张通过理解数学来理解我们周围的世界。从使用线性代数设计神经网络&#xff0c;从混沌理论理解太阳系&#xff0c;到弦理论理解宇宙的基本组成部分&#xff0c;数学无处不在。 当然&#xff0c…...

golang学习随便记16-反射

为什么需要反射 下面的例子中编写一个 Sprint 函数&#xff0c;只有1个参数&#xff08;类型不定&#xff09;&#xff0c;返回和 fmt.Fprintf 类似的格式化后的字符串。实现方法大致为&#xff1a;如果参数类型本身实现了 String() 方法&#xff0c;那调用 String() 方法即可…...

识别恶意IP地址的有效方法

在互联网的环境中&#xff0c;恶意IP地址可能会对网络安全造成严重威胁&#xff0c;例如发起网络攻击、传播恶意软件等。因此&#xff0c;识别恶意IP地址是保护网络安全的重要一环。IP数据云将探讨一些有效的方法来识别恶意IP地址。 IP地址查询&#xff1a;https://www.ipdata…...

探索信号处理:低通滤波器的原理与应用

在信号处理领域&#xff0c;滤波器的应用至关重要&#xff0c;它能够帮助我们从复杂的信号中提取需要的信息&#xff0c;而低通滤波器则是其中一种被广泛应用的滤波器类型。本文旨在深入探讨低通滤波器的基本原理、主要类型以及在实际应用中的作用和实现方式。 ### 1. 低通滤波…...

计算机网络:应用层知识点汇总

文章目录 一、网络应用模型二、域名系统&#xff08;DNS&#xff09;三、文本传输协议&#xff08;FTP&#xff09;四、电子邮件五、万维网和HTTP协议 一、网络应用模型 p2p也就是对等模型 二、域名系统&#xff08;DNS&#xff09; 我们知道&#xff0c;随着人们建立一个网站…...

金三银四!一个年薪160W+的就业方向!

前言 随着越来越多的科技大厂加入鸿蒙生态建设&#xff0c;鸿蒙开发人才正在市场上被争抢。资深工程师开出的年薪高达近百万&#xff0c;架构师更是高至160万&#xff0c;真可谓“鸿蒙猿年薪超百万”。如何抓住新技术红利&#xff0c;尽早上车&#xff1f;你会成为下一个鸿蒙开…...

实现的一个网页版的简易表白墙

实现的一个网页版的表白墙 实现效果 代码截图 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…...

随身WiFi靠谱吗? 看完这篇文章你就懂了?2024随身wifi靠谱品牌推荐

在网络如此发达&#xff0c;随身WiFi如此普遍的2024年&#xff0c;仍有人在质疑随身WiFi到底靠不靠谱&#xff0c;有没有用处。其实只需要回答两个问题&#xff1a; 1、你的流量够用吗&#xff1f;手机的流量包和随身WiFi套餐哪个更便宜&#xff1f; 2、手机流量不够用&#x…...

mysql的trace追踪SQL工具,进行sql优化

trace是MySQL5.6版本后提供的SQL跟踪工具&#xff0c;通过使用trace可以让我们明白optimizer&#xff08;优化器&#xff09;如何选择执行计划。 注意&#xff1a;开启trace工具会影响mysql性能&#xff0c;所以只适合临时分析sql使用&#xff0c;用完之后请立即关闭。 测试数…...

docker部署springboot jar包项目

docker部署springboot jar包项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1…...

一个八年工作经验老程序员的分享

作为一个 Java 程序员&#xff0c;我在这个行业中工作了多年。在这个过程中&#xff0c;我经历了许多挑战和机遇&#xff0c;也学到了很多宝贵的经验和教训。在这篇文章中&#xff0c;我想分享一些我的感想和思考&#xff0c;希望能够对其他 Java 程序员有所帮助。 一、技术的…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

C++参数传递 a与a的区别

在 C 中&#xff0c;&a&#xff08;引用&#xff09;和 a&#xff08;值传递&#xff09; 的关键区别在于 参数如何传递给函数&#xff0c;以及由此引发的 性能、语义和安全问题。 最核心的在于你想不想传入的参数被改变&#xff0c;如果想&#xff0c;就用参数传递&#…...