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

lvs-dr模式实验详解

华子目录

  • `lvs-dr`(企业当中最常用)
    • dr模式数据逻辑
    • dr模式数据传输过程
    • dr模式的特点
    • 实验拓扑
    • 实验主机准备
    • 解决vip响应问题
      • 限制响应级别:`arp_ignore`
      • 限制通告级别:`arp_announce`
    • 实验步骤
      • 1.`client`的`ip`设定
      • 2.`router`上的`ip`设定
      • 3.`router`开启路由转发功能
      • 4.`lvs`主机中的`ip`设定
      • 5.`webserver1`主机中的`ip`设定
      • 6.`webserver2`主机中的`ip`设定
      • 7.`RS`主机禁用`arp`响应功能(让其只有`lvs`进行`响应`)
      • 8.`RS`上配置`web`服务
      • 9.`RS`上启动`web`服务
      • 10.安装`lvs`软件包`ipvsadm`并启动
      • 11.设置`lvs`策略并保存
      • 12.测试

lvs-dr(企业当中最常用)

  • DRDirect Routing直接路由LVS默认模式应用最广泛,通过为请求报文重新封装一个MAC首部进行转发源MACDIP所在的接口的MAC目标MAC是某挑选出RSRIP所在接口的MAC地址
  • 源IP/PORT,以及目标IP/PORT保持不变

dr模式数据逻辑

在这里插入图片描述

  • DR模式中,RS接收到访问请求不需要回传给VS调度器,而是直接回传数据发送给client客户端,所以RSvs上都要有vip

dr模式数据传输过程

在这里插入图片描述

  • 客户端发送数据帧vs调度主机数据帧内容客户端IP+客户端的MAC+VIP+VIP的MAC
  • VS调度主机接收到数据帧后把数据帧中的VIP的MAC改为RS1的MAC,此时数据帧中的数据客户端IP+客户端的MAC+VIP+RS1的MAC
  • RS1收到数据包后做出响应回传数据包响应数据包中的内容VIP+RS1的MAC+客户端IP+客户端IP的MAC

dr模式的特点

  • Director(vs调度器)各RS都配置有VIP
  • 确保前端路由器目标IPVIP请求报文发往Director
  • RSRIP可以使用私网地址,也可以是公网地址RIPDIP同一IP网络(中间不能加路由器)
  • RIP网关不能指向DIP,以确保响应报文不会经由Director。需要指向边界路由内网地址
  • RSDirector要在同一个物理网络
  • 请求报文经由Director,但响应报文经由Director,而由RS直接发往Client
  • 不支持端口映射端口不能修改
  • 由于dr模式源目ip不变,只有二层mac发生变化,所以vsrs端口必须保持一致
  • RS可使用大多数OS系统
  • RS上修改内核参数以限制arp通告应答级别(使其只能接收,不能响应
  • vs是知道rs的主机网卡的mac,所以vsrs需要处于同一vlan中,中间不能加路由器

实验拓扑

在这里插入图片描述

  • 内网仅主机ip负责通信vip负责对外
  • clientrouter之间是互联网。由于实验环境有限,为了让client访问到rs上,我们让client网关指向routernat来模拟外网互通
  • lvsrs网关都指向router的仅主机(边界路由器的内网地址)
  • 为了简单配置,对lo网卡进行设定(也可以对eth0网卡设定),使其成为vip

实验主机准备

  • 准备5台机子,一台client,一台router,一台lvs,两台webserver充当RS
  • client上一个nat网卡
  • router上一个nat网卡,一个仅主机网卡
  • lvs上一个仅主机网卡用于内网通信lo网卡用作vip
  • RS上一个仅主机网卡用于内网通信lo网卡用作vip
  • client网关指向routernat网卡,lvs,RS网关指向router仅主机网卡

主机准备
在这里插入图片描述

client上一个nat网卡
在这里插入图片描述

router上一个nat网卡,一个仅主机网卡
在这里插入图片描述

  • 由于routernat模式仅主机模式网卡处于不同vlan,两个网卡要想通信,就必须打开Linux内核路由转发功能

lvs上一个仅主机网卡用于内网通信lo网卡用作vip
在这里插入图片描述

RS上一个仅主机网卡用于内网通信lo网卡用作vip
在这里插入图片描述
在这里插入图片描述

解决vip响应问题

dr模型各主机上均需要配置vip解决地址冲突的方式有三种

  • 前端网关静态绑定
  • 各RS使用arptables
  • 各RS修改内核参数,来限制arp响应通告级别

限制响应级别:arp_ignore

  • 0默认值,表示可使用本地任意接口上配置的任意地址进行响应
  • 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

  • 0默认值,把本机所有接口所有信息向每个接口的网络进行通告
  • 1:尽量避免将接口信息非直接连接网络进行通告
  • 2:必须避免接口信息非本网络进行通告

实验步骤

1.clientip设定

  • nat网卡:172.25.254.10/24
  • 网关:172.25.254.100/24
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=172.25.254.10/24,172.25.254.100
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

2.router上的ip设定

  • nat网卡:172.25.254.100/24
  • 仅主机网卡:192.168.0.10/24
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=172.25.254.100/24
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ethernet][ipv4]
address=192.168.0.10/24
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]

