Web 架构之负载均衡全解析
文章目录
- 一、引言
- 二、思维导图
- 三、负载均衡的定义与作用
- 定义
- 作用
- 1. 提高可用性
- 2. 增强性能
- 3. 实现扩展性
- 四、负载均衡类型
- 硬件负载均衡
- 代表设备
- 优缺点
- 软件负载均衡
- 应用层负载均衡
- 代表软件
- 优缺点
- 网络层负载均衡
- 代表软件
- 优缺点
- 五、负载均衡算法
- 轮询算法(Round Robin)
- 加权轮询算法(Weighted Round Robin)
- 最少连接算法(Least Connections)
- 加权最少连接算法(Weighted Least Connections)
- IP 哈希算法(IP Hash)
- 六、常见问题及解决方法
- 会话保持问题
- 问题描述
- 解决方法
- 健康检查问题
- 问题描述
- 解决方法
- 七、实践案例:基于 Nginx 的负载均衡配置
- 安装 Nginx
- 配置负载均衡
- 测试与验证
- 八、总结
一、引言
在当今的互联网世界中,随着用户数量的不断增长和业务流量的急剧增加,单一的服务器往往难以承受巨大的访问压力。为了确保系统的高可用性、高性能和可扩展性,负载均衡技术应运而生。负载均衡就像是一个智能的交通指挥员,将用户的请求均匀地分配到多个服务器上,避免了某一台服务器因过载而崩溃,从而提升整个系统的处理能力。
二、思维导图
Web架构之负载均衡
|-- 定义与作用
| |-- 定义
| |-- 作用
| |-- 提高可用性
| |-- 增强性能
| |-- 实现扩展性
|-- 负载均衡类型
| |-- 硬件负载均衡
| | |-- 代表设备
| | |-- 优缺点
| |-- 软件负载均衡
| |-- 应用层负载均衡
| | |-- 代表软件
| | |-- 优缺点
| |-- 网络层负载均衡
| |-- 代表软件
| |-- 优缺点
|-- 负载均衡算法
| |-- 轮询算法
| |-- 加权轮询算法
| |-- 最少连接算法
| |-- 加权最少连接算法
| |-- IP 哈希算法
|-- 常见问题及解决方法
| |-- 会话保持问题
| | |-- 问题描述
| | |-- 解决方法
| |-- 健康检查问题
| |-- 问题描述
| |-- 解决方法
|-- 实践案例
| |-- 基于 Nginx 的负载均衡配置
| | |-- 安装 Nginx
| | |-- 配置负载均衡
| |-- 测试与验证
三、负载均衡的定义与作用
定义
负载均衡(Load Balancing)是一种将工作负载分布到多个计算资源上的技术,这些计算资源可以是服务器、虚拟机、容器等。通过负载均衡器(Load Balancer),将客户端的请求按照一定的算法和规则分配到后端的多个服务器上,以达到优化资源利用、提高系统性能和可靠性的目的。
作用
1. 提高可用性
当某一台服务器出现故障时,负载均衡器可以自动将请求转发到其他正常运行的服务器上,从而保证系统的不间断服务。例如,在一个电商网站中,如果某一台商品详情页服务器出现故障,负载均衡器会将用户的请求分配到其他可用的服务器上,用户仍然可以正常浏览商品信息。
2. 增强性能
负载均衡器可以将请求均匀地分配到多个服务器上,避免了某一台服务器因过载而导致响应缓慢。同时,多个服务器可以并行处理请求,大大提高了系统的整体处理能力。例如,在一个高并发的在线游戏中,负载均衡器可以将玩家的登录请求分配到多个登录服务器上,减少玩家的等待时间。
3. 实现扩展性
随着业务的发展和用户数量的增加,可以通过添加新的服务器来扩展系统的处理能力。负载均衡器可以自动识别新加入的服务器,并将请求分配到这些服务器上,实现系统的无缝扩展。例如,一个社交媒体平台在举办大型活动时,可以临时增加服务器来应对高流量。
四、负载均衡类型
硬件负载均衡
代表设备
常见的硬件负载均衡设备有 F5 Big-IP、Cisco ACE 等。这些设备通常是专门设计的硬件设备,具有高性能、高可靠性和强大的功能。
优缺点
- 优点:性能高,能够处理大量的并发请求;稳定性好,经过严格的测试和优化,适合对可靠性要求较高的企业级应用;功能丰富,支持多种负载均衡算法和高级特性,如 SSL 卸载、应用层防火墙等。
- 缺点:价格昂贵,购买和维护成本较高;扩展性相对较差,增加新的功能和性能提升需要更换硬件设备;部署和配置复杂,需要专业的技术人员进行操作。
软件负载均衡
应用层负载均衡
代表软件
Nginx、HAProxy 等是常见的应用层负载均衡软件。它们工作在 OSI 模型的第七层(应用层),可以根据应用层协议(如 HTTP、HTTPS)的内容进行请求分发。
优缺点
- 优点:成本低,开源软件可以免费使用,降低了企业的采购成本;灵活性高,可以根据业务需求进行定制化配置;易于部署和维护,不需要额外的硬件设备。
- 缺点:性能相对硬件负载均衡较低,处理大量并发请求时可能会成为瓶颈;对服务器资源有一定的消耗,需要占用一定的 CPU 和内存资源。
网络层负载均衡
代表软件
LVS(Linux Virtual Server)是一种典型的网络层负载均衡软件。它工作在 OSI 模型的第四层(传输层),根据 IP 地址和端口号进行请求分发。
优缺点
- 优点:性能高,基于内核级的转发,处理速度快,能够处理大量的并发请求;对服务器资源消耗小,只负责请求的转发,不处理应用层的内容。
- 缺点:功能相对单一,主要用于 IP 层的负载均衡,缺乏应用层的高级特性;配置和管理相对复杂,需要对网络和 Linux 系统有较深入的了解。
五、负载均衡算法
轮询算法(Round Robin)
轮询算法是最简单的负载均衡算法之一。它按照顺序依次将请求分配到后端的服务器上,当所有服务器都分配过一次后,再从头开始分配。例如,有三台服务器 A、B、C,请求 1 分配到服务器 A,请求 2 分配到服务器 B,请求 3 分配到服务器 C,请求 4 又分配到服务器 A,以此类推。
# 简单的轮询算法示例
servers = ['server1', 'server2', 'server3']
index = 0def round_robin():global indexserver = servers[index]index = (index + 1) % len(servers)return server# 模拟请求
for i in range(5):print(f"Request {i+1} is sent to {round_robin()}")
加权轮询算法(Weighted Round Robin)
加权轮询算法是在轮询算法的基础上,为每台服务器分配一个权重值。权重值越高,服务器被分配到请求的概率就越大。例如,服务器 A 的权重为 2,服务器 B 的权重为 1,服务器 C 的权重为 1,那么在分配请求时,服务器 A 会被分配到更多的请求。
# 简单的加权轮询算法示例
servers = [('server1', 2), ('server2', 1), ('server3', 1)]
current_index = 0
current_weight = 0
gcd = 1 # 最大公约数,这里简化处理
max_weight = max([weight for _, weight in servers])def weighted_round_robin():global current_index, current_weightwhile True:current_index = (current_index + 1) % len(servers)if current_index == 0:current_weight = current_weight - gcdif current_weight <= 0:current_weight = max_weightif current_weight == 0:return Noneserver, weight = servers[current_index]if weight >= current_weight:return server# 模拟请求
for i in range(5):print(f"Request {i+1} is sent to {weighted_round_robin()}")
最少连接算法(Least Connections)
最少连接算法会将请求分配到当前连接数最少的服务器上。这种算法可以保证服务器的负载相对均衡,避免某些服务器因为连接数过多而导致性能下降。例如,服务器 A 有 10 个连接,服务器 B 有 5 个连接,服务器 C 有 8 个连接,那么新的请求会被分配到服务器 B 上。
加权最少连接算法(Weighted Least Connections)
加权最少连接算法是在最少连接算法的基础上,为每台服务器分配一个权重值。在选择服务器时,会综合考虑服务器的连接数和权重值,选择连接数与权重值比值最小的服务器。例如,服务器 A 的权重为 2,连接数为 10;服务器 B 的权重为 1,连接数为 5;服务器 C 的权重为 1,连接数为 8。计算比值:服务器 A 为 10/2 = 5,服务器 B 为 5/1 = 5,服务器 C 为 8/1 = 8,那么新的请求会在服务器 A 和服务器 B 中随机选择。
IP 哈希算法(IP Hash)
IP 哈希算法根据客户端的 IP 地址进行哈希计算,将计算结果映射到后端的服务器上。这样,同一个客户端的请求会始终被分配到同一台服务器上,适合需要保持会话状态的应用。例如,在一个电商网站中,用户登录后,后续的请求会一直分配到同一台服务器上,保证用户的购物车信息和登录状态不会丢失。
# 简单的 IP 哈希算法示例
servers = ['server1', 'server2', 'server3']def ip_hash(ip):hash_value = hash(ip)index = hash_value % len(servers)return servers[index]# 模拟请求
client_ips = ['192.168.1.1', '192.168.1.2', '192.168.1.1']
for ip in client_ips:print(f"Request from {ip} is sent to {ip_hash(ip)}")
六、常见问题及解决方法
会话保持问题
问题描述
在一些应用中,用户的请求需要保持会话状态,例如用户登录后,后续的请求需要在同一台服务器上处理,以保证用户的登录信息和购物车信息不会丢失。但是,负载均衡器默认的分配算法可能会将用户的请求分配到不同的服务器上,导致会话丢失。
解决方法
- IP 哈希算法:如前面所述,通过客户端的 IP 地址进行哈希计算,将同一客户端的请求始终分配到同一台服务器上。
- 会话粘滞(Session Affinity):负载均衡器记录用户的会话信息,当用户发起新的请求时,将请求定向到之前处理该用户会话的服务器上。例如,Nginx 可以通过
ip_hash
或sticky
模块实现会话粘滞。 - 分布式会话管理:使用分布式缓存(如 Redis)来存储用户的会话信息,无论请求被分配到哪台服务器上,服务器都可以从分布式缓存中获取用户的会话信息。
健康检查问题
问题描述
负载均衡器需要实时监测后端服务器的健康状态,当某一台服务器出现故障时,能够及时将其从负载均衡池中移除,避免将请求分配到故障服务器上。但是,如果健康检查机制不完善,可能会出现误判或漏判的情况。
解决方法
- 定期心跳检测:负载均衡器定期向后端服务器发送心跳包,根据服务器的响应情况判断其健康状态。例如,Nginx 可以通过
health_check
模块实现定期心跳检测。 - 多维度健康检查:除了基本的网络连通性检查外,还可以进行应用层的健康检查,如检查服务器的 HTTP 响应状态码、数据库连接状态等。
- 动态调整健康检查参数:根据服务器的实际运行情况,动态调整健康检查的频率和阈值,避免误判和漏判。
七、实践案例:基于 Nginx 的负载均衡配置
安装 Nginx
以 Ubuntu 系统为例,使用以下命令安装 Nginx:
sudo apt update
sudo apt install nginx
配置负载均衡
编辑 Nginx 的配置文件 /etc/nginx/nginx.conf
或在 /etc/nginx/conf.d
目录下创建一个新的配置文件,例如 load_balancer.conf
:
# 定义后端服务器组
upstream backend_servers {# 轮询算法server 192.168.1.100:80;server 192.168.1.101:80;# 加权轮询算法示例# server 192.168.1.100:80 weight=2;# server 192.168.1.101:80 weight=1;
}server {listen 80;server_name example.com;location / {# 将请求转发到后端服务器组proxy_pass http://backend_servers;# 会话保持配置# ip_hash;}
}
保存配置文件后,重启 Nginx 服务:
sudo systemctl restart nginx
测试与验证
使用浏览器或工具(如 curl
)访问 example.com
,观察请求是否被正确分配到后端服务器上。可以在后端服务器上查看访问日志,确认请求的来源和处理情况。
八、总结
负载均衡是 Web 架构中不可或缺的一部分,它可以提高系统的可用性、性能和扩展性。通过了解不同类型的负载均衡、负载均衡算法以及常见问题的解决方法,我们可以根据实际业务需求选择合适的负载均衡方案。在实践中,我们可以使用 Nginx 等软件负载均衡器来实现简单而高效的负载均衡配置。随着技术的不断发展,负载均衡技术也在不断创新和完善,未来将为 Web 应用的发展提供更强大的支持。
希望这篇博客能够帮助你更好地理解 Web 架构中的负载均衡技术,如果你有任何问题或建议,欢迎在评论区留言。
相关文章:
Web 架构之负载均衡全解析
文章目录 一、引言二、思维导图三、负载均衡的定义与作用定义作用1. 提高可用性2. 增强性能3. 实现扩展性 四、负载均衡类型硬件负载均衡代表设备优缺点 软件负载均衡应用层负载均衡代表软件优缺点 网络层负载均衡代表软件优缺点 五、负载均衡算法轮询算法(Round Ro…...
猫咪如厕检测与分类识别系统系列~进阶【一】视频流推流及网页实时展示
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如…...
DeepSeek全域智能革命:从量子纠缠到星际文明的认知跃迁引言:认知边界的坍缩与重构
一、认知架构的技术基石 1.1 混合专家系统的流形蒸馏 DeepSeek-R2的MoE架构采用微分流形蒸馏技术,将6710亿参数的教师模型(如DeepSeek-Prover-V2)的知识嵌入到动态路由网络中。通过辛几何约束下的参数投影,模型在保留数学证明能…...
Mkdocs页面如何嵌入PDF
嵌入PDF 嵌入PDF代码 ,注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码: <d…...
JS进阶DAY2 构造函数数据常用函数
深入对象 1.创建对象的三种方式 1.利用对象字面量创建对象 const o{ name:佩奇 } 2.利用 new Object 创建对象 const onew Object({ name:佩奇}) console.log(o) //{name:佩奇} 3.利用构造函数创建对象 2.构造函数 构造函数:是一种特殊的函数,主要用来初始…...
【ARM AMBA AHB 入门 3 -- AHB 总线介绍】
请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 AHB Bus 简介AHB Bus 构成AHB BUS 工作机制AHB 传输阶段 AHB InterfacesAHB仲裁信号 AHB 数据访问零等待传输(no waitstatetransfer)等待传输(transfers with wait states)多重传送(multipletransfer)--Pipeline AHB 控制信号 A…...
计划评审技术PERT
计划评审技术(Program Evaluation and Review Technique,PERT)是一种用于项目管理和分析的工具,主要用于估算项目完成时间、识别关键路径以及评估项目进度风险。它最初是在20世纪50年代由美国海军开发的,用于管理复杂的…...
【Leetcode 每日一题 - 扩展】3342. 到达最后一个房间的最少时间 II
问题背景 有一个地窖,地窖中有 n m n \times m nm 个房间,它们呈网格状排布。 给你一个大小为 n m n \times m nm 的二维数组 m o v e T i m e moveTime moveTime,其中 m o v e T i m e [ i ] [ j ] moveTime[i][j] moveTime[i][j] 表…...
Linux57配置MYSQL YUM源
错了,弄错了下载地址 显示没MYSQL 刚才YUM包弄错了 下的是rpm文件 应该安装 通过yum install安装 .repo中的enabled需要修改 哪些能修改 哪些不改 配置特定软件的YUM仓库 nginx看教程有官方文档 将官方文档中YUM配置写入.repo文件然后yum clean all yum ma…...
Kafka是什么?典型应用场景有哪些? (消息队列、流处理平台;日志收集、实时分析、事件驱动架构等)
Kafka 核心解析与场景代码示例 一、Kafka核心概念 Apache Kafka 是分布式流处理平台,具备以下核心能力: 发布-订阅模型:支持多生产者/消费者并行处理持久化存储:消息默认保留7天(可配置)分区机制&#x…...
数据实验分析
数据分析数据分类与绘图数据分类方法:通过指定列名和函数(如SUM)来分类数据,确保数据集中包含所需列,否则会报错。嵌套柱形图应用:嵌套柱形图用于展示多层次分类的数据,如按店名和化妆品类别分类…...
PostgreSQL中“参数默认值实现伪重载“详解
什么是伪重载? "伪重载"指的是通过单一函数定义配合参数默认值和条件逻辑来模拟传统编程语言中方法重载的效果。与真正的函数重载(PostgreSQL支持的多同名函数不同参数实现)不同,伪重载是在一个函数内部处理不同参数组…...
在IDEA中编写Spark程序并运行
Spark是基于scala的,当然它也可以支持java和scala还有python语言,我们这里会使用scala。 1.在Idea中安装插件,使得Idea中可以编写scala代码。 2.使用Maven创建项目,并在pom.xml文件中配置相关的依赖。 3.设置maven依赖项。修改po…...
知识图谱:AI大脑中的“超级地图”如何炼成?
人类看到“苹果”一词,会瞬间联想到“iPhone”“乔布斯”“牛顿”,甚至“维生素C”——这种思维跳跃的背后,是大脑将概念连结成网的能力。而AI要模仿这种能力,需要一张动态的“数字地图”来存储和链接知识,这就是知识…...
Facebook隐私设置详解:如何保护你的个人信息
在这个数字化时代,个人信息安全变得尤为重要。Facebook 作为全球最大的社交网络平台之一,拥有数十亿用户。然而,随着用户数量的增加,隐私问题也日益凸显。本文将详细介绍 Facebook 的隐私设置,帮助你更好地保护个人信息…...
【Hive入门】Hive数据导入与导出:批量操作与HDFS数据迁移完全指南
目录 引言 1 Hive数据导入概述 1.1 Hive数据导入方式分类 1.2 Hive数据模型与存储结构 2 LOAD DATA命令详解 2.1 基本语法与参数 2.2 LOAD DATA执行流程 2.3 案例分析 3 HDFS数据迁移技术 3.1 HDFS文件操作与Hive集成 3.2 外部表技术应用 3.3 分区表动态加载 4 性…...
深入浅出JSON:现代数据交换的基石
JSON(JavaScript Object Notation)已经成为当今互联网上最流行的数据交换格式之一。无论是Web API、配置文件还是NoSQL数据库,JSON都扮演着至关重要的角色。本文将带你全面了解JSON,从基础概念到高级应用。 什么是JSON࿱…...
C++ 日志系统实战第四步:设计与代码实现详解
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文将加入项目代码编写! 目录 日志系统框架设计 模块划分 模块关系图 代码设计 实用类设计 日志等级设计 日志消息类 日志输出格式 日志落地(L…...
DeepSeek API接口调用示例(开发语言C#,替换其中key值为自己的key值即可)
示例: DeepSeek官方接口说明文档:对话补全 | DeepSeek API Docs 官网暂未提供C#代码实现:(以下为根据CURL接口C#代码调用) using System; using System.Collections.Generic; using System.Linq; using System.Text; …...
PyTorch常用命令(可快速上手PyTorch的核心功能,涵盖从数据预处理到模型训练的全流程)
以下是PyTorch常用命令的分类整理,涵盖张量操作、模型构建、数据加载、训练流程等核心内容: 1. 张量操作 创建张量 x torch.tensor([1, 2, 3]) # 从数据创建 x torch.zeros(3, 3) # 全零张量 x torch.ones(3, 3) …...
软开错题(二)
SNMP的传输层协议是UDP Linux操作系统中通常使用apache作为web服务器,其默认的web站点的目录是 /var/www/html 归并排序不是原地排序 邻接表:包含n个头节点和e个表节点,其广度和深度遍历的时间复杂度都是O(ne) grant使用方式 grant 权限 …...
拉削丝锥,螺纹类加工的选择之一
在我们的日常生活中,螺纹连接无处不在,从简单的螺丝钉到复杂的机械设备,都离不开螺纹的精密加工。今天,给大家介绍一种的螺纹刀具——拉削丝锥: 一、拉削丝锥的工作原理 拉削丝锥,听起来有点陌生吧&#…...
【Python Number(数字)】
Python 中的数字类型是编程的基础元素,用于表示数值数据并进行数学运算。以下是 Python 数字类型的核心知识点: 一、基础数字类型 整数(int) 表示整数值,例如 42, -7, 0支持任意精度(无大小限制)…...
大疆无人机SDR 链路
在大疆无人机或通信技术领域,SDR 是 Software-Defined Radio(软件定义无线电) 的缩写,而 SDR 链路 指的是一种通过软件编程实现无线通信功能的技术链路。其核心是通过软件动态调整通信参数&#…...
linux基础学习--linux磁盘与文件管理系统
linux磁盘与文件管理系统 1.认识linux系统 1.1 磁盘组成与分区的复习 首先了解磁盘的物理组成,主要有: 圆形的碟片(主要记录数据的部分)。机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。 数据存储…...
【Qt】Qt 构建系统详解:qmake 入门到项目实战
Qt 构建系统详解:qmake 入门到项目实战 本文将系统介绍 Qt 构建工具 qmake 的用法,并通过一个完整的项目结构示例,帮助你掌握 .pro 文件编写、子项目管理、模块依赖等核心技能。 🧭 一、什么是 qmake? qmake 是 Qt 提…...
Laravel 12 实现验证码功能
Laravel 12 实现验证码功能 在 Laravel 12 中实现验证码功能可以通过多种方式,以下是几种常见的方法: 方法一:使用 Captcha 包(推荐) 首先安装 mews/captcha 包: composer require mews/captcha发布配置…...
深入解析Http11AprProtocol:Tomcat高性能通信的底层原理
HTTP/1.1 协议作为 Web 通信的基础标准,其实现效率直接影响服务器性能。Apache Tomcat 作为 Java 生态中最流行的 Servlet 容器,提供了多种 HTTP 协议实现方案,其中基于 Apache Portable Runtime(APR)的 Http11AprProt…...
HTTP请求与缓存、页面渲染全流程
文章目录 前言**1. HTTP请求与缓存处理****缓存机制**• 强缓存(Cache-Control / Expires)• 协商缓存(Last-Modified / ETag) **2. 服务器响应与数据解析****3. HTML DOM 构建****4. CSSOM 构建****5. 渲染树(Render …...
HTB - Eureka记录
HTB - Eurekahttps://mp.weixin.qq.com/s/r1WmZXNR6YkvnwP40liciA...
CentOS 7 基础环境安装脚本
🌟 CentOS 7 基础环境安装脚本使用文档 🧰 一键部署!助你在 CentOS 7 系统上快速构建高效开发环境。 开源地址:https://github.com/hahaha-zsq/Shortcut-Script CentOS 7 基础环境安装脚本使用 📦 项目结构一览 ./ ├…...
【Python 模块】
Python 中的模块(Module)是组织代码的核心方式,通过将相关函数、类和变量封装到独立文件中,实现代码复用和结构化管理。以下是模块的核心知识点: 一、基础概念 1. 模块定义 任何 .py 文件都是一个模块模块名即文件名…...
极狐Gitlab 如何创建并使用子群组?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 子群组 (BASIC ALL) 您可以将极狐GitLab 群组组织成子群组。您可以使用子群组: 内部和外部组织分开。因为每个子…...
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装) 服务端搭建(1)python和uv环境搭建(2)nodejs安装(3)pycharm安装 服务端搭建 (1)python和…...
【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
本文由Markdown语法编辑器编辑完成. 1.背景: 之前从同事手里接手了一个java的项目,是用maven构建项目的.由于我们的服务都是基于docker来部署的,因此这个java项目也是要编译成docker image然后发布.但是之前一直都是…...
AI与Web3.0:去中心化智能合约的未来
AI与Web3.0:去中心化智能合约的未来 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 AI与Web3.0:去中心化智能合约的未来摘要引言1.1 技术演进背景1.2 行业格局分化 技术架构对比2.1 智能合约…...
记录学习的第三十五天
今天主攻单源最短路Dijkstra算法。不过,还是没有完全掌握。 首先是书本的例题我理解了一遍。 然后其实在力扣上做了三道题的,但是我看题解的情况就不太会。然后试着用上面的方法敲了一下↓的题,但是不对啊,我也不知道为什么呀。...
虚拟现实(VR)与增强现实(AR)在教育领域的应用:开启沉浸式学习新时代
前言 随着科技的飞速发展,虚拟现实(VR)和增强现实(AR)技术逐渐从游戏和娱乐领域走向教育领域。传统的教育模式主要依赖于书本、黑板和课堂讲解,这种模式虽然有效,但往往难以激发学生的学习兴趣和…...
线性代数之矩阵运算:驱动深度学习模型进化的数学引擎
目录 一、矩阵运算的基本概念与类型 二、矩阵运算在深度学习中的核心作用 三、典型深度学习模型中的矩阵运算实现 四、矩阵运算的优化与加速 五、未来发展趋势与挑战 矩阵运算是线性代数的核心组成部分,也是深度学习模型构建和优化的数学基础。从基本的前向传播到复杂的注…...
Spring AI(1)—— 基本使用
Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是将 Spring 生态系统设计原则应用于 AI 领域。 Spring AI 提供以下功能: 支持所有主要的 AI 模型提供商,例如 Anthropic、OpenAI、Microsoft、Amazon、Google 和 Ollama等。支持跨 AI 提供商对同…...
深入浅出HTML:构建现代网页的基石
深入浅出HTML:构建现代网页的基石 引言 在数字世界的基石中,HTML(HyperText Markup Language)始终扮演着不可替代的角色。作为万维网的核心语言,HTML经历了30年的演变,从简单的文档标记发展到支持复杂Web…...
ai说什么是注解,并以angular ts为例
在编程中,注解(Annotation) 是一种特殊的语法结构,用于为代码添加元数据(metadata),从而在不修改代码逻辑的情况下,提供额外的信息或指示编译器、框架、工具如何处理这些代码。注解通…...
【存储管理—动态不等长存储资源分配算法】
文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。 二、实验内容与设计思想 实验内容 1.分析uni…...
【25软考网工】第五章(8)路由协议RIP、OSPF
目录 一、路由协议--RIP 1. RIP协议 1)RIPv1与RIPv2对比 2. 距离矢量路由协议 1)距离矢量路由协议特点 2)RIP路由的度量值 3)路由优先级 4)RIP防环机制 3. 应用案例 1)例题:RIPv1与RIPv2区别 2&…...
日常开发中,iOS 性能调优我们怎么做?
日常开发中,iOS 性能调优我们怎么做?聊聊我用过的几款工具 最近在给一个 iOS 视频类 App 做性能优化,过程中踩了不少坑,也用了一些不错的工具,今天就以一个开发者视角随便聊聊我在调试过程中的一些经验。 一、性能问…...
JNDI 注入原理解析
文章目录 JNDI基础概述JNDI SPI命名服务目录服务 JNDI演示查询 DNS 服务查询 LDAP 服务条目动态协议切换 JNDI 注入漏洞 JNDI基础 概述 JNDI(Java Naming and Directory Interface)是Java提供的标准命名和目录接口,通过统一的API使应用程序…...
Android开发-视图基础
在Android应用开发中,视图(View)是构建用户界面的基本元素。无论是按钮、文本框还是复杂的自定义控件,它们都是基于View类或其子类实现的。掌握视图的基础知识对于创建功能强大且美观的应用至关重要。本文将深入探讨Android中的视…...
Prometheus实战教程:k8s平台-Redis监控案例
以下是 Prometheus 自动发现 Redis 实例的完整 YAML 文件示例,适用于生产环境。该配置包括: Redis 部署:运行 Redis 实例。Redis Exporter:用于暴露 Redis 指标。Prometheus 自动发现:通过 Kubernetes 服务发现自动抓…...
Prompt Engineering 提示词工程学习
一、Prompt Engineering 简介 Prompt Engineering 是设计和优化输入提示(Prompt)以获得预期输出的过程。在与大型语言模型(如 GPT-4)交互时,如何构造提示会显著影响模型的回答质量。 二、Prompt 的重要性 提高生成准确性:通过正确的 Prompt 引导,模型能够更好地理解用…...
数造科技携 DataBuilder 亮相安徽科交会,展现“DataOps +AI”双引擎魅力
近日,数造科技受邀参加第三届中国(安徽)科技创新成果转化交易。 作为国内领先的数据开发与治理平台提供商,数造科技携带其核心产品 DataBuilder 精彩亮相 “新一代信息技术展区”,吸引了众多参会者的目光。 关于 DataB…...