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.pswp.cn/web/63249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63249.shtml
英文地址,請注明出處:http://en.pswp.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&…

Bernstein-type inequality (BTI)

參見論文&#xff1a; Dual-Functional Artificial Noise (DFAN) Aided Robust Covert Communications in Integrated Sensing and Communications 理論 \boxed{} ?用于加框 Lemma 2. (BTI): For any A ∈ C N N \mathbf{A} \in\mathbb{C}^{N\times N} A∈CNN, b ∈ C N …

一條線上的點

給你一個數組 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…

GNSS定位局限性與綜合PNT及5G定位技術研究

摘要 本文主要介紹了GNSS定位技術的系統組成與原理、發展歷程、應用領域及現狀&#xff0c;并分析了其存在的局限性&#xff0c;如信號遮擋、多路徑效應、大氣層干擾等。文章還探討了綜合PNT技術的體系架構、多源信息融合方法以及智能化算法在PNT中的應用&#xff0c;強調了綜…

/hbase/oldWALs 文件

/hbase/oldWALs 是 HBase 中的一個目錄&#xff0c;用于存儲那些不再需要用于恢復目的的 WAL&#xff08;Write-Ahead Log&#xff09;文件。這些文件在 HBase 確認所有的數據都已經從 MemStore 持久化到 HFile 之后&#xff0c;會被移動到這個目錄。 /hbase/oldWALs 目錄中的…

HALCON 算子 之 形態學操作算子

文章目錄 什么是形態學操作&#xff1f;為什么要形態學操作&#xff1f;怎么形態學操作&#xff1f;腐蝕 —— Erosionerosion1erosion_circle&#xff1a;erosion_rectangle1&#xff1a; 膨脹 —— Dilationdilation1dilation_circledilation_rectangle1 打開 —— Openingop…

[金盾杯 2024] PWN 復現

好長時間不作題了&#xff0c;在復現平臺上看到這個比賽&#xff0c;作了一下&#xff0c;題過于簡單了。不過密碼一言難盡。 Orange 要說libc-2.23有多老&#xff0c;我一開始學PWN的時候還有不少&#xff0c;這兩年幾乎不見了。一些比賽估計是拿的舊題。 遠看像個堆題&…

pytest入門九:feature

fixture是pytest特有的功能&#xff0c;用以在測試執行前和執行后進行必要的準備和清理工作。使用pytest.fixture標識&#xff0c;定義在函數前面。在你編寫測試函數的時候&#xff0c;你可以將此函數名稱做為傳入參數&#xff0c;pytest將會以依賴注入方式&#xff0c;將該函數…

uniapp Vue3 語法實現瀏覽器中音頻錄制、停止、保存、播放、轉碼、實時音頻輸出

一、引言 在現代 Web 應用開發中,音頻處理功能變得越來越重要。本文將詳細介紹如何使用 uniapp 結合 Vue3 語法在瀏覽器環境中實現音頻錄制、停止、保存、播放、轉碼以及實時音頻輸出等一系列功能。通過深入剖析代碼結構和功能實現細節,幫助讀者全面理解和掌握相關技術,以便…

【jpa】會什么jpa會自動新建一個hibernate_sequence表

目錄 1. 說明2. 主鍵生成策略3. hibernate_sequence表的創建4. 如何避免自動創建hibernate_sequence表 1. 說明 1.JPA&#xff08;Java Persistence API&#xff09;在默認情況下&#xff0c;如果使用Hibernate作為持久化框架&#xff0c;并且沒有顯式指定主鍵生成策略&#x…

秒優科技-供應鏈管理系統 login/doAction SQL注入漏洞復現

0x01 產品簡介 秒優科技提供的供應鏈管理系統,即秒優SCM服裝供應鏈管理系統,是一款專為服裝電商企業設計的全方位解決方案。是集款式研發、訂單管理、物料管理、生產管理、工藝管理、收發貨管理、賬單管理、報表管理于一體的服裝電商供應鏈管理解決方案。它涵蓋了從企劃到開…

【TF-IDF】Hugging Face Model Recommendation System

利用了機器學習技術的模型檢索 TF-IDF (Term Frequency-Inverse Document Frequency) 文本特征提取例子This project is a Hugging Face Model Recommendation System designed to assist users in discovering the most suitable models based on their task descriptions. Th…

136.WEB滲透測試-信息收集-小程序、app(7)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;135.WEB滲透測試-信息收集-小程序、app&#xff08;6&#xff09; 進入之后我們通過輸入…

samout llm解碼 幻覺更低更穩定

這段代碼定義了一個簡單的對話生成系統&#xff0c;包括模型加載、詞匯表加載、以及基于給定提示生成文本的功能。下面是對代碼的解析&#xff1a; load_model_and_voc(device"cpu"): 該函數用于加載預訓練的模型和詞匯表&#xff08;vocabulary&#xff09;。它首先…

K近鄰原理和距離

K近鄰 基本思想歐氏距離算法流程代碼基于近鄰用戶的協同過濾基于近鄰物品的協同過濾杰卡德相似度 基本思想 我們根據涂色樣本點和未涂色樣本點 X 的距離給涂色樣本點編號1-6&#xff0c;即&#xff1a;1號樣本點距離X最近&#xff0c;其余次之。 那么問題來了&#xff1a;樣本…

Transformer 中 Self-Attention 的二次方復雜度(Quadratic Complexity )問題及改進方法:中英雙語

Transformer 中 Self-Attention 的二次方復雜度問題及改進方法 隨著大型語言模型&#xff08;LLM&#xff09;輸入序列長度的增加&#xff0c;Transformer 結構中的核心模塊——自注意力機制&#xff08;Self-Attention&#xff09; 的計算復雜度和內存消耗都呈現二次方增長。…

模型 A/B測試(科學驗證)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思維模型目錄。控制變量法。 1 A/B測試的應用 1.1 Electronic Arts&#xff08;EA&#xff09;《模擬城市》5游戲網站A/B測試 定義目標&#xff1a; Electronic Arts&#xff08;EA&#xff09;在發布新版《模擬城…

Java修飾符詳解:從基礎到高級用法

在Java編程語言中&#xff0c;有許多修飾符可以使用&#xff0c;它們大致可以分為兩大類&#xff1a;訪問控制修飾符、其他類型的修飾符。 這些修飾符主要用于指定類、方法或變量的特性&#xff0c;并且通常位于聲明語句的開頭部分。下面通過一些示例來進一步說明這一點&#…