3.router开启路由转发功能

[root@router ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #在文件末尾添加
[root@router ~]# sysctl -p   #加载
net.ipv4.ip_forward = 1

4.lvs主机中的ip设定

  • 仅主机网卡:192.168.0.200/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=192.168.0.200/24,192.168.0.10
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@lvs ~]# ip addr add 192.168.0.100/32 dev lo
[root@lvs ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:35:a8:7c brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.0.200/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::4e21:e4b4:36e:6d14/64 scope link noprefixroutevalid_lft forever preferred_lft forever
[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

5.webserver1主机中的ip设定

  • 仅主机网卡:192.168.0.11/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=192.168.0.11/24,192.168.0.10
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@webserver1 ~]# ip addr add 192.168.0.100/32 dev lo
[root@webserver1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:5f:4a:ff brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.0.11/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::7baa:9520:639b:5e48/64 scope link noprefixroutevalid_lft forever preferred_lft forever
[root@webserver1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

6.webserver2主机中的ip设定

  • 仅主机网卡:192.168.0.22/24
  • lo网卡设置为vip192.168.0.100/32
  • 网关指向:192.168.0.10/24
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
uuid=3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
type=ethernet
interface-name=eth0[ethernet][ipv4]
address=192.168.0.22/24,192.168.0.10
method=manual[ipv6]
addr-gen-mode=default
method=auto[proxy]
[root@webserver2 ~]# ip addr add 192.168.0.100/32 dev lo
[root@webserver2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:ef:47:71 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.0.22/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::5db8:7a0d:b282:fdbf/64 scope link noprefixroutevalid_lft forever preferred_lft forever
[root@webserver2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

7.RS主机禁用arp响应功能(让其只有lvs进行响应

  • webserver1
  • 只有先修改all,才能再修改某一网卡
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • webserver2
  • 只有先修改all,才能再修改某一网卡
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  • 以上配置为临时修改重启无效。若想永久生效,则需要在/etc/sysctl.conf文件中添加

8.RS上配置web服务

  • webserver1
[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo webserver1 > /var/www/html/index.html
  • webserver2
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver2 > /var/www/html/index.html

9.RS上启动web服务

  • webserver1
[root@webserver1 ~]# systemctl enable --now httpd
  • webserver2
[root@webserver2 ~]# systemctl enable --now httpd

10.安装lvs软件包ipvsadm并启动

[root@lvs ~]# yum install ipvsadm -y
[root@lvs ~]# touch /etc/sysconfig/ipvsadm  #在启动之前必须要有这个文件,否则启动失败[root@lvs ~]# systemctl restart ipvsadm
[root@lvs ~]# systemctl enable ipvsadm

11.设置lvs策略并保存

  • -g表示dr模式
#当访问vip的80端口时,轮询调度到RS的80端口上
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.11:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.22:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.100:80 rr-> 192.168.0.11:80              Route   1      0          0-> 192.168.0.22:80              Route   1      0          0
[root@lvs ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.0.11:http -g -w 1
-a -t lvs:http -r 192.168.0.22:http -g -w 1

12.测试

  • client端访问vip
[root@client ~]# curl 192.168.0.100
webserver2
[root@client ~]# curl 192.168.0.100
webserver1

相关文章:

lvs-dr模式实验详解

华子目录 lvs-dr&#xff08;企业当中最常用&#xff09;dr模式数据逻辑dr模式数据传输过程dr模式的特点实验拓扑实验主机准备解决vip响应问题限制响应级别:arp_ignore限制通告级别:arp_announce 实验步骤1.client的ip设定2.router上的ip设定3.router开启路由转发功能4.lvs主机…...

【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具

目录 简介 工具要求 语法 例子和参数 例子 更多参数 其他工具和查询 简介 mlxconfig 工具允许用户在不重新烧录固件的情况下更改某些设备配置。 配置在重启后仍然保留。 默认情况下&#xff0c;mlxconfig 显示将在下次启动时加载的配置。对于第五代设备&#xff0c;还…...

跨站请求伪造(CSRF)漏洞详解

免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法…...

Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示

数字化给各行各业所带来的改变&#xff0c;在早些年间突出自动这一流程。但随着科技的发展&#xff0c;让人们也愈发了解可视化操作所带来的优势。智慧工地的诞生&#xff0c;相当于为建筑施工带来了一套较为完整的数字化流程&#xff0c;能够完善施工环节中的各部分内容。接下…...

【推广】图书|2024新书《大模型RAG实战:RAG原理、应用与系统构建》汪鹏、谷清水、卞龙鹏等,机械工业出版社

探索RAG系统新高度&#xff1a;《大模型RAG实战&#xff1a;RAG原理、应用与系统构建》 随着大模型技术的爆发&#xff0c;尤其是ChatGPT之后&#xff0c;以ChatPDF为首的知识库问答产品迅速走红&#xff0c;引发了RAG&#xff08;检索增强生成&#xff09;系统的广泛关注与讨论…...

在Unity UI中实现UILineRenderer组件绘制线条

背景介绍 在Unity的UI系统中&#xff0c;绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线&#xff08;例如在UI上连接不同的图标或控件&#xff09;&a…...

C语言中union的用法

在C语言中&#xff0c;union&#xff08;联合体&#xff09;是一种特殊的复合数据类型&#xff0c;它允许多个不同的数据成员共享同一块内存空间。与struct&#xff08;结构体&#xff09;不同的是&#xff0c;union中的所有成员共用同一个内存地址&#xff0c;因此同时只能存储…...

C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)

绝妙&#xff01;快慢指针法,快指针先走n步&#xff08;复杂度O(n),O(1))&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…...

鸿蒙 WebView 设置 Header

import { webview } from kit.ArkWebimport { WebHeader } from kit.ArkUI 一共两种方式&#xff1a; 1.把 loadurl的方法写在web组件的生命周期里面 Web({ src:"", controller: this.controller }) .onControllerAttached(()>{ this.controller.loadUrl("…...

电力施工作业安全行为检测图像数据集

电力施工作业安全行为检测图像数据集&#xff0c;图片总共 2300左右&#xff0c;标注为voc(xml)格式&#xff0c;包含高空抛物&#xff0c;未佩戴安全带&#xff0c;高处作业无人监护等。 电力施工作业安全行为检测图像数据集 数据集描述 这是一个专门用于电力施工作业安全行…...

大数据实验2.Hadoop 集群搭建(单机/伪分布式/分布式)

实验二&#xff1a; Hadoop安装和使用 一、实验目的 实现hadoop的环境搭建和安装Hadoop的简单使用&#xff1b; 二、实验平台 操作系统&#xff1a;Linux&#xff08;建议Ubuntu16.04或者18.04&#xff09;&#xff1b;Hadoop版本&#xff1a;3.1.3&#xff1b;JDK版本&…...

【CSS in Depth 2 精译_036】5.6 Grid 网格布局中与对齐相关的属性 + 5.7本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…...

Qt圆角窗口

Qt圆角窗口 问题&#xff1a;自己重写了一个窗口&#xff0c;发现用qss设置圆角了&#xff0c;但是都不生效&#xff0c;不过子窗口圆角都生效了。 无边框移动窗口 bool eventFilter(QObject *watched, QEvent *evt) {static QPoint mousePoint;static bool mousePressed f…...

研究生第一次刷力扣day1

1.给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target 的那两个整数&#xff0c;并返回它们的数组下标 直接采用暴力求解&#xff0c;其他解答案看不懂 大致思想&#xff1a;先用len函数求出数组的长度n&#xff0c;然后一个个遍…...

flink自定义process,使用状态求历史总和(scala)

es idea maven 依赖 <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-elasticsearch7_2.11</artifactId> <version>1.11.1</version> </dependency> import org.apache.flink.api.common.eve…...

股指期货理论价格计算公式是什么?

股指期货&#xff0c;作为金融衍生品的一种&#xff0c;其价格与现货市场的股指价格紧密相关&#xff0c;但又受到多种因素的影响。了解股指期货理论价格的计算公式&#xff0c;对于投资者进行套利交易、风险管理等具有重要意义。本文将详细解读股指期货理论价格的计算公式&…...

解决R包依赖版本不兼容问题

ERROR: dependency ‘Matrix’ is not available for package ‘irlba’ removing ‘/root/anaconda3/envs/myview/lib/R/library/irlba’ ERROR: dependency ‘Matrix’ is not available for package ‘N2R’ removing ‘/root/anaconda3/envs/myview/lib/R/library/N2R’ ER…...

HarmonyOS开发者基础认证考试试题

文章目录 一、判断题二、单选题三、多选题 因考试只有91分&#xff0c;所以下方答案有部分错误&#xff0c;如果有发现错误&#xff0c;欢迎提出 一、判断题 1. HarmonyOS提供了基础的应用加固安全能力&#xff0c;包括混淆、加密和代码签名能力 正确 2. 用户首选项是关系型数…...

如何使用 React、TypeScript、TailwindCSS 和 Vite 创建 Chrome 插件

创建一个 Chrome 插件是一个有趣的项目&#xff0c;特别是当结合使用强大的工具如 React、TypeScript、TailwindCSS 和 Vite 时 在这篇文章中&#xff0c;我们将逐步引导完成整个过程&#xff0c;了解如何在 2024 年构建自己的 Chrome 插件。无论是经验丰富的开发者还是刚刚起…...

机器学习——Stacking

Stacking&#xff1a; 方法&#xff1a;训练多个模型(可以是强模型)&#xff0c;然后将这些模型的预测结果作为新的特征&#xff0c;输入到下一层新的模型&#xff08;可以是多个&#xff09;中进行训练&#xff0c;从而得到最终的预测结果。 代表&#xff1a;Stacking本身并没…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...