高可用架构:Keepalived、Nginx与Docker深度解析
本文深入解析了Keepalived技术,阐述其基于VRRP协议实现高可用的核心功能,包括虚拟路由器冗余、健康检查、负载均衡集成及脚本执行与通知。同时,设计了Nginx高可用方案,涵盖双机主从、主主及多点集群模式,分析其优缺点。最后通过Docker环境实践,展示了高可用Nginx服务的部署与验证过程,为构建稳定网络服务架构提供参考。
一、Keepalived 技术解析
1.1 Keepalived 核心功能
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)的开源软件,最初是为LVS(Linux Virtual Server)设计的,用于实现高可用功能。随着发展,它的应用范围不断扩大。其核心功能主要有以下几方面:
1.1.1. VRRP协议实现
-
虚拟路由器冗余:Keepalived利用VRRP协议创建虚拟路由器。多个物理服务器可组成一个虚拟路由器组,拥有一个共同的虚拟IP地址(VIP)。在这个组里,会选举出一个主路由器(Master),其余的作为备份路由器(Backup)。主路由器负责接收发往VIP的流量,备份路由器则在主路由器出现故障时接管其职责。
-
主备切换机制:主备路由器通过VRRP报文进行通信,主路由器会周期性地发送通告消息。当备份路由器在一定时间内未收到主路由器的通告消息,就会认为主路由器出现故障,然后根据优先级选举出新的主路由器,并将VIP转移到新的主路由器上,从而确保服务的持续可用。
1.1.2. 健康检查
-
多种检查方式:Keepalived支持多种健康检查方法,涵盖了对服务器基础网络连通性、服务端口状态以及自定义脚本执行结果的检查。可以通过ICMP(Internet Control Message Protocol)检测服务器的网络连通性;使用TCP连接检查特定服务端口是否开放;还能执行自定义的脚本检查应用程序的运行状态。
-
故障处理:如果在健康检查过程中发现某个服务器出现故障,Keepalived会将其标记为不可用,并根据配置采取相应的措施,如将其从负载均衡器的后端服务器列表中移除,或者触发主备切换操作。
1.1.3. 负载均衡集成
-
与LVS集成:Keepalived最初的设计目的就是与LVS配合使用,实现负载均衡器的高可用性。Keepalived负责监控LVS负载均衡器的状态,当主负载均衡器出现故障时,会自动将VIP切换到备份负载均衡器上,确保流量能够继续被正确分发到后端服务器。
-
负载均衡策略辅助:虽然Keepalived本身不直接实现负载均衡算法,但它可以辅助调整负载均衡器的配置。例如,根据健康检查的结果,动态地调整后端服务器在负载均衡器中的权重,使得性能更好、状态更稳定的服务器能够承担更多的流量。
1.1.4. 脚本执行与通知
-
自定义脚本执行:Keepalived允许用户配置在特定事件发生时执行自定义脚本。比如,在主备切换前后执行脚本,用于清理缓存、重新配置服务或者发送通知等操作。
-
事件通知:当Keepalived检测到故障、进行主备切换等事件发生时,可以通过配置发送通知,如发送邮件、短信或者调用API接口,及时告知管理员系统的状态变化。
1.2 VRRP 协议工作原理
VRRP(Virtual Router Redundancy Protocol)协议的工作原理是在多个路由器之间建立一个虚拟路由器,通过选举机制确定主路由器和备份路由器,以实现网络的冗余和高可用性。以下是其详细工作原理:
1.2.1. 虚拟路由器和虚拟IP地址
- 一组路由器(至少两个)共同组成一个虚拟路由器,这个虚拟路由器有一个唯一的虚拟IP地址和虚拟MAC地址。虚拟IP地址是用户设备默认网关的地址,用户设备将数据包发送到这个虚拟IP地址,而虚拟MAC地址则用于在局域网中标识虚拟路由器。虚拟路由器通过虚拟IP地址对外提供服务,用户设备将数据包发送到虚拟IP地址,由虚拟路由器进行转发。
1.2.2. 选举机制
- 优先级设定:每个参与VRRP的路由器都有一个优先级,范围是0到255。优先级越高,成为主路由器的可能性越大。可以通过配置来设置路由器的优先级,通常情况下,性能较好或更可靠的路由器会被设置为较高的优先级。
- 选举过程:在初始化阶段,所有路由器都会发送VRRP通告消息,其中包含自己的优先级等信息。通过比较优先级,优先级最高的路由器将被选举为主路由器,其他路由器则成为备份路由器。如果多个路由器的优先级相同,则IP地址较大的路由器将成为主路由器。
1.2.3. 主备路由器职责
- 主路由器:主路由器的主要职责是处理发往虚拟IP地址的数据包,将这些数据包转发到相应的目标网络。同时,主路由器会定期发送VRRP通告消息,告知备份路由器自己的运行状态。
- 备份路由器:监听主路由器发送的VRRP通告消息,以了解主路由器的状态。在主路由器正常工作时,备份路由器处于待命状态,不处理发往虚拟IP地址的数据包。当备份路由器在一定时间内没有收到主路由器的通告消息时,就会认为主路由器出现故障,进而启动选举过程,重新选举主路由器。
1.2.4. 抢占与非抢占模式
- 抢占模式:当一个优先级更高的路由器加入到VRRP组中时,它会立即向其他路由器发送VRRP通告消息,声明自己的优先级更高,从而抢占主路由器的角色。这种模式可以确保高优先级的路由器能够及时成为主路由器,提供更好的服务。
- 非抢占模式:在非抢占模式下,即使有优先级更高的路由器加入,只要当前主路由器正常工作,新加入的路由器就不会抢占主路由器的角色。只有当主路由器出现故障,导致备份路由器重新选举时,优先级更高的路由器才有可能成为主路由器。
1.2.5. 定时器设置
- 通告间隔定时器:主路由器按照一定的时间间隔发送VRRP通告消息,这个时间间隔通常可以配置,默认值是1秒。通过调整通告间隔,可以在网络稳定性和故障检测速度之间进行权衡。较短的通告间隔可以更快地检测到主路由器故障,但会增加网络带宽占用;较长的通告间隔则可以减少网络带宽占用,但可能会导致故障检测时间延长。
- 失效定时器:备份路由器在等待主路由器通告消息时,会启动一个失效定时器。如果在失效定时器超时之前没有收到主路由器的通告消息,备份路由器就会认为主路由器出现故障,从而触发选举过程。失效定时器的时长通常是通告间隔的倍数,默认情况下是通告间隔的3倍。
通过以上工作原理,VRRP协议能够确保在网络中的路由器出现故障时,能够快速地进行主备切换,保证网络的连续性和稳定性,为用户提供可靠的网络连接。
二、Nginx 高可用方案设计
2.1 双机主从
模式
- 模式介绍:在双机主从模式中,有两台服务器,一台作为主服务器(Master),负责处理所有的业务请求,另一台作为从服务器(Slave),实时同步主服务器的数据。当主服务器出现故障时,从服务器会自动接管主服务器的工作,保证业务的连续性。
- 优点
- 数据一致性高:从服务器实时同步主服务器的数据(基于异步同步时可能存在毫秒级延迟),能保证数据的一致性和完整性。
- 实现简单:架构相对简单,易于理解和部署,对硬件要求不高,成本较低。
- 故障转移快:当主服务器出现故障时,从服务器能快速接管,业务中断时间较短。
- 缺点
- 资源利用率低:从服务器在正常情况下处于待命状态,只有主服务器处理业务,资源未得到充分利用。
- 主服务器压力大:所有业务请求都由主服务器处理,可能会成为性能瓶颈。
- 单点故障风险:虽然有从服务器,但如果主服务器的故障导致数据丢失,可能会影响业务。
2.2 双机主主
模式
- 模式介绍:双机主主模式中,两台服务器都是主服务器,都可以处理业务请求。它们之间相互监控,实时同步数据。当一台服务器出现故障时,另一台服务器会承担起所有的业务处理工作。
- 优点
- 资源利用率高:两台服务器都能处理业务,提高了硬件资源的利用率。
- 性能较好:业务请求可以分担到两台服务器上,提升了系统的整体性能和处理能力。
- 可靠性高:两台服务器互为备份,任何一台出现故障,另一台都能继续提供服务,减少了单点故障的风险。
- 缺点
- 数据同步复杂:两台服务器都要进行数据的写入和同步,数据同步机制相对复杂,可能会出现数据冲突,需要更复杂的处理来保证数据一致性。
- 成本较高:需要两台性能较好的服务器,硬件成本较高。
- 管理难度大:涉及到两台服务器的配置和协调,管理难度相对较大。
2.3 多点集群
模式
- 模式介绍:多点集群模式是由多个节点(服务器)组成的集群系统,这些节点通过网络相互连接,共同处理业务请求。集群中有一个或多个管理节点,负责监控和管理整个集群的运行状态,其他节点作为工作节点,分担业务处理任务。当某个节点出现故障时,管理节点会自动将其任务分配到其他正常节点上,实现负载均衡和高可用性。
- 优点
- 高可扩展性:可以根据业务需求方便地添加节点,扩展系统的处理能力和存储能力。例如,当业务量增加时,可以简单地添加更多的工作节点,管理节点会自动将其加入到集群中,实现负载均衡和高可用性。
- 高可用性:多个节点相互备份,即使多个节点出现故障,只要还有部分节点正常工作,系统就能继续运行,可靠性极高。
- 负载均衡:能够将业务请求均匀地分配到各个节点上,避免单点出现过载,提高系统整体性能。
- 缺点
- 架构复杂:需要复杂的网络配置和管理,由于涉及到多个节点的协调和通信,因此部署和维护难度较大。
- 成本较高:需要多个服务器以及相应的网络设备,软件授权等成本也较高。
- 数据一致性挑战大:因为多个节点同时处理数据,每个节点都有可能对数据进行修改,这就需要采用分布式事务等复杂技术来解决数据一致性问题。
三、Docker 环境实践
3.1 实验环境准备
- 安装docker环境
- 下载实战例子:https://gitee.com/bonaparte/nginx_keepalive.git
3.2 主从模式部署
构建相关镜像并启动容器命令如下:
# 执行如下命令构建相关镜像
docker-compose -f ./docker-compose.yml up --build
# 后台启动容器
docker-compose -f ./docker-compose.yml up -d
3.3 高可用验证测试
主节点URL访问测试
# 主节点暴露端口为 7500
curl http://localhost:7500/
从节点URL访问测试
# 从节点暴露端口为 7501
curl http://localhost:7501/
高可用URL访问测试
# 虚拟IP(VIP)暴露端口为 7502
curl http://localhost:7502/
该命令用于模拟主节点故障,暂停主节点容器。
# 模拟主节点故障
docker pause nginx_keepalive-nginx_master-1
# 查看高可用URL访问测试结果
curl http://localhost:7502/
# 查看主节点URL访问测试结果
curl http://localhost:7500
该命令用于模拟主节点故障恢复,恢复主节点容器的运行。
# 模拟主节点故障恢复
docker unpause nginx_keepalive-nginx_master-1
# 查看高可用URL访问测试结果
curl http://localhost:7502/
# 查看主节点URL访问测试结果
curl http://localhost:7500
相关文章:
高可用架构:Keepalived、Nginx与Docker深度解析
本文深入解析了Keepalived技术,阐述其基于VRRP协议实现高可用的核心功能,包括虚拟路由器冗余、健康检查、负载均衡集成及脚本执行与通知。同时,设计了Nginx高可用方案,涵盖双机主从、主主及多点集群模式,分析其优缺点。…...
127.0.0.1本地环回地址(Loopback Address)
127.0.0.1 是计算机网络中的一个特殊IPv4地址,称为本地环回地址(Loopback Address),主要用于以下用途: 1. 基本定义 本地主机(Localhost):该地址始终指向当前正在使用的计算机本身&a…...
Windows Terminal 美化增强攻略 2.0:打造个性化高效开发环境(快捷键介绍、编程语言环境、starship美化、高效命令行工具)
前言:从 1.0 到 2.0,终端美化进阶之旅 去年,我曾在文章《使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD》中分享了 Windows 终端的美化方案。那时,我选择了 oh-my-posh 作为核心工具,虽然效果不错ÿ…...
网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序
网络出故障时,四大表 (MAC表、ARP表、路由表、转发表) 怎么查 说正题之前,我们先来假设一个场景: 场景假设: 一台华为设备突然上不了网,或者访问某个 IP 不通。 你会怎么排查? 别慌,兄弟&a…...
第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型
Unity Shader的学习笔记 第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型 文章目录 Unity Shader的学习笔记前言一、高光反射光照模型1.逐顶点光照① Properties② 顶点着色器中计算高光specular③ Fallback效果展示 2.逐像素光照① 片元着色器输出结构体…...
《从 MyBatis-Plus 到 Elasticsearch:一个后端的性能优化踩坑实录》
最近接手了一个老项目,单表查询用 MyBatis-Plus 写得飞起,但一到多表关联模糊搜索就卡成 PPT。痛定思痛,决定引入 Elasticsearch 优化查询性能,结果踩坑无数……记录下这次从 ORM 到搜索引擎的升级历程&#…...
docker 常用指令整理
以下是Docker常用操作指令的整理,分为镜像管理、容器操作、网络配置、数据卷管理、Docker Compose及系统维护等部分: 一、镜像管理 拉取镜像 docker pull [镜像名]:[标签] # 默认标签为latest # 示例:拉取Ubuntu 20.04镜像 docker pull ubun…...
密码格式校验c#和js两种
if (!IsValidPassword(xinmima)) { //在前端校验过了,这里不需要 ClientScript.RegisterStartupScript(GetType(), "", "alert(新密码必须至少8位,且至少包含大写字母、小写字母、数字、特殊符号中的3种)", true); } /// <summary> …...
线程控制
POSIX线程库 与线程有关的函数构成了⼀个完整的系列,绝⼤多数函数的名字都是以“pthread_”打头的要使⽤这些函数库,要通过引入头文件<pthread.h>链接这些线程函数库时要使⽤编译器命令的“-lpthread”选项 eg: g -o $ $^ -lpthread这个pthread库…...
WebView 与 JavaScript 的交互
从技术深度、安全意识 和 实战经验来介绍。以下是分层次的回答策略,从基础到高级逐步深入: 1. 基础实现 回答要点: "Android 和 JavaScript 的交互主要通过 WebView 的两种方式实现: Android 调用 JS: kotlin we…...
解决word中公式大小不一问题
文章目录 前言一、初见端倪二、解决方法三、题外话 前言 记录一下在 word 中使用 mathtype 编辑公式时出现的公式字体大小不一的问题的解决方法。 一、初见端倪 最近在 word 中使用 mathtype 进行公式编辑,刚开始编辑的公式并没有什么问题,过了几天后再…...
Haply与PickNik合作:Inverse3三轴力反馈控制器集成MoveIt Pro,提升机器人操作精度
Haply Robotics与PickNik Robotics合作,将Inverse3力反馈控制器集成到MoveIt Pro平台,优化人机交互,提升机器人操作精度。实时力反馈技术使操作者感知机器人与环境的交互力,增强远程操作的精确度和灵敏度,推动机器人技…...
【Linux笔记】文件的传输(scp、rsync、归档、压缩)
一、sshd 1、概念 在Linux系统中,文件传输常依赖于SSH协议(Secure Shell),而sshd(OpenSSH Daemon)是负责处理SSH连接的后台服务程序。通过sshd,用户可以在加密的通道中进行安全的远程登录、命…...
单位矩阵的特点
《单位矩阵的特性与重要性质》 单位矩阵是一种特殊的方阵,具有以下特点: 主对角线元素全为 1:单位矩阵 I n I_n In是一个 n n n\times n nn的方阵,其主对角线(从左上角到右下角的对角线)上的元素均为 …...
AI处理漫画转视频
AI处理漫画转视频 第一步 从漫画PDF文件读取图片 第二部 图片信息剪裁 第三步 OCR识别处理图片,获取漫画对应的文本信息 第四步 运用阿里云通义大模型千文处理提取的文本信息更符合文本语言 第五步 运用FishVideo大模型将文本信息转变为对应的语音 第六步 图片转视…...
三维空间中的离散曲线段匹配方法
基于离散 F r e ˊ c h e t Fr\{e}chet Freˊchet距离实现工程中的三维曲线段匹配 在自动驾驶系统中, 准确匹配相邻车道线是实现安全导航, 变道决策和路径规划的核心任务. 由于道路网络存在交叉口, 弯道, 多车道并行等复杂场景, 如何衡量目标车道曲线与其他候选车道线的空间关…...
HTML的Canvas元素
<Canvas>元素 <Canvas>元素是HTML5引入的一个强大的绘图元素,它允许通过 JavaScript 在网页上动态绘制图形、动画和交互式内容。需要注意的是,<Canvas>元素只是图形的一个容器,绘制图形必须使用Javascript。 空画布 <…...
Django学习记录-2-数据库
Django学习记录-2-数据库 文章目录 Django学习记录-2-数据库参考贴连接数据库后台查看数据库后台改为中文 table增删改查Python使用hash保持一致 虽然网上教程都很多,但是感觉自己记录一下才属于自己,之后想找也方面一点,文采不佳看的不爽可绕…...
qq邮箱群发程序
1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击,进入UI编辑界面: 点击第三步后进入QT的UI设计界面,通过点击按钮进行界面设计,设计后进行保存到当前Pycharm…...
spring mvc 中 RestTemplate 全面详解及示例
RestTemplate 全面详解及示例 1. RestTemplate 简介 定义:Spring 提供的同步 HTTP 客户端,支持多种 HTTP 方法(GET/POST/PUT/DELETE 等),用于调用 RESTful API。核心特性: 支持请求头、请求体、URI 参数的…...
openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0
openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0 1、配置 yum 华为源2、安装依赖3、源码安装 openssl 1.0.1u3.1、openssl 1.1.1 降级到 openssl 1.0.1 4、源码安装 python 2.75、使用 pip3 安装 Python 相关依赖6、编译安装 Greenplum-db 6.20.06.1、修改配置6.2、基于…...
天锐蓝盾多模式加密技术,构筑企业数据安全堡垒
一旦企业发生数据泄露,将遭受严重的经济损失,声誉也会一落千丈,甚至可能在激烈的竞争中陷入绝境。那么,企业究竟该如何守护敏感数据,筑牢数据安全的 “护城河” 呢?天锐蓝盾数据泄露防护系统给出了全面且专…...
可编辑37页PPT | 建筑行业DeepSeek日常实操培训
荐言摘要:随着人工智能技术的快速发展,DeepSeek作为一款具有创新性的AI工具,正逐步渗透到建筑行业的各个环节。为帮助建筑行业从业者掌握DeepSeek的核心功能与应用技巧,提升工作效率与决策能力,特推出本次建筑行业Deep…...
C语言指针和函数
文章目录 C语言指针和函数一、指针与函数1.传递指针给函数2.指针函数3.函数指针4.回调函数 二、多级指针三、空指针四、野指针 C语言指针和函数 在C语言的编程领域中,指针是一把强大而又危险的“双刃剑”。它不仅能够直接操作内存,提升程序的运行效率&a…...
左右开弓策略思路
一、策略概述 本策略是一种基于多种技术指标的复杂交易策略,包括自定义指标计算、过滤平滑处理以及交易信号生成。 该策略通过不同的交易平台代码段实现,旨在通过分析历史价格数据来预测未来价格走势,并据此生成交易信号。 二、主要技术指标…...
mapbox基础,加载F4Map二维地图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性二、🍀F4Map 简介2.1 ☘️技术特点2.2 ☘️核…...
doxygen自动生成文档,注释容易错位的补充
开发过程中,为了简化api开发文档的编写工作,我们可以使用doxygen的标注来进行文档注释,最后自动化的生成相关文档: 参考:https://developer.aliyun.com/article/935529 参考:https://blog.csdn.net/qq_3459…...
git操作0409
git init git add. git commit -m "Initial commit" git checkout 7890abc # 切换到旧版本代码(只读) git checkout master # 切回最新版本 git checkout -b new_branch 789abcd # 或 git checkout -b new_branch HEAD~3 很重点 git reflog …...
电阻的额定功率与额定电压详解
一、基本定义 额定功率(Rated Power) 定义:电阻在长期安全工作时允许消耗的最大功率,超过此值可能导致过热甚至烧毁。 公式: P I R 或 P V / R (I:电流,V:电压&#…...
【后端开发】SpringBoot与Spring MVC
文章目录 创建项目目录介绍Spring MVCservletMVCSpring MVCSpringboot与Spring MVC的区别Spring MVC交互 创建项目 新建一个Springboot项目 对应描述 目录介绍 src/main/java:Java 源代码 src/main/resources:为静态资源或配置⽂件: ----…...
如何禁用 PyCharm 的测试功能
如何禁用 PyCharm 的测试功能? PyCharm 的测试功能默认会自动检测项目中符合命名规则的测试文件(如以 test_ 开头的文件)并关联测试框架。若需禁用该功能,可通过以下方法操作: 方法一:全局禁用默认测试框架…...
【Spiffo】光速项目:LVGL v9框架下的MIPI简易相机_Part2
简介 本期接上回的工程部署讲一下整个工程的框架逻辑以及相关的模块作用机制,包括mipi抓图像以及后续传递到显示屏的链路逻辑等。 一、核心逻辑 1、如何抓到图像数据并显示 首先能够从摄像头捕获画面并显示是一个相机最起码要能实现的功能。所以先要搞清楚整个链…...
pycharm编译部署智能合约(solcx与web3搭配)
solcx 是一个 python 库,提供了 solidity 编译器的 python 绑定。它使开发者能够直接从 python 中编译 solidity 源代码,生成以太坊智能合约的字节码(Bytecode)和 ABI(Application Binary Interface)。这个库通常用于与 Web3 库配合使用,帮助开发者进行智能合约的部署、…...
微信小程序中的openid的作用
微信小程序中的openid的作用 引言 在当今数字化时代,用户体验成为了产品成功与否的关键因素之一。微信小程序作为连接用户与服务的重要桥梁,在提升用户体验方面发挥着重要作用。其中, openid(开放身份标识符)是微信小…...
AAAI 2025新研究!大语言模型+MARL=论文新思路?
最新研究显示,多智能体强化学习(MARL)正迎来一系列技术革新,让AI系统真正具备“群体智能”。同济大学团队提出的动态图通信网络(TGCNet),通过Transformer建模智能体间的动态协作关系,…...
旅行世界宠物养殖合成游戏源码
旅行世界宠物养殖合成游戏源码,游戏养成类系统,用户能够通过养狗和参加其他活动获取算力,每日任务不断更新,完结即可收取算力,算力能够兑换现金红包。 邀请好友得两级活跃收益提成,徒弟B100.%,徒…...
列表之链表_C
数据结构(邓俊辉):列表及相关概念_listnodeposi-CSDN博客 #include <stdio.h> #include <stdlib.h>// 定义Rank类型为int typedef int Rank;// 定义ListNode结构体 typedef struct ListNode {int data;struct ListNode* pred;st…...
图解Java设计模式
1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍...
CCF GESP Python编程 四级认证真题 2025年3月
Python 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D C B C D C A A D B D A C B C 1 单选题(每题 2 分,共 30 分) 第 1 题 2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是…...
2025最新系统 Git 教程(四)
2.6 Git 基础 - 打标签 打标签 像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 在本节中…...
数学知识——欧拉函数
欧拉函数 1 ∼ N 1∼N 1∼N 中与 N N N互质的数的个数被称为欧拉函数,记为 ϕ ( N ) \phi(N) ϕ(N)。 欧拉函数 对于 N p 1 α 1 p 2 α 2 p 3 α 3 . . . p k α k Np_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3}...p_k^{\alpha_k} Np1α1p2α2p3α3…...
Dify 识别 “subject“ and “intention“ 的提示词
Dify 识别 "subject" and "intention" 的提示词 内容如下: You need to decompose the users input into "subject" and "intention" in order to accurately figure out what the users input language actually is. Not…...
Hi168云平台部署Ansible学习环境
前言 之前发布的文章已经介绍过了在Hi168云平台部署openEuler学习环境,那么既然能部署openEuler了,其他的各类学习环境自然也就可以部署了。 Ansible简介 Ansible 是一个运维自动化工具,可以通过 SSH 协议对远程主机进行管理,对…...
Anacond虚拟环境里安装GPU版本Pytorch
CUDA/cudnn/CUDAToolkit简单区分 pytorch与cuda关系简单介绍 pytorch是一个深度学习的框架,能够调用cuda进行gpu加速。一般来说你的电脑里是有相关cuda的驱动的(可用nvidia-smi命令验证,能运行就说明有,不能运行去搜索安装&#…...
FRP的proxies只是建立通道,相当于建立与服务器沟通的不同通道而不是直接将路由器与服务器云端沟通
没有更好的办法了吗,我看frpc.toml的里面可以设置两个proxies那我esp32的监听端口设置在frpc.toml里面它不也能跟云服务器建立联系吗,比如远程与本地端口都配置为5112那云服务器接收到的5112访问会以frp配置的本地端口5112转发到frp客户端的路由器&#…...
Android开发鸿蒙环境问题记录
Android开发鸿蒙环境问题记录 (用于记录开发中鸿蒙环境差异及问题,持续更新) 2025.4.9 问题 使用android.intent.action.TIME_TICK广播时,动态注册在鸿蒙4.0系统正常,但在鸿蒙3.0系统无法接收广播。 解决方案 在An…...
在 WSL2的 Ubuntu 20.04 中安装 Docker
WSL1升级到WSL2参考:WSL1升级到WSL2注意事项-CSDN博客 1. 更新系统包 首先,确保系统包是最新的: sudo apt update sudo apt upgrade -y sudo apt upgrade -y 是 Ubuntu/Debian Linux 系统中的一条命令,用于升级所有已安装的软…...
LeetCode 252 会议室题全解析:Swift 实现 + 场景还原
文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在这篇文章中,我们将深入探讨LeetCode第252题“会议室”的问题,提供一个用Swift编写的解决方案,并结合实际场景进行分析。通过这篇文章,你将…...
Postman的内网使用教程
在软件开发和测试过程中,接口测试是确保系统间通信正常的重要环节。当处于内网环境,无法直接访问外网资源时,如何高效地使用Postman进行接口测试也逐渐成为许多开发者关心的问题。 前期准备 安装Postman 从官方网站下载并安装最新版本的Pos…...
【软件测试】Postman中如何搭建Mock服务
在 Postman 中,Mock 服务是一项非常有用的功能,允许你在没有实际后端服务器的情况下模拟 API 响应。通过创建 Mock 服务,你可以在开发阶段或测试中模拟 API 的行为,帮助团队成员进行前端开发、API 测试和集成测试等工作。 Mock 服…...