09--keepalived高可用集群

前言:高可用集群配置是大型网站的一个基础,网站可用性的基础保障之一,这里将对应的概念知识和实操步骤进行整理与收集。

1、基础概念详解

1.1、高可用集群

高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小。

1.2、高可用集群的衡量标准

1.3、自动切换/故障转移(FailOver)

自动切换阶段某一主机如果确认对方故障,则正常主机除继续进行原来的任务,还将依据各种容错备援模式接管预先设定的备援作业程序,并进行后续的程序及服务。 通俗地说,即当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换。 通过上面判断节点故障后,将高可用集群资源(如VIP、httpd等)从该不具备法定票数的集群节点转移到故障转移域(Failover Domain,可以接收故障资源转移的节点)。

1.4、自动侦测

自动侦测阶段由主机上的软件通过冗余侦测线,经由复杂的监听程序,逻辑判断,来相互侦测对方运行的情况。 常用的方法是:集群各节点间通过心跳信息判断节点是否出现故障。

1.5、脑裂

在高可用(HA)系统中,当联系两个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为两个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像两个灵魂夺舍一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

产生原因:

因心跳线坏了(包括断了,老化)。 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。 因心跳线间连接的设备故障(网卡及交换机)。 因仲裁的机器出问题(采用仲裁的方案)。 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败。 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。

解决方案:

1)添加冗余的心跳线:例如:双心跳线(心跳线也HA),尽量减少“脑裂”发生几率;

2)启用磁盘锁:正在服务一方锁住共享磁盘,“脑裂”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务(会导致昂贵的高可用架构不能发挥作用)。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。

3)设置仲裁机制:例如设置参考IP(如网关IP或某一个服务器),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

4)脑裂的监控报警:直接对高可用服务的业务进行业务监控,出现问题人为介入

1.6、其他的高可用架构

heartbeat、pacemaker、 piranha(web页面)操作部署都非常相似

1.7、keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播(以224.0.0.0地址作为通信地址的一种方式),当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master(可以理解为三体里面的摇篮系统,反向触发

keepalived主要有三个模块:分别是core、check和vrrp。 core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。 check负责健康检查,包括常见的各种检查方式。 vrrp模块是来实现VRRP协议的。

2、web高可用示例

2.1、基础环境

IP用途
192.168.189.148server1
192.168.189.149server2
192.168.189.150vip(虚拟ip)

2.2、server1部署

server1初始网络环境(网卡名和IP记一下)

 keepalive配置

[root@localhost ~]# yum install -y keepalived
[root@localhost ~]# vim /etc/keepalived/keepalived.conf 

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
 router_id 1                            #设备高可用组内的id,组内唯一
 }

#vrrp_script chk_nginx {                #健康检查
# script "/etc/keepalived/ck_ng.sh"     #检查脚本
# interval 2                            #检查频率.秒
# weight -5                             #权重减5,就是下面的优先级减5
# fall 3                                #失败三次
# }

vrrp_instance VI_1 {               	#VI_1实例名。两台路由器相同。和下面的55作用相同
    state MASTER                        #主或者从状态
    interface ens33                     #监控网卡
    mcast_src_ip 192.168.189.148        #心跳源Ip
    virtual_router_id 55                #虚拟路由编号,主备要一致
    priority 100                        #优先级
    advert_int 1                        #心跳间隔

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP
    192.168.189.150/24
        }

#  track_script {                       #引用脚本
#       chk_nginx
#    }

}


[root@localhost ~]# systemctl start keepalived.service
[root@localhost ~]# systemctl enable keepalived.service
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

 web环境搭建

[root@localhost ~]# yum install -y nginx
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@localhost ~]# echo ">>>>>>>>>>>>>>>>>>web1<<<<<<<<<<<<<<<" > /usr/share/nginx/html/index.html 
[root@localhost ~]# curl 127.0.0.1
>>>>>>>>>>>>>>>>>>web1<<<<<<<<<<<<<<<
[root@localhost ~]# systemctl start keepalived

2.3、server2部署

其他部分与1相同,不同部分如下

 代码如下

[root@localhost ~]# vim /etc/keepalived/keepalived.conf 
[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
 router_id 2                            #设备高可用组内的id,组内唯一
 }

#vrrp_script chk_nginx {                #健康检查
# script "/etc/keepalived/ck_ng.sh"     #检查脚本
# interval 2                            #检查频率.秒
# weight -5                             #权重减5,就是下面的优先级减5
# fall 3                                #失败三次
# }

vrrp_instance VI_1 {               	#VI_1实例名。两台路由器相同。和下面的55作用相同
    state BACKUP                        #主或者从状态
    interface ens33                     #监控网卡
    mcast_src_ip 192.168.189.149        #心跳源Ip
    virtual_router_id 55                #虚拟路由编号,主备要一致
    priority 99                        #优先级
    advert_int 1                        #心跳间隔

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP
    192.168.189.150/24
        }

