LVS原理及实例
目录
LVS原理
LVS概念
lvs集群的类型
lvs-nat
解释
传输过程
lvs-dr
解释
传输过程
特点
lvs-tun
LVS(Linux Virtual Server)常见的调度算法
防火墙标记(Firewall Marking)结合轮询调度
实战案例
lvs的nat模式配置
准备工作
配置过程
测试结果
lvs的dr模式综合实践
虚拟机配置(准备五个虚拟机)
编辑编辑编辑编辑编辑配置过程
测试结果
lvs的防火墙标记解决轮询调度问题
错误示范
正确示范
编辑测试结果
LVS原理
LVS(Linux Virtual Server,Linux 虚拟服务器)的基本原理是通过将多个真实服务器组合成一个虚拟服务器集群,实现对客户端请求的高效负载均衡和高可用性服务。 其主要工作流程如下:
1. 客户端向虚拟服务器(VIP)发送请求。
2. 负载均衡器(通常称为 Director)接收到请求。
3. Director 根据预先配置的负载均衡算法(如轮询、加权轮询、最少连接等)选择一个合适的真实服务器(Real Server)。
4. Director 将客户端请求转发到选定的 Real Server。
5. Real Server 处理请求,并将响应直接返回给客户端。
为了实现请求的转发,LVS 支持多种工作模式,如 NAT(Network Address Translation,网络地址转换)模式、TUN(IP Tunneling,IP 隧道)模式和 DR(Direct Routing,直接路由)模式。
在 NAT 模式中,Director 不仅负责调度,还对请求和响应数据包进行网络地址转换。
在 TUN 模式中,Director 将请求数据包封装后发送给 Real Server,Real Server 处理后直接将响应返回给客户端。
在 DR 模式中,Director 根据算法选择 Real Server 后,将请求的 MAC 地址修改为选定 Real Server 的 MAC 地址,然后通过局域网将请求直接发送给 Real Server,Real Server 处理后直接响应给客户端。
通过 LVS 的负载均衡机制,可以提高服务器集群的整体性能、可扩展性和可用性,确保客户端能够获得快速和可靠的服务。
LVS概念
| 名称 | 意义 |
| VS(Virtual Server)/虚拟服务器 | 负责调度,将客户端的请求分配到合适的后端服务器 |
| RS(Real Server)/真实服务器 | 负责真正提供服务,处理来自 VS 调度分配的请求 |
| CIP(Client IP)/客户端主机IP地址 | 客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址 |
| VIP(Virtual serve IP)/虚拟IP地址 | Director用于向客户端计算机提供服务的IP地址 |
| DIP(Director IP)/Director的IP地址 | Director用于连接内外网网络的IP地址 |
| RIP(Real server IP)/真实IP地址 | 在集群下面节点上使用的IP地址 |

访问过程:CIP<-->VIP == DIP<-->RIP
lvs集群的类型
(此处我们详细讲解lvs-nat和lvs-br)
lvs-nat
解释
LVS(Linux Virtual Server)的网络地址转换(NAT)模式是一种在网络层(第四层)实现负载均衡的方法。在NAT模式中,Director Server(DS)充当所有服务器节点的网关,既是客户端请求的入口,也是Real Server响应客户端的出口。优点是可以进行端口转换,缺点是存在性能瓶颈。它主要工作在OSI模型的第三层(网络层)和第四层(传输层)。NAT允许内部网络使用私有IP地址,并通过公共IP地址进行外部通信。
传输过程
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端 6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发 因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。
lvs-dr
解释
LVS(Linux Virtual Server)的 DR(Direct Routing,直接路由)模式,这种模式适用于非ARP设备的Real Server,Real Server网络是局域网,同样支持大量Real Server(高达100个),Real Server有自己的路由器。优点是性能最佳,缺点是不支持跨网段和端口转换。工作在数据链路层。在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip
传输过程
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端 的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC
特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址
lvs-tun
LVS(Linux Virtual Server)的 TUN(IP Tunneling,IP 隧道)模式是另一种负载均衡模式。
在 TUN 模式中,Director 接收到客户端请求后,根据负载均衡算法选择一台合适的 Real Server。然后,Director 将请求数据包重新封装在一个新的 IP 数据包中,并将其发送给所选的 Real Server。
Real Server 接收到数据包后,解封装得到原始的请求数据包,并进行处理。处理完成后,Real Server 直接将响应数据包返回给客户端,而不经过 Director。
TUN 模式的优点是可以跨越不同的网络区域对服务器进行负载均衡,Real Server 可以位于不同的物理网络。但它也有一些缺点,比如需要所有服务器支持 IP 隧道功能,会增加一定的系统开销。
LVS(Linux Virtual Server)常见的调度算法
| 静态调度算法 | RR,WRR,DH,SH |
| 动态调度算法 | LC,WLC,LBLC,LBLCR |
静态调度算法
1. 轮询(Round Robin,RR):将请求依次分配给各个真实服务器,依次循环。
2. 加权轮询(Weighted Round Robin,WRR):给每个真实服务器设置一个权重,根据权重的比例将请求分配给服务器。权重越高,分配到的请求越多。
3.目标地址散列(Destination Hashing, DH):根据请求的目标 IP 地址进行哈希运算,将请求分配到固定的服务器。
4.源地址散列(Source Hashing, SH):根据请求的源 IP 地址进行哈希运算,将请求分配到固定的服务器。
动态调度算法
1. 最少连接(Least Connections,LC):将新的请求分配给当前连接数最少的真实服务器。
2. 加权最少连接(Weighted Least Connections,WLC):为真实服务器设置权重,综合考虑服务器的权重和当前连接数来分配请求。
3. 基于局部性的最少连接(Locality-Based Least Connections,LBLC):主要考虑请求的目标 IP 地址,优先将请求分配给同一 IP 地址对应的真实服务器。
4. 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR):结合了 LBLC 和复制功能,对于目标 IP 地址相同的请求,如果对应的真实服务器没有活动连接,则可以在有活动连接的真实服务器中选择一个,并复制该连接。
防火墙标记(Firewall Marking)结合轮询调度
在 LVS 环境中,使用防火墙标记(Firewall Marking)结合轮询调度可以实现更灵活和定制化的负载均衡策略。
通过防火墙标记,可以为不同的连接或数据包打上特定的标记。然后,在 LVS 的配置中,可以根据这些标记来进行调度决策,而不仅仅依赖于默认的轮询方式。
实战案例
lvs的nat模式配置

准备工作
lvs主机需要两个网络适配器,其中一个为NAT模式,另外一个为仅主机模式,还需要两个server主机,一个为server1还有一个为server2,都为仅主机模式


配置过程
配置ip
lvs主机
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.connection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual

server1主机
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual

server2主机配置
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

在lvs主机中配置
lvs中打开内核路由功能,ip_forward = 1通常表示启用了 IP 转发功能,使网络适配器分别为nat和仅主机之间连通
vim /etc/sysctl.conf #在最后一行添加
net.ipv4.ip_forwaed = 1 #启用了 IP 转发功能sysctl -p #使配置生效

下载ipvsadm
yum install ipvsadm -y
配置规则
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -mipvsadm -Ln
watch -n 1 ipvsadm -Ln --rate #也可以使用监控命令来看
在server主机配置
yum install httpd -y #两个都要下载httpdecho webserver1-192.168.0.10 > /var/www/html/index.html #server1中配置
ystemctl restart httpdecho webserver1-192.168.0.10 > /var/www/html/index.html #server2中配置
systemctl restart httpd

测试结果

lvs的dr模式综合实践

| node | ip | vip | 角色 | 模式 |
| client | 172.25.254.200 | 客户端 | NAT | |
| router | 192.168.0.100 172.25.254.100 | 路由器 | NAT,仅主机 | |
| lvs | 192.168.0.50 | lo:192.168.0.200/32 | 调度器 | 仅主机 |
| webserver1 | 192.168.0.10 | lo:192.168.0.200/32 | 真实服务器 | 仅主机 |
| webserver2 | 192.168.0.20 | lo:192.168.0.200/32 | 真实服务器 | 仅主机 |
虚拟机配置(准备五个虚拟机)





配置过程
配置ip
配置client主机
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth0

配置router主机
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.connection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual[root@router ~]# nmcli connection reload
[root@router ~]# nmcli connection up eth0
[root@router ~]# nmcli connection up eth1

