rust的axux框架开启负载均衡和重启自身的方法-会议签到的调优

开启负载均衡和重启自身

  • 更换axum后台的意外
  • 解决的尝试
    • 在caddy反代,使用负载均衡,加多一个节点
    • axum主程序 ip映射信息做全局共享
    • axum重启自身刷新全局共享配置

前期刚实现了rust的后台关键业务.结果出现了两类大问题停止服务.在正用着的时候,出现很多意外,真是刺激…

更换axum后台的意外

1, ip2sta的配置没有在原flask服务重启后,没有导入到redis,导致rust后台无法取到,修改原flask初始redis的代码才解决, 停服一天,
2,rust服务,工作进程被我误退出了,结果所有的地点无法访问签到. 停服一天.
3,开启12小时观察到的,新的rust所在主机,没有使用东8区, 只是8点前无法使用业务数据.修改时区,未再造成停服.
下面说下负载均衡和动态监测可以解决这个问题,同时,

解决的尝试

在caddy反代,使用负载均衡,加多一个节点

更新了Caddyfile文件的handle_path改为handle,避免了一次无用的rewrite.

   redir /ck/test  /rk/test/0handle  /rk/*   {# handle_path /rk/* # rewrite * /rk{path}reverse_proxy  {header_up Host {host}header_up X-Real-IP {remote}health_uri /health_interval 5shealth_timeout 1sto  10.180.133.35:6055  192.168.11.179:3001
}}

目测现在有两处提供服务,并且在一处断开后,只使用能用的那个.

axum主程序 ip映射信息做全局共享

上个文章

Android后端签到flask迁移到rust的axum的过程-签到性能和便携 ,ip2sta,加载到axum的启动配置.这样不要每次redis取值.

/*** 连接connection_redis*/
fn connection_redis() -> redis::RedisResult<Connection> {let client = redis::Client::open(REDURL)?;let con = client.get_connection()?;Ok(con)
}fn init_app_config() -> HashMap<String, String> {let mut con = connection_redis().ok().unwrap();// 测试是否成功连接Reidslet keys:Vec<String>= con.hkeys("ip2sta" ).ok().unwrap();let mut map=HashMap::new(); for i in keys{let v:String= con.hget("ip2sta", &i).ok().unwrap();map.insert(i,v); }map
}
lazy_static! {static ref IP2STA: HashMap<String,String> = init_app_config(); }
#[tokio::main]
async fn main() {

在main主任务启动以前加载一次.就可以如下使用

  .route("/rk/test/",get(somehandle)).......
async fn somehandle(){
match  IP2STA.get(&cip) {Some(sta)=>  pobsta( State(pool.clone()),formatted,sta,person).await ,None => Ok(Html(format!("请联系管理员{:?}未设置~!",&cip))),}

这造成一个问题,ip2sta无法使用最新的数据.
虽然很久不会更新这个底层数据,但是手动重启不是合适的风格.必须要能让后台自动加载新信息…

axum重启自身刷新全局共享配置

https://zhuanlan.zhihu.com/p/649783802
Axum笔记:配置管理
这里提供了很多刷新的方式,其中state的方式已经被pool占有,lazy_static!是本文用的,剩下的我不理解,
下面是我提供的刷新方式,重启自身
在某个handle启动一个新spawn,即调用如下函数.


use tokio::time::{sleep, Duration}; 
use std::{process,env};async  fn restartme(){let delay = Duration::from_millis(50);// 在延时后启动新进程tokio::spawn(async move {// 等待延时sleep(delay).await;// 获取程序自身的路径let me = env::current_exe().expect("Failed to get current exe path");// 重启程序let status = process::Command::new(me).spawn();match status {Ok(_child) => {// 如果成功,则退出当前实例std::process::exit(0);}Err(e) => {// 如果重启失败,打印错误并退出println!("Failed to restart: {}", e);std::process::exit(1);}}});
}

这样并不容易,因为当前process肯定占有了tcp端口. 所有子线程的成功判断,应该在tcp还未开始时.而且必须在父线程必须释放端口后再打开,可能tokia的axum 使用了,等待重试,和恰好的判断时机,让程序也就是web服务自己完成了配置加载和重启自身.
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解数据库索引:原理、分类与优化

目录 1. 索引基础1.1 索引的工作原理 2. 最左匹配原则2.1 什么是最左匹配原则&#xff1f;2.2 示例说明2.3 最左匹配原则的图示 3. 索引分类3.1 按数据结构分类3.2 按索引列数分类3.3 按唯一性分类3.4 按存储方式分类 4. 聚集索引与非聚集索引的区别4.1 聚集索引4.2 非聚集索引…

Three.js相机Camera控件知识梳理

原文&#xff1a;https://juejin.cn/post/7231089453695238204?searchId20241217193043D32C9115C2057FE3AD64 1. 相机类型 Three.js 主要提供了两种类型的相机&#xff1a;正交相机&#xff08;OrthographicCamera&#xff09;和透视相机&#xff08;PerspectiveCamera&…

一条线上的点

给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 提示&#xff1a; 1 < points.length < 300points[i].length 2-104 < xi, yi < 104points 中的所有点 互不相同 解析&#xff1a;使用斜…

XX服务器上的npm不知道咋突然坏了

收到同事的V&#xff0c;说是&#xff1a;182上的npm不知道咋突然坏了&#xff0c;查到这里了&#xff0c;不敢动了。 咱一定要抓重点&#xff1a;突然坏了。这里的突然肯定不是瞬间&#xff08;大概率是上次可用&#xff0c;这次不可用&#xff0c;中间间隔了多长时间&#x…

HALCON 算子 之 形态学操作算子

文章目录 什么是形态学操作&#xff1f;为什么要形态学操作&#xff1f;怎么形态学操作&#xff1f;腐蚀 —— Erosionerosion1erosion_circle&#xff1a;erosion_rectangle1&#xff1a; 膨胀 —— Dilationdilation1dilation_circledilation_rectangle1 打开 —— Openingop…

pytest入门九:feature

fixture是pytest特有的功能&#xff0c;用以在测试执行前和执行后进行必要的准备和清理工作。使用pytest.fixture标识&#xff0c;定义在函数前面。在你编写测试函数的时候&#xff0c;你可以将此函数名称做为传入参数&#xff0c;pytest将会以依赖注入方式&#xff0c;将该函数…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

136.WEB渗透测试-信息收集-小程序、app(7)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;135.WEB渗透测试-信息收集-小程序、app&#xff08;6&#xff09; 进入之后我们通过输入…

K近邻原理和距离

K近邻 基本思想欧氏距离算法流程代码基于近邻用户的协同过滤基于近邻物品的协同过滤杰卡德相似度 基本思想 我们根据涂色样本点和未涂色样本点 X 的距离给涂色样本点编号1-6&#xff0c;即&#xff1a;1号样本点距离X最近&#xff0c;其余次之。 那么问题来了&#xff1a;样本…

模型 A/B测试(科学验证)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。控制变量法。 1 A/B测试的应用 1.1 Electronic Arts&#xff08;EA&#xff09;《模拟城市》5游戏网站A/B测试 定义目标&#xff1a; Electronic Arts&#xff08;EA&#xff09;在发布新版《模拟城…

Git merge 和 rebase的区别(附图)

在 Git 中&#xff0c;merge 和 rebase 是两种用于整合分支变化的方法。虽然它们都可以将一个分支的更改引入到另一个分支中&#xff0c;但它们的工作方式和结果是不同的。以下是对这两者的详细解释&#xff1a; Git Merge 功能&#xff1a;合并分支&#xff0c;将两个分支的…

耐蚀镍基合金的焊接技术与质量控制

耐蚀镍基合金是一类在腐蚀环境中具有优异性能的合金材料&#xff0c;广泛应用于化工、海洋工程、石油天然气等领域。其焊接技术与质量控制对于确保合金的使用性能和安全性至关重要。以下是对耐蚀镍基合金焊接技术与质量控制的详细探讨。 一、焊接技术 焊条选择 耐蚀镍基合金的焊…

机器视觉与OpenCV--01篇

计算机眼中的图像 像素 像素是图像的基本单位&#xff0c;每个像素存储着图像的颜色、亮度或者其他特征&#xff0c;一张图片就是由若干个像素组成的。 RGB 在计算机中&#xff0c;RGB三种颜色被称为RGB三通道&#xff0c;且每个通道的取值都是0到255之间。 计算机中图像的…

操作系统(14)请求分页

前言 操作系统中的请求分页&#xff0c;也称为页式虚拟存储管理&#xff0c;是建立在基本分页基础上&#xff0c;为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能的一种内存管理技术。 一、基本概念 分页&#xff1a;将进程的逻辑地址空间分成若干个大小相等的页&am…

git企业开发的相关理论(一)

目录 一.初识git 二.git的安装 三.初始化/创建本地仓库 四.配置用户设置/配置本地仓库 五.认识工作区、暂存区、版本库 六.添加文件__场景一 七.查看 .git 文件/添加到本地仓库后.git中发生的变化 1.执行git add后的变化 index文件&#xff08;暂存区&#xff09; log…

wxpython图形用户界面编程

wxpython图形用户界面编程 一、wxpython的基础 1.1 wxpython的基础 作为图形用户界面开发工具包 wxPython&#xff0c;主要提供了如下 GUI 内容&#xff1a; 窗口。控件。事件处理。布局管理。 1.2 wxpython的类层次机构 1.3 wxpython的安装 Windows 和 macOS 平台安装&a…

水仙花数(流程图,NS流程图)

题目&#xff1a;打印出所有的100-999之间的"水仙花数"&#xff0c;并画出流程图和NS流程图。所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#…

不配置python环境,直接用PyCharm就可以?

有的伙伴可能遇到不安装python环境只安装pycharm也可以进行运行代码。 所以自认为是不需要解释器就可以运行&#xff1f; 这个是不现实的&#xff0c;有很多伙伴可能是安装了Pycharm&#xff0c;但Pycharm看你电脑上没有解释器&#xff0c;所以在安装的时候给你默认安装在C盘…

前端面试汇总(不定时更新)

目录 HTML & CSS1. XML、HTML、XHTML 有什么区别&#xff1f;⭐2. XML和JSON的区别&#xff1f;3. 是否了解W3C的规范&#xff1f;⭐4. 什么是语义化标签&#xff1f;⭐⭐5. 行内元素和块级元素的区别&#xff1f;⭐6. 行内元素和块级元素的转换&#xff1f;⭐7. 常用的块级…

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…