#  track_script {                       #引用脚本
#       chk_nginx
#    }

}

[root@localhost ~]# echo "+++++++++++++++web2+++++++++++++" > /usr/share/nginx/html/index.html 
[root@localhost ~]# curl 127.0.0.1
+++++++++++++++web2+++++++++++++


2.4、模拟测试

server1正常

 server1网络中断

刷新页面

高可用完成

2.5、进阶(服务监测)

恢复之前的实验。启动两台主机的keepalived和nginx。确保页面访问正常。 关闭master的nginx服务 。systemctl stop nginx 继续访问VIP,高可用集群并未生效,keepalived监控的是接口IP状态,无法监控nginx服务状态,这里需要将服务与高可用结合起来部署,我们需要保证的是服务的高可用状态。

操作如下

2.5.1、server1操作

[root@localhost ~]# vi /etc/keepalived/ck_ng.sh
[root@localhost ~]# cat /etc/keepalived/ck_ng.sh
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi
[root@localhost ~]# chmod +x /etc/keepalived/ck_ng.sh

开启状态检查脚本的调用

 重启keepalived

2.5.2、server2操作

此处与server1完全相同

2.5.3、模拟测试

正常访问

正常关闭nginx,此时keepalived会调用脚本,脚本检测到nginx关闭后重新开启nginx

网页访问未切换服务器

模拟nginx损坏无法重启(server1操作)

[root@localhost ~]# rm -rf /etc/nginx/*
[root@localhost ~]# systemctl stop nginx

刷新网页,已切换到server2提供服务

3、LVS高可用示例

web服务器在工作环境中有很多,这个架构是对lvs进行高可用保障

3.1、基础环境

IP模拟角色
192.168.189.145虚拟ip
192.168.189.148负载均衡(master)
192.168.189.149负载均衡(backup)
192.168.189.150web1
192.168.189.151web2

3.2、负载均衡(master)安装部署

[root@localhost ~]# yum install -y keepalived ipvsadm
    #    keepalived内自带lvs配置,所以后续只需配置keepalived

[root@localhost ~]# vim /etc/keepalived/keepalived.conf 
[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {						
	router_id Director1    			#设备高可用组内的id,组内唯一
	}
	
vrrp_instance VI_1 {				
	state MASTER				#另外一台机器是BACKUP	
	interface ens33				#心跳网卡	
	virtual_router_id 51			#虚拟路由编号,主备要一致
	priority 150				#优先级	
	advert_int 1				#检查间隔,单位秒	
	authentication {
		auth_type PASS
		auth_pass 12345
		}
	virtual_ipaddress {
		192.168.189.145/24       dev      ens33   	#VIP和工作网卡
		}
	}
	
virtual_server 192.168.189.145 80 {		#LVS 配置,VIP
	delay_loop 3				#lvs服务论询的时间间隔,#每隔3秒检查一次rs状态
	lb_algo rr				#LVS 调度算法
	lb_kind DR	 			#LVS 集群模式 直接路由
	protocol TCP				#rs的协议对应上方的端口号
	real_server 192.168.189.150 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3       #健康检查方式,连接超时时间,单位秒
			}
		}
	real_server 192.168.189.151 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3
			}
		}
}



[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# reboot

3.3、负载均衡(backup)安装部署

[root@localhost ~]# yum install -y keepalived ipvsadm

[root@localhost ~]# scp root@192.168.189.148:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf 
The authenticity of host '192.168.189.148 (192.168.189.148)' can't be established.
ECDSA key fingerprint is SHA256:gxTKMF8msXccCg6zmpT9TjLZflsDFX3+2fYAVD/xzSs.
ECDSA key fingerprint is MD5:1a:0b:3a:44:36:31:f6:64:d0:2b:5a:74:58:86:86:78.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.189.148' (ECDSA) to the list of known hosts.
root@192.168.189.148's password: 
keepalived.conf                                                      100% 1034     1.6MB/s   00:00    
    #    修改一些配置
[root@localhost ~]# vim /etc/keepalived/keepalived.conf 
[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {						
	router_id Director2    			#设备高可用组内的id,组内唯一
	}
	
vrrp_instance VI_1 {				
	state BACKUP				#另外一台机器是BACKUP	
	interface ens33				#心跳网卡	
	virtual_router_id 51			#虚拟路由编号,主备要一致
	priority 140				#优先级	
	advert_int 1				#检查间隔,单位秒	
	authentication {
		auth_type PASS
		auth_pass 12345
		}
	virtual_ipaddress {
		192.168.189.145/24       dev      ens33   	#VIP和工作网卡
		}
	}
	
virtual_server 192.168.189.145 80 {		#LVS 配置,VIP
	delay_loop 3				#lvs服务论询的时间间隔,#每隔3秒检查一次rs状态
	lb_algo rr				#LVS 调度算法
	lb_kind DR	 			#LVS 集群模式 直接路由
	protocol TCP				#rs的协议对应上方的端口号
	real_server 192.168.189.150 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3       #健康检查方式,连接超时时间,单位秒
			}
		}
	real_server 192.168.189.151 80 {
		weight 1
		TCP_CHECK {
			connect_timeout 3
			}
		}
}