配置lvs主机(vip使用环回来创建)
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual[root@lvs ~]# nmcli connection reload
[root@lvs ~]# nmcli connection up eth0[root@lvs ~]# ip addr add dev lo 192.168.0.200/32

配置server1主机(vip使用环回来创建)
[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual[root@server1 ~]# nmcli connection reload
[root@server1 ~]# nmcli connection up eth0[root@server1 ~]# ip addr add dev lo 192.168.0.200/32

配置server2主机(vip使用环回来创建)
[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual[root@server2 ~]# nmcli connection reload
[root@server2 ~]# nmcli connection up eth0[root@server2 ~]# ip addr add dev lo 192.168.0.200/32

修改Linux内核参数。
server1和server2上面都要做
(rs主机中使vip不对外响应,将RS上的VIP配置为lo接口的别名,限制Linux仅对对应接口的ARP请求做响应;)
限制响应级别 :arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
配置ipvsadm
在lvs主机中进行配置 IP 虚拟服务器
yum install ipvsadm -yipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
启用 IP 转发功能
在router主机进行配置
(设置持久连接,保持客户端与后端服务器的连接关系)
vim /etc/sysctl.conf #在最后一行添加
net.ipv4.ip_forward = 1ipvsadm -p

配置web服务
yum install httpd -yecho 11111111 > /var/www/html/index.html #server1中配置
ystemctl restart httpdecho 22222222 > /var/www/html/index.html #server2中配置
systemctl restart httpd
测试结果
for i in {1..10}; do curl 192.168.0.200; done

lvs的防火墙标记解决轮询调度问题
错误示范
ipvsadm -A -t 192.168.0.200:80 -s rr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:80 -g
错误结果
[root@lvs ~]# curl -k https://192.168.0.200;curl 192.168.0.200
1111111
1111111
正确示范
FWM:FireWall Mark
MARK target 可用于给特定的报文打标记,
--set-mark value
其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度
#在lvs主机打标记:
#并且lvs主机基于标记定义集群服务:
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 66ipvsadm -A -f 66 -s rr #设定调度规则
ipvsadm -a -f 66 -r 192.168.0.10 -g
ipvsadm -a -f 66 -r 192.168.0.20 -g


测试结果

相关文章:
LVS原理及实例
目录 LVS原理 LVS概念 lvs集群的类型 lvs-nat 解释 传输过程 lvs-dr 解释 传输过程 特点 lvs-tun LVS(Linux Virtual Server)常见的调度算法 防火墙标记(Firewall Marking)结合轮询调度 实战案例 lvs的nat模式配置 …...
Spring统一功能处理:拦截器、响应与异常的统一管理
目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核⼼功能之⼀,主要⽤来拦截⽤⼾的请求,在指定⽅法前后,根据业务需要执⾏预先设定的代码。 也就是说,允许开发⼈员提前预定义⼀些逻辑…...
深入理解小程序的渲染机制与性能优化策略
一、小程序的渲染机制 小程序的渲染机制主要由两部分组成:渲染层和逻辑层。渲染层负责页面的渲染,逻辑层负责处理业务逻辑和数据处理。两者通过一个安全的、高效的通信机制进行数据传输和事件通知。 渲染层:在渲染层,WXML 模板会…...
Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)
上次讲解了多线程第一部分:Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程) 文章目录 1.理解Linux下线程——理解tid2. Linux线程互斥2.1相关概念2.2引入问题分析问题解决思路 2.3L…...
Pandas中`str`对象解析与应用实例
在数据科学领域,字符串操作是数据清洗和处理中不可或缺的一部分。Pandas的str对象为我们提供了一个强大而灵活的字符串操作方法集。本文将深入探讨str对象的各种应用,并通过代码示例和输出展示如何有效地处理字符串数据。 关键词 Pandas, 字符串操作, …...
C语言典型例题29
《C程序设计教程(第四版)——谭浩强》 习题2.6 设圆半径r1.5,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 scanf输入结果,输出计算结果,输出时要有文字说明,取小数点后两位数…...
Docker 常规安装简介
Docker常规安装简介 欢迎关注我的B站:https://space.bilibili.com/379384819 1. 安装mysql 1.1 docker hub上面查找mysql镜像 网址: https://hub.docker.com/_/mysql 1.2 从docker hub上(阿里云加速器)拉取mysql镜像到本地标…...
理解张量拼接(torch.cat)
拼接 维度顺序:对于 3D 张量,通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量,理解 torch.cat 的 dim 参数确实变得更加抽象,但原理是相同的。让我们通过一…...
指针基础知识(笔记)
文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…...
[Python学习日记-3] 编程前选择一个好用的编程工具
[Python学习日记-3] 编程前选择一个好用的编程工具 简介 PyCharm IDE的安装 PyCharm IDE安装后的一些常规使用 简介 在踏上 Python 编程的精彩旅程之前,选择一款得心应手的编程工具无疑是至关重要的一步。这就如同战士在出征前精心挑选趁手的武器,它将…...
智能化的Facebook未来:AI如何重塑社交网络的面貌?
随着人工智能(AI)技术的飞速发展,社交网络的面貌正在经历深刻的变革。Facebook(现Meta Platforms)作为全球最大的社交媒体平台之一,正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…...
安全启动的原理
安全启动(Secure Boot)是一种用于确保设备只运行经过认证的软件的安全机制。其核心原理和步骤如下: 1. **硬件信任根(Root of Trust, RoT)**: - 安全启动过程始于硬件信任根,通常是设备上的…...
【ML】pre-train model 是什么如何微调它,如何预训练
【ML】pre-train model 是什么如何微调它,如何预训练 0. 预训练模型(Pre-trained Model)0.1 预训练模型的预训练过程0.2 如何微调预训练模型0.3 总结 1. Contextualized word Embedding2. 怎么 让 bert 模型变小3. 如何微调模型 0. 预训练模型…...
leetcode代码练习——Java的数据结构(具体使用)
注:Java中所有的泛型必须是引用类型 如<Integer>而不是<int> java提供的数学方法: 求最大值Math.max(10,15),最小值Math.min(10,15) 看取值范围: int范围:-2^31-2^31-1 double范围:-2^63-2^63-1 long范围:-2^63-2…...
sqlserver导出数据脚本
文章目录 sqlserver导出数据脚本任务-生成脚本 sqlserver导出数据脚本 任务-生成脚本...
html+css 实现hover中间展开背景
前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目…...
Java 怎么获取支付宝Open ID
在Java中获取支付宝用户的OpenID,通常是通过支付宝的开放平台API来完成的。OpenID是支付宝用于唯一标识一个支付宝用户的字符串,它在OAuth授权流程中被用来获取用户的身份和权限。 下面我将给出一个基于Java使用Spring Boot框架和支付宝开放平台SDK来获…...
Web-server日志分析命令
https://gist.github.com/hvelarde/ceac345c662429447959625e6feb2b47 通过状态码获取请求总数 awk {print $9} /var/log/apache2/access.log | sort | uniq -c | sort –rn按照IP的请求数量排序 awk {print $1} /var/log/apache2/access.log | sort | uniq -c | sort -rn |…...
Typora的markdown笔记使用说明
个人感觉Typora是一款很适合记录编程学习的软件 目录 个人感觉Typora是一款很适合记录编程学习的软件 一、标题 二、段落 1、换行 2、分割线 三、文字显示 1、字体 2、上下标 四、列表 1、无序列表 2、有序列表 3、任务列表 五、区块显示 六、代码显示 1、行内…...
前端如何做单元测试? 看这篇就入门了
前言 对于现在的前端工程,一个标准完整的项目,通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够,因此我写了这边文章,一方面期望通过这篇文章…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
小智AI+MCP
什么是小智AI和MCP 如果还不清楚的先看往期文章 手搓小智AI聊天机器人 MCP 深度解析:AI 的USB接口 如何使用小智MCP 1.刷支持mcp的小智固件 2.下载官方MCP的示例代码 Github:https://github.com/78/mcp-calculator 安这个步骤执行 其中MCP_ENDPOI…...
XXE漏洞知识
目录 1.XXE简介与危害 XML概念 XML与HTML的区别 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念与危害 案例:文件读取(需要Apache >5.4版本) 案例:内网探测(鸡肋) 案例:执行命…...
如何使用CodeRider插件在IDEA中生成代码
一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1:市场安装 打开IDEA,进入File → Settings → Plugins搜…...
