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

Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述

本教程旨在助力您搭建一个基于 Keepalived 和 LVS(Linux Virtual Server)的高可用负载均衡环境,同时使其完美适配 Websocket 长连接场景,确保您的 Web 应用能够高效、稳定地运行,从容应对高并发访问,并且在服务器遭遇故障时实现自动无缝切换,为服务的连续性保驾护航。

二、环境准备

  1. 服务器规划
    • 准备至少 3 台服务器,推荐选用 CentOS 7 或以上版本的 Linux 操作系统,且在安装系统时确保已勾选基础网络工具与开发包。本教程中服务器角色及对应示例 IP 地址分配如下:
      • LVS 负载均衡器(MASTER):192.168.1.100
      • LVS 负载均衡器(BACKUP):192.168.1.101
      • Real Server 1:192.168.1.102
      • Real Server 2:192.168.1.103
      • VIP:192.168.1.200
    • 所有服务器需处于同一局域网内,务必保证相互之间能够通过 ping 命令顺畅连通,并且具备访问互联网的能力,用于后续软件安装及更新操作。
  2. 网络配置检查与调整
    • 在每台服务器上,执行 ifconfig 或 ip addr show 命令查看网卡配置信息,确保网卡正常工作且 IP 地址配置准确无误。例如,在 LVS MASTER 服务器上运行 ip addr show eth0(假设网卡名为 eth0),应得到类似如下输出:
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0valid from Sat, 01 Jan 2022 00:00:00 UTC valid until Sun, 01 Jan 2023 00:00:00 UTC
    • 若发现网络配置有误,使用 vi /etc/sysconfig/network-scripts/ifcfg-eth0(以 eth0 为例)编辑网卡配置文件,按需修改 IP 地址、子网掩码、网关等参数,修改完成后执行 systemctl restart network 重启网络服务,使新配置生效。 

三、安装软件

  1. 在 LVS 负载均衡器(MASTER 和 BACKUP)以及 Real Server 上,打开终端,通过 yum 命令安装所需软件:
    • yum install -y ipvsadm keepalived
    • ipvsadm:这是配置 LVS 规则的核心工具,利用它能够灵活地定义虚拟服务器、关联 Real Server 并指定负载均衡算法,是构建 LVS 功能体系的关键组件。
    • keepalived:一方面,它基于 VRRP(Virtual Router Redundancy Protocol)协议提供高可用保障,能将多台物理路由器虚拟化为一个 “虚拟路由器”,使得在主路由器出现故障时,备份路由器可迅速自动接管服务,有效规避单点故障风险;另一方面,它能够与 LVS 紧密协作,实现对 Real Server 的健康监测以及根据服务器状态动态调整负载均衡策略。