[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# reboot

3.4、检查配置

3.5、web服务器配置

web1与web2配置相同如下所示,此处大部分属于负载均衡与本章无关,详细解释可以参考上一篇文章

[root@localhost ~]# yum install -y httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# echo ">>>>>>>>>>>>>>web1<<<<<<<<<<<<<" >  /var/www/html/index.html

    #    配置虚拟地址
[root@localhost ~]# cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.189.145
NETMASK=255.255.255.255
ONBOOT=yes

    #    配置路由
[root@localhost ~]# vim /etc/rc.local 
[root@localhost ~]# cat /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/sbin/route add -host 192.168.189.145 dev lo:0


    #    arp忽略配置,此处详解可查看上一篇文章
[root@localhost ~]# vim /etc/rc.local 
[root@localhost ~]# cat /etc/rc.local 
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
/sbin/route add -host 192.168.189.145 dev lo:0
[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).


net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2


[root@localhost ~]# reboot

 3.6、检查webserver配置

3.6、模拟测试

负载均衡正常(建议使用隐私模式测试)

 

关闭lvs上的keepalived访问网站仍然正常,观察负载均衡(backup)的IP与上文的不同

[root@localhost ~]# systemctl stop keepalived.service

 

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

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

相关文章

内容安全复习 5 - 深在线社交网络分析与舆情监测

文章目录 在线社交网络分析什么是在线社交网络什么是在线社交网络分析社交网络信息传播基本模型影响力模型传染模型影响力计算公式 网络舆情监测网络舆情概述网络舆情监测系统 在线社交网络分析 什么是在线社交网络 在线社交网络是一种在信息网络上由社会个体集合及个体之间的…

揭示数据库内核的奥秘--手写数据库toadb开源项目

揭示数据库内核的奥秘–手写数据库toadb 数据为王的时代 在信息化时代&#xff0c;数据已成为企业和应用不可或缺的核心&#xff0c;而数据库不仅是数据的仓库&#xff0c;更是支撑业务决策、系统运行的基石。对于求职者而言&#xff0c;掌握数据库知识已成为求职市场上的必考…

守护清远采矿安全:可燃气体报警器检定工作的必要性与实施

清远市地处广东省北部&#xff0c;矿产资源丰富&#xff0c;包括金属矿产、非金属矿产等多种类型。采矿行业作为清远的重要产业之一&#xff0c;对当地经济发展起到了积极的推动作用。 然而&#xff0c;随着采矿业的快速发展&#xff0c;安全问题也逐渐凸显出来&#xff0c;尤…

鱼缸补水器工作原理是什么

鱼缸补水器是一种应用广泛的智能设备&#xff0c;主要用于自动监测和补充鱼缸内的水位&#xff0c;以确保鱼类生存环境的稳定。其工作原理简单而高效&#xff0c;为饲主提供了方便和安全的使用体验。 该补水器通常由两部分组成&#xff1a;控制器和吸盘。首先&#xff0c;用户…

《平衡小车控制系统》电子设计大赛校赛感悟

我们学校举行了一次电子设计大赛选拔赛&#xff0c;虽然我们在测试的时候全部都可以完成&#xff0c;最后考核的时候因为方案选择问题以及各种设计逻辑等原因没能成功晋级&#xff0c;但我能从这次备赛中学到很多东西&#xff0c;遂分享一下&#xff0c;与广大网友交流经验。&a…

【PyCUDA安装问题集锦:网站失效】

windows 下 pycuda 安装问题 问题一 安装不上的主要问题&#xff1a;pip默认安装最新版&#xff0c;导致pycuda版本和系统版本不对应。 1.先查看cuda版本 nvidia-smi2.查看需要安装的虚拟环境的python版本&#xff08;如python3.8&#xff09; 3.前往下载python扩展包&…

C语言入门系列:数据类型转换

文章目录 一&#xff0c;自动类型转换1&#xff0c;赋值运算1.1&#xff0c;浮点数赋值给整型变量-不安全1.2&#xff0c;整数赋值给浮点数变量-安全1.3&#xff0c;窄类型赋值给宽类型-安全1.4&#xff0c;宽类型赋值给窄类型-不安全 2&#xff0c;混合类型的运算2.1&#xff…

探秘企业成功的秘密武器:这个知识库搭建攻略你必须知道

在数字化浪潮中,你的企业还在用传统的信息管理方式吗?别落后了!最新的企业知识库搭建攻略来了,它将是你提升企业竞争力、创新能力和员工效率的强力工具。让我们一起探索如何构建自己的知识王国,解锁企业成功的秘诀! 一、为什么你的企业需要立刻行动搭建知识库? 信息孤…

开启数字新纪元:全球首款开源AI女友,你的私人数字伴侣

在这个数字化飞速发展的时代,人工智能已经不再是科幻小说中的幻想,而是实实在在走进了我们的生活。今天,我们要介绍的,不仅仅是一项技术革新,更是一场关于陪伴的革命——全球首款开源AI女友,DUIX,已经横空出世! 🚀 革命性的开源平台 DUIX,由硅基智能精心打造,不…

INVS利用gatearray实现post-mask的function ECO

随着现代IC的设计发展&#xff0c;设计的规模和复杂度逐步增加&#xff0c;对于验证完备性的挑战越来越大&#xff0c;加之TO的时间压力&#xff0c;芯片设计通常会出现下列的场景&#xff1a; 芯片回片一次点亮大部分的case都可以顺利通过小部分的功能需要修正 对于重要的特…

全局唯一ID生成

全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具需满足以下特性&#xff1a; 唯一性、递增性、安全性、高可用、高性能 生成在所有库或表中都满足唯一得ID 实现&#xff1a; 利用Redis的自增功能 INCRBY key increment (INCRBY | Docs)&#xff0c;并在…

网格布局之跨行越列

网格布局之跨行越列 欢迎关注&#xff1a;xssy5431 小拾岁月 参考链接&#xff1a;https://mp.weixin.qq.com/s/xStfSmewncTW49N0Y_Vhow 点击查看 使用场景 在常见的页面布局中&#xff0c;我们往往会遇到那种类似合并单元格的布局。比如&#xff1a;成绩排名、产品排名等等…

经典游戏案例:愤怒的小鸟

学习目标&#xff1a;愤怒的小鸟核心玩法 游戏画面 项目结构目录 部分核心代码 using System.Collections; using System.Collections.Generic; using birds; using utils; using UnityEngine;public class GameManager : MonoBehaviour {public static GameManager sInstanc…

每日待办事项提醒用什么便签app比较好?

在快节奏的现代生活中&#xff0c;我们经常需要记住各种事项&#xff0c;如会议、预约、购物清单等。这时&#xff0c;一个高效的便签App就显得尤为重要&#xff0c;可以帮助我们有效地管理日常任务和待办事项。而每日待办事项提醒用什么便签app比较好&#xff1f;面对市场上众…

vue中的状态管理

第1部分&#xff1a;引言 状态管理是应用中数据流动和变更的核心机制。在Vue应用中&#xff0c;状态管理不仅涉及到组件间的数据共享&#xff0c;还包括了数据的持久化、异步操作的处理等复杂场景。良好的状态管理策略可以提高应用的响应速度&#xff0c;降低组件间的耦合度&a…

交互式知识库问答:一种结合大型语言模型的多轮交互方法

在当今信息爆炸的时代&#xff0c;人们每天都要处理海量的数据和信息。在这样的背景下&#xff0c;基于知识库的问答系统&#xff08;KBQA&#xff09;成为了一个重要的研究领域&#xff0c;它旨在使计算机能够理解自然语言提出的问题&#xff0c;并从结构化的知识库中检索出准…

通信系统网络架构_1.局域网网络架构

当今&#xff0c;通信网络从大的方面主要包括局域网、广域网、移动通信网等网络形式。不同的网络会采用不同的技术进行网络构建。以下针对不同的网络给出各自的网络架构以及所采用的技术。 1.概述 局域网&#xff0c;即计算机局部区域网络&#xff0c;是一种为单一机构所拥有的…

四边形不等式优化

四边形不等式优化 应用于类似以下dp转移方程。 f i min ⁡ 1 ≤ j ≤ i ( w i , j , f i ) f_{i}\min_{1\le j\le i}(w_{i,j},f_{i}) fi​1≤j≤imin​(wi,j​,fi​) 假设 w i , j w_{i,j} wi,j​ 可以在 O ( 1 ) O(1) O(1) 的时间内进行计算。 在正常情况下&#xff0c;…

如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码 在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。 Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类…

本科生大厂算法岗实习经验复盘:从投递到面试的底层思维!

目录 投递渠道boss直聘官网邮箱内推 面试准备leetcode八股深挖项目自我介绍mock面试技巧答不出来怎么办coding反问 复盘技术交流群用通俗易懂方式讲解系列 节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面…