四、配置 Keepalived + Lvs(MASTER)节点

  1. 打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf,该文件是 Keepalived 的核心配置枢纽,所有与高可用、负载均衡及相关辅助功能的设定均在此文件内完成。
  2. 进行如下配置:
    global_defs {notification_email {your_email@example.com  # 务必替换为您真实有效的报警邮箱地址,其用途在于接收 Keepalived 运行过程中的异常报警信息,诸如主备切换失败、健康检查持续报错等突发状况。一旦出现问题,Keepalived 会自动向此邮箱发送详细通知邮件,以便系统管理员能够及时察觉并着手处理。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS1  # 路由器标识,在当前搭建的这个高可用环境所构成的 VRRP 域内,MASTER 和 BACKUP 的 router_id 必须不同,此处设定为 LVS1,它用于在 VRRP 协议数据包中标识不同的路由器实例,从而确保节点间能够准确无误地相互识别。
    }vrrp_instance VI_1 {state MASTER  # 明确此节点在 VRRP 实例中扮演“主”的角色,意味着在通常运行状态下,它将掌控对外提供服务的虚拟 IP(VIP),并肩负起主要的负载均衡重任。interface eth0  # 根据服务器实际使用的网卡名称进行修改,该参数指定 Keepalived 用于收发 VRRP 数据包的网卡接口,务必确保与所在服务器的实际网卡保持一致,否则整个系统将无法正常运转。virtual_router_id 51  # 虚拟路由 ID,在同一个 VRRP 域内,MASTER 和 BACKUP 的此项 ID 必须严格一致,它用于唯一标识一组虚拟路由器,取值范围通常为0 - 255,不同的 ID 代表不同的虚拟路由群组。priority 100  # 优先级数值,在主备节点选举过程中起着决定性作用,MASTER 的优先级必须高于 BACKUP,数值越大优先级越高,本示例中设为 100,如此一来,当主节点遭遇故障时,备份节点将依据优先级高低判断是否接管服务。advert_interval 1authentication {type PASSpassword 1111  # 密码,MASTER 和 BACKUP 需确保一致,其主要功能是用于 VRRP 节点间的认证,确保只有授权的节点才能参与虚拟路由器的运作,防止非法节点接入。}virtual_ipaddress {192.168.1.200/24  # 虚拟 IP(VIP),依据实际网络网段进行合理设置,这是面向外部客户端提供服务的统一 IP 地址,客户端将通过访问此 IP 来获取相应服务。在主节点正常运行期间,此 VIP 会绑定在主节点的网卡之上,一旦主节点发生故障,VIP 将自动无缝切换至备份节点的网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上述设置紧密对应,在此处定义了一个虚拟服务器,明确了对外服务的 IP 地址与端口号,后续的 Real Server 将挂载在此虚拟服务器之下,依照负载均衡策略接收并处理分发而来的请求。lb_algo wrr  # 加权轮询调度算法,您可根据实际需求进行灵活切换,如选用 rr(轮询)、sh(源地址散列)等其他算法。wrr 算法的优势在于能够依据 Real Server 的权重值来合理分配请求,不同权重的 Real Server 获取请求的机会不尽相同,权重越大则机会越多,相较于简单的轮询算法,它能更为精准地适配不同性能的 Real Server,进而实现更为优化、合理的负载分配效果。lb_kind DR  # 工作模式,DR(Direct Routing)模式在性能表现上较为出色,当然您也可根据实际情况选择 NAT 等其他模式。在 DR 模式下,客户端请求的数据包将直接发送至 Real Server,而响应数据包同样会直接返回客户端,LVS 负载均衡器在此过程中仅负责高效处理请求的分发与调度工作,极大地减轻了自身负担,显著提升了整体系统性能。不过,采用 DR 模式需要对 Real Server 进行一系列特殊配置(如设置 VIP 等操作),后续步骤会详细阐述。persistence_timeout 3600  # 持久连接超时时间,单位为秒,考虑到 Websocket 长连接的特性,特意将此值设置得较长,您也可根据实际业务场景进行适当调整。该参数决定了源自同一源 IP 的请求在多长时间内会被持续转发至同一个 Real Server,对于 Websocket 长连接而言,充足的超时时间能够确保在连接存续期间,客户端后续发出的所有请求都能被精准导向最初建立连接的 Real Server,有效避免因负载均衡调度而意外导致连接中断的情况发生。persistence_granularity SOURCE_IP  # 以源 IP 实现持久连接,这一设置能够切实确保同一客户端的请求始终被定向到同一 Real Server。其原理是基于客户端的源 IP 进行哈希运算,只要源 IP 保持不变,后续所有请求都将被稳定送达最初建立连接的那台 Real Server,这对于维护 Websocket 长连接的稳定性起着举足轻重的作用。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:vi /etc/sysctl.conf
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时主节点会依据新配置尝试绑定虚拟 IP(VIP),并基于设定好的调度算法、健康检查机制等对 Real Server 进行负载均衡调度。

五、配置 Keepalived + Lvs(BACKUP)节点

  1. 同样打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf
  2. 修改如下内容:
    global_defs {notification_email {your_email@example.com  # 替换为真实的报警邮箱地址,作用与 MASTER 节点配置相同。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS2  # 更改为与 MASTER 不同的标识,此处设为 LVS2,用于清晰区分主备节点。
    }vrrp_instance VI_1 {state BACKUP  # 表明此节点在 VRRP 实例中的角色为“备份”,正常运行时不承担对外服务职责,处于待命状态,一旦主节点出现故障,将立即接管服务。interface eth0  # 根据实际网卡名修改,需与 MASTER 节点对应网卡保持一致。virtual_router_id 51  # 与 MASTER 一致,同属一个虚拟路由组。priority 99  # 低于 MASTER 的优先级,本示例中设为 99,当主节点发生故障且此备份节点在剩余备份节点中优先级最高时,将顺利接管主节点工作,成为新的主节点。advert_interval 1authentication {type PASSpassword 1111  # 与 MASTER 一致,用于节点间认证。}virtual_ipaddress {192.168.1.200/24  # 与 MASTER 一致的 VIP,当主节点故障时,此 VIP 将自动切换到该备份节点网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上面设置对应,配置与 MASTER 节点类似,确保备份节点也能准确无误地对 Real Server 进行负载均衡调度。lb_algo wrr  # 加权轮询调度算法,可按需更换,如 rr(轮询)、sh(源地址散列)等。lb_kind DR  # 工作模式,DR 模式性能较好,也可按需选 NAT 等。persistence_timeout 3600  # 持久连接超时时间,单位秒,为适应 Websocket 长连接设长些,可调整。persistence_granularity SOURCE_IP  # 以源 IP 实现持久,确保同一客户端请求到同一 Real Server。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
    • 执行命令使配置生效:sysctl -p
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时备份节点会依据新配置进入监听状态,时刻准备在主节点出现故障时接管服务,保障整个高可用负载均衡系统的正常运作。

六、配置 Real Server

  1. 在 Real Server(以 192.168.1.102 和 192.168.1.103 为例)上:
    • 编辑 /etc/sysctl.conf 文件:
# 防止 ARP 冲突,调整 ARP 相关内核参数
net.ipv4.arp_ignore = 1
net.ipv4.arp_announce = 2
  • net.ipv4.arp_ignore = 1:当设置为 1 时,若接收到 ARP 请求,且目标 IP 为本地配置的 VIP,此时仅当请求的源 IP 与本机某一网卡的 IP 处于同一网段时,才会响应 ARP 请求,这样能够有效规避不必要的 ARP 响应,最大程度防止 ARP 冲突的发生。
  • net.ipv4.arp_announce = 2:设置为 2 时,当本机向外发送 ARP 宣告时,将始终使用本机的真实 IP 地址,而非 VIP,以此确保 ARP 信息的准确性与一致性,避免网络中的其他设备出现混淆情况。
  • 执行命令使配置生效:sysctl -p
  • 编写设置 VIP 的脚本,如 vi /etc/init.d/lvsrs,内容如下:
#!/bin/bash
VIP=192.168.1.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 256.256.256.255 up
/sbin/route add -host $VIP dev lo:0
  • 该脚本的目的在于在 Real Server 的本地环回接口(0) 上设置 VIP。在 LVS 的 DR 模式下,Real Server 需要能够精准识别并妥善处理发往 VIP 的请求,将 VIP 绑定至本地环回接口,既便于统一管理,又能有效避免与真实网卡 IP 发生冲突。首先明确定义 VIP 的值,随后通过 ifconfig 命令将 VIP 绑定到 lo:0 接口,并设置相应的广播地址和子网掩码,最后利用 route 命令添加一条指向 VIP 的的路由,确保发往 VIP 的数据包能够在本地得到有效处理。
  • 赋予脚本执行权限:chmod +x /etc/init.d/lvsrs
  • 启动脚本:/etc/init.d/lvsrs start

七、测试

在客户端上

  • 使用 ping 命令测试能否连通虚拟 IP(VIP),例如在一台与搭建环境处于同一局域网且能正常访问网络的客户端机器上执行:
ping 192.168.1.200
  • 如果能收到来自 VIP 的正常响应(不断显示类似 Reply from 192.168.1.200: bytes=32 time<1ms TTL=64 的信息),则说明客户端到 VIP 的网络链路是通畅的,初步表明负载均衡前端配置没有问题。

在 LVS 负载均衡器(MASTER 和 BACKUP)上

  • 使用 ping 命令分别测试能否连通各个 Real Server 的 IP 地址,例如在 MASTER 节点上执行:
ping 192.168.1.102
ping 192.168.1.103
  • 若都能正常收到回应,表明负载均衡器与后端 Real Server 之间的网络连接正常,不存在物理层面的网络故障,这是后续负载均衡功能能正常发挥的基础条件。

验证虚拟 IP(VIP)绑定情况

  1. 在 LVS 负载均衡器(MASTER)上
    • 执行 ip addr show 命令查看网卡信息,检查 VIP 是否正确绑定在 MASTER 节点的网卡上,正常情况下应该能看到类似如下输出(假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 其中 inet 192.168.1.200/24 这一行就表示 VIP 已成功绑定在该网卡上,这意味着 MASTER 节点已经做好准备利用此 VIP 接收客户端请求并进行负载均衡处理。

  1. 手动停止 MASTER 节点的 Keepalived 服务(仅用于测试 VIP 切换)
    • 在 MASTER 节点上执行 systemctl stop keepalived 命令。
    • 接着迅速在 LVS 负载均衡器(BACKUP)上再次执行 ip addr show 命令查看网卡信息,此时应该能看到 VIP 已经切换绑定到 BACKUP 节点的网卡上,类似如下输出(同样假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 这就验证了 Keepalived 的高可用切换机制生效,VIP 能够在主节点故障时自动迁移到备份节点,保障服务持续可用。完成测试后,可以在 MASTER 节点上再次执行 systemctl start keepalived 恢复正常状态。

相关文章:

Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述 本教程旨在助力您搭建一个基于 Keepalived 和 LVS&#xff08;Linux Virtual Server&#xff09;的高可用负载均衡环境&#xff0c;同时使其完美适配 Websocket 长连接场景&#xff0c;确保您的 Web 应用能够高效、稳定地运行&#xff0c;从容应对高并发访问&…...

产品经理2025年展望

产品经理作为连接技术、设计与市场需求的桥梁&#xff0c;在快速变化的商业环境中扮演着至关重要的角色。展望2025年&#xff0c;随着技术的不断进步和消费者需求的日益多样化&#xff0c;产品经理的工作将面临更多挑战与机遇。 一、人工智能与自动化深化应用&#xff1a; 到…...

【信息系统项目管理师】第14章:项目沟通管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划沟通管理1、输入2、工具与技术3、输出二、管理沟通1、输入2、工具与技术3、输出三、监督沟通1、输入2、工具与技术3、输出一、规划沟通管理 定义:规划沟通管理是基于每个干系人或干系人群体的信息需求…...

串口DMA接收数据基本思路

串口DMA接收基本思路 串口DMA接收数据基本思路一、串口处理使用背景及常用处理方法二、串口DMA接收相关思路三、串口DMA发送相关思路 串口DMA接收数据基本思路 一、串口处理使用背景及常用处理方法 单片机经常有串口处理大量数据的场景&#xff0c;常用的串口处理数据方式有如…...

数据结构复习 (二叉查找树,高度平衡树AVL)

1.二叉查找树: 为了更好的实现动态的查找(可以插入/删除),并且不超过logn的时间下达成目的 定义: 二叉查找树&#xff08;亦称二叉搜索树、二叉排序树&#xff09;是一棵二叉树&#xff0c;其各结点关键词互异&#xff0c;且中根序列按其关键词递增排列。 等价描述: 二叉查找…...

FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境)

FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX&#xff08;WSL环境&#xff09; 0、界面预览1、部署WSL1.1 安装WSL1.2 安装Windows Terminal1.3 安装WSL配置工具 2、安装Ubuntu24.043、安装FreeSWITCH4、登录Web4.1 80端口占用了 5、测试6、卸载 0、界面预览…...

uniapp - 小程序实现摄像头拍照 + 水印绘制 + 反转摄像头 + 拍之前显示时间+地点 + 图片上传到阿里云服务器

前言 uniapp&#xff0c;碰到新需求&#xff0c;反转摄像头&#xff0c;需要在打卡的时候对上传图片加上水印&#xff0c;拍照前就显示当前时间日期地点&#xff0c;拍摄后在呈现刚才拍摄的图加上水印&#xff0c;最好还需要将图片上传到阿里云。 声明 水印部分代码是借鉴的…...

Qt天气预报系统设计界面布局第四部分左边

Qt天气预报系统设计 1、第四部分左边的第一部分1.1添加控件1.2修改控件名字 2、第四部分左边的第二部分2.1添加控件2.2修改控件名字 3、第四部分左边的第三部分3.1添加控件3.2修改控件名字 4、对整个widget04l调整 1、第四部分左边的第一部分 1.1添加控件 拖入一个widget&…...

VS无法找到低版本的.net,vs2022创建不了.net6的项目

很多人会遇到安装完vs最新版(目前是2022)之后&#xff0c;创建不了旧版本的.net项目了&#xff0c;比如我在学习.net core 6&#xff0c;我的2022无法创建&#xff0c;只能创建.netcore8的项目&#xff0c;以及又安装了2019&#xff0c;同样无法创建&#xff0c;接下来介绍怎么…...

C++软件设计模式之解释器模式

解释器模式的目的和意图 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;主要用于定义一种语言的文法&#xff0c;并通过该文法解释语言中的句子&#xff08;表达式&#xff09;。解释器模式的核心思想是将一个特定的语言表示为其文法规…...

小程序发版后,用户使用时,强制更新为最新版本

为什么要强制更新为最新版本&#xff1f; 在小程序的开发和运营过程中&#xff0c;强制用户更新到最新版本是一项重要的策略&#xff0c;能够有效提升用户体验并保障系统的稳定性与安全性。以下是一些主要原因&#xff1a; 1. 功能兼容 新功能或服务通常需要最新版本的支持&…...

如何使用AI工具cursor(内置ChatGPT 4o+claude-3.5)

⚠️温馨提示&#xff1a; 禁止商业用途&#xff0c;请支持正版&#xff0c;充值使用&#xff0c;尊重知识产权&#xff01; 免责声明&#xff1a; 1、本教程仅用于学习和研究使用&#xff0c;不得用于商业或非法行为。 2、请遵守Cursor的服务条款以及相关法律法规。 3、本…...

说说缓存使用的具体场景都有哪些?缓存和数据库一致性问题该如何解决?缓存使用常见问题有哪些?

面试官&#xff1a;说说缓存使用的具体场景都有哪些&#xff1f;缓存和数据库一致性问题该如何解决&#xff1f;缓存使用常见问题有哪些&#xff1f; 缓存的具体使用场景有这些&#xff1a; 数据频繁读取&#xff1a; 当某些数据频繁被读取而不常变化时&#xff0c;可以将这些…...

2025-01-01 NO2. XRHands 介绍

文章目录 软件配置1 XR Hands 简介2 XRHand2.1 Pose2.2 Handedness 3 XRHandJoint3.1 XRHandJointID3.2 XRHandJointTrackingState 4 XRHandSubsystem4.1 数据属性4.1.1 UpdateSuccessFlags4.1.2 UpdateType 4.2 处理器管理&#xff1a;注册和注销4.3 更新手部数据&#xff1a;…...

Java开发-后端请求成功,前端显示失败

文章目录 报错解决方案1. 后端未配置跨域支持2. 后端响应的 Content-Type 或 CORS 配置问题3. 前端 request 配置问题4. 浏览器缓存或代理问题5. 后端端口未被正确映射 报错 如下图&#xff0c;后端显示请求成功&#xff0c;前端显示失败 解决方案 1. 后端未配置跨域支持 …...

未来20年在大语言模型相关研究方向--大语言模型的优化与改进

未来20年在大语言模型相关研究方向 模型性能优化 模型架构创新:研究新型的模型架构,如探索更高效的Transformer变体、融合递归神经网络(RNN)和卷积神经网络(CNN)的优点,以提高模型的性能、可扩展性和适应性,满足不同应用场景对模型效率和效果的要求。高效训练算法:开…...

[react] 纯组件优化子

有组件如下,上面变化秒数, 下面是大量计算的子组件,上面每一秒钟变化一次,这时候子组件会不断重新渲染, 浪费资源 父组件如下 import React, { memo, useEffect, useMemo, useState } from react; import type { ReactNode, FC } from react; import HugeCount from ./Te; int…...

美观强大的文件保险库Chibisafe

简介 什么是 Chibisafe &#xff1f; Chibisafe 是一款用 Typescript 编写的快速文件上传服务&#xff0c;非常实用。它接受文件、照片、文档以及您能想到的任何内容&#xff0c;并返回可共享的链接&#xff0c;供您发送给其他人。它易于使用、易于部署、免费且开源&#xff0…...

详细教程:SQL2008数据库备份与还原全流程!

数据的安全性至关重要&#xff0c;无论是操作系统、重要文件、磁盘存储&#xff0c;还是企业数据库&#xff0c;备份都是保障其安全和完整性的关键手段。拥有备份意味着即使发生误删、系统崩溃或病毒攻击等问题&#xff0c;也能迅速通过恢复功能解决&#xff0c;避免数据丢失带…...

HTML——49.header和footer标签

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>header和footer标签</title></head><body><!--header和footer标签:是html5中新标签--><!--header:定义文档的页眉&#xff0c;通常用来定义可见…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...