国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

23. 從零用Rust編寫正反向代理,流控小姐姐的溫柔一刀!

這篇具有很好參考價值的文章主要介紹了23. 從零用Rust編寫正反向代理,流控小姐姐的溫柔一刀!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

wmproxy

wmproxy已用Rust實現(xiàn)http/https代理, socks5代理, 反向代理, 靜態(tài)文件服務(wù)器,四層TCP/UDP轉(zhuǎn)發(fā),內(nèi)網(wǎng)穿透,后續(xù)將實現(xiàn)websocket代理等,會將實現(xiàn)過程分享出來,感興趣的可以一起造個輪子

項目地址

國內(nèi): https://gitee.com/tickbh/wmproxy

github: https://github.com/tickbh/wmproxy

溫柔的小姐姐

??我的名字叫 流控,至于我的工作你們看到我的名字也想必很清楚,我被創(chuàng)造出來為了的這世界更美好,期望這世界永遠不會堵車,所以他們稱我為溫柔的小姐姐。

與數(shù)據(jù)不得不說的故事

??數(shù)據(jù)是個急性子的家伙,每次看他總是充充忙忙的帶著一大推的大部分,想在我這里橫沖直撞的。這就不得不說上一次他那急忙的模樣了。

??還記得上次他帶著一大幫的兄弟,成千上萬個的,知道的人知道他們在護送重要資料,不知道的還以為他們?nèi)ゴ蛘棠兀?/p>

??我守護的是一個廣場,還有廣場后面的一條路。

??那一次他帶著兄弟來的太快,就跟我說:“流控姐姐,快點通往廣場的門打開,我這邊有兄弟們來了”。

??我就把門打開,讓他帶著他的兄弟們過來快速的進入廣場。

??不一會兒廣場慢慢的有點擠了起來,他就跟我說:“你快點把廣場前面的路開大點,后面的兄弟來的太快,這條路又不能快速的通過,會把你的廣場擠滿的”。

??我就說:“不行哦,我接到上級的指令,通知說現(xiàn)在這條路只能開這么大,每秒通過100人最多了(限速1M/S),前面那條大路現(xiàn)在的人太多了,你這邊要是太多的人會全部堵在一起的?!?/p>

??他就急忙的問:“那怎么辦,我現(xiàn)在數(shù)據(jù)很重要,也很急,你看旁邊那些無關(guān)的也一直在占用著路,你能不能向你的上級反饋一下?”

??我就說:“我現(xiàn)在就幫你反饋一下,但是要等下上級的調(diào)度哦。暫時你還是只能通過這么多!”

??我轉(zhuǎn)身向上級說:“這邊有大量的重要數(shù)據(jù)擁堵在廣場這,他們請求調(diào)高優(yōu)先級,提高緩沖區(qū)及通行速度?!?/p>

??上級答:“我現(xiàn)在去協(xié)調(diào)一下,把其它的數(shù)據(jù)叫他們先緩緩,你叫他先耐心等待下”

??眼看著上級的指定還沒有下來,但是廣場上已經(jīng)快擠滿了人了,我趕緊去那個廣場的入口處理,我就把那個廣場前的那個閘機打開,不讓新的人進來。要不然等下廣場出事故了。

??數(shù)據(jù)兄弟看著我,我也表示我暫時也無能為力,我說:“讓你后面的兄弟緩緩,我這廣場暫時容納不下那么多人了(數(shù)據(jù)緩沖區(qū)已滿,不再接收新的數(shù)據(jù),也不會讀出socket上的數(shù)據(jù),反向的壓著流量的傳輸)?!?/p>

??此時正在我們焦急等待的時候,上級傳來了指令,說其它位置已經(jīng)暫緩處理了,你當(dāng)下可以把廣場外圍開起來,并把廣場前面的路兩邊都放開(優(yōu)先級調(diào)高,優(yōu)先傳輸重要數(shù)據(jù))。

??我就立馬啟動了擴容的按鈕,只見廣場外圍的大圈全部打開,可以容納10倍的人,并把廣場前的出口路打開,可以通行10000人/s限速100M/S)。

??數(shù)據(jù)說:“快快快,已經(jīng)可以通行了,快把閘機打開,我要趕緊帶著兄弟們把資料送到。”

??只看到廣場出去的人比進入的人多了很多,廣場一下子空了起來。

??很快數(shù)據(jù)就全部帶著他的兄弟走了,去完成任務(wù)了,說:“等我完成這任務(wù),我向你來討教討教你這邊的管理法,怎么能保證高效的完成調(diào)度的任務(wù)”。

當(dāng)起了老師

數(shù)據(jù)完成了他的任務(wù),回來的時候在跟我請教了起來。

??數(shù)據(jù)說:“我就是想問問,你的那個廣場是怎么個情況,怎么一滿了就可以自動防止人進入,然后一空了就可以通知人進入的?!?/p>

??我跟他解答說:“我這是一個異步處理的一把刀,我可以在空閑的時候完全的不占用任何的資源,在忙碌的時候又可以把全部的CPU用上。完成高效的運轉(zhuǎn)?!?/p>

??數(shù)據(jù)問:“那你用了什么秘密法寶,他這么厲害?”

??我說:“我就是用了一種古代就開始在用的——旗語,也就是PollSemaphore,我這里存一把旗,并存了一把鑰匙,當(dāng)我有鑰匙的時候,也就是廣場人沒滿的時間,你來了我就放你進場,這樣子我也不用管廣場里有沒有滿。當(dāng)你進入后,如果 廣場滿了,他會將我手上的鑰匙拿走。沒有鑰匙的話,新進來的人我就不會讓你們進入了?!?/p>

??數(shù)據(jù)問:“那如果廣場有位置的話,那你怎么樣才能重新得到鑰匙?”

??我說:“這就是我高效的時候了,剛剛我鑰匙交出去的時候,我已經(jīng)調(diào)用了self.sem.poll_acquire(cx),當(dāng)廣場有人出去的話,他就會通知Waker,然后我就可以主動去找他拿到鑰匙了,這樣子我就可以重新?lián)碛需€匙了?!?/p>

??數(shù)據(jù)說:“原來你緩沖區(qū)是這樣子的吖,那你出口的那條路上,怎么限定人流量的?”

??我說:“這個就要有請RateLimitLayer了,他有定義了per每個周期的時間就比如每秒,或者每分鐘,或者每小時,nums就是每個周期內(nèi)可以通行的字節(jié)數(shù)。下面是詳細的定義?!?/p>

pub struct RateLimitLayer {
    /// 周期內(nèi)可以通行的數(shù)據(jù)
    nums: u64,
    /// 每個周期的時間
    per: Duration,
    /// 當(dāng)前周期下,還剩下可通行的數(shù)據(jù)
    left_nums: u64,
    /// 下一個時間重新計算的日期
    util: Instant,
    sleep: Pin<Box<Sleep>>,
}

??數(shù)據(jù)問:“那如果當(dāng)前周期耗完的話,是不是還沒有到下個周期前就不能繼續(xù)通行了?”

??我答:“確實是的,你當(dāng)前周期耗光了可用的額度,那不能通行了哦,我就會向Pin::new(&mut self.sleep).poll(cx).is_pending(),如果他現(xiàn)在不能用,就等會到那個時間,他就會通知我啦。他通知我,我就會重置掉到前的數(shù)據(jù),這樣子你就可以繼續(xù)通行了?!?/p>

self.left_nums = self.nums;
self.util = Instant::now() + self.per;
self.sleep.as_mut().set(tokio::time::sleep_until(Instant::now() + self.per));

??數(shù)據(jù)說:“小姐姐你好厲害,還好有你在這里嚴格的控制著,我才能那么準(zhǔn)時的到達”。

??我答:“那是,請叫我溫柔的一刀,該嚴格的時候我就會嚴格,不嚴格那只會更麻煩。你說是吧?!?/p>

流控在互聯(lián)網(wǎng)中是很重要的概念,因為基本上大部分的公網(wǎng)出口都不是無限的,就同一個網(wǎng)站,API的接口重要性肯定會比靜態(tài)文件重要性來的高,所以為了使系統(tǒng)更穩(wěn)定,感謝流控小姐姐使出這溫柔的一刀。

點擊 [關(guān)注],[在看],[點贊] 是對作者最大的支持文章來源地址http://www.zghlxwxcb.cn/news/detail-799555.html

到了這里,關(guān)于23. 從零用Rust編寫正反向代理,流控小姐姐的溫柔一刀!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 正向代理和反向代理有什么區(qū)別?什么是正向代理?什么是反向代理?正向代理和反向代理詳解。

    正向代理和反向代理有什么區(qū)別?什么是正向代理?什么是反向代理?正向代理和反向代理詳解。

    ?一、正向代理: ????????當(dāng)用戶想訪問某一網(wǎng)址時,用戶先訪問代理服務(wù)器,然后由代理服務(wù)器向目標(biāo)網(wǎng)址發(fā)送請求最終將數(shù)據(jù)返回代理服務(wù)器,最后代理服務(wù)器將數(shù)據(jù)返回給用戶這一過程我們稱之為正向代理。 正向代理它代理了客戶端,相當(dāng)于代理服務(wù)器去訪問目標(biāo)

    2024年02月08日
    瀏覽(18)
  • 代理、正向代理與反向代理

    代理、正向代理與反向代理

    一、代理 1.1 什么是代理 代理 也被叫做網(wǎng)絡(luò)代理,是一種比較特殊的網(wǎng)絡(luò)服務(wù),允許一個終端(通常指客戶端)通過這個服務(wù)與另一個終端(通常指服務(wù)器端)進行非直接的連接。例如:一些網(wǎng)關(guān)、路由器等網(wǎng)絡(luò)設(shè)備都具備網(wǎng)絡(luò)代理的功能。代理服務(wù)有利于保障網(wǎng)絡(luò)終端的隱

    2023年04月27日
    瀏覽(18)
  • 【nginx實戰(zhàn)】nginx正向代理、反向代理、由反向代理實現(xiàn)的負載均衡、故障轉(zhuǎn)移詳解

    【nginx實戰(zhàn)】nginx正向代理、反向代理、由反向代理實現(xiàn)的負載均衡、故障轉(zhuǎn)移詳解

    本文將要討論以下內(nèi)容 正向代理與反向代理的基本概念 Nginx正向代理服務(wù)的配置指令、Nginx反向代理服務(wù)的配置指令 Nginx反向代理服務(wù)器的應(yīng)用——負載均衡、故障轉(zhuǎn)移 案例分析 ? 正向代理的概念 局域網(wǎng)內(nèi)的機器借助代理服務(wù)訪問局域網(wǎng)外的網(wǎng)站,此代理服務(wù)器提供的服務(wù)

    2024年01月24日
    瀏覽(31)
  • Vue 3中的反向代理 和如何在服務(wù)器配置反向代理

    如何在Vue 3項目中配置反向代理,讓前端開發(fā)變得爽到爆!還有個小插曲,Vite為我們提供了更簡單的方式,就像找對象一樣直接。 首先,我們來談?wù)劮聪虼硎鞘裁?。簡單來說,反向代理就像是前端和后端之間的婚姻介紹所。前端需要向后端請求數(shù)據(jù),但由于某些原因(比如

    2024年04月13日
    瀏覽(16)
  • 什么是反向代理(Reverse Proxy)?解釋反向代理的作用和常見應(yīng)用。

    反向代理是一種代理服務(wù)器模型,它位于客戶端和后端服務(wù)器之間。它允許將請求轉(zhuǎn)發(fā)到后端服務(wù)器,并將響應(yīng)返回給客戶端。反向代理的主要作用如下: 負載均衡:通過將請求分發(fā)到多個后端服務(wù)器來平衡負載,從而減少單個服務(wù)器的負擔(dān),提高系統(tǒng)的可伸縮性。 安全性

    2024年02月09日
    瀏覽(25)
  • 正向代理與反向代理

    正向代理與反向代理

    ? ? ? ? http代理分為兩種包括正向代理和反向代理。 正向代理代理的是客戶端,隱藏客戶端。反向代理代理的是服務(wù)端,隱藏服務(wù)端。正向代理典型應(yīng)用是vpn。反向代理典型應(yīng)用是nginx,同時nginx也可以做正向代理。 ? ? ? 客戶端通過代理訪問服務(wù)端架構(gòu)圖 ? ? ?兩個服務(wù)端

    2024年02月15日
    瀏覽(26)
  • Squid 緩存代理--反向代理

    Squid 緩存代理--反向代理

    反向代理 :如果Squid反向代理服務(wù)器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端:否則反向代理服務(wù)器將向后臺的WEB服務(wù)器請求資源,然后將請求的應(yīng)答返回給客戶端,同時也將應(yīng)答緩存在本地,供下一個請求者使用。 緩存網(wǎng)頁對象,減少重復(fù)請求 將互聯(lián)

    2024年02月12日
    瀏覽(25)
  • 什么是正向代理和反向代理

    什么是正向代理和反向代理

    正向代理和反向代理是兩種不同的代理服務(wù)器配置方式,它們在代理的方向和作用上有所不同。 代表客戶端發(fā)送請求到其他服務(wù)器的代理服務(wù)器??蛻舳藢⒄埱蟀l(fā)送給正向代理服務(wù)器,然后由正向代理服務(wù)器代表客戶端向目標(biāo)服務(wù)器發(fā)送請求。正向代理服務(wù)器隱藏了客戶端的

    2024年04月28日
    瀏覽(22)
  • Nginx 正向代理和反向代理

    Nginx 正向代理和反向代理

    博主介紹 : ?博主從事應(yīng)用安全和大數(shù)據(jù)領(lǐng)域,有8年研發(fā)經(jīng)驗,5年面試官經(jīng)驗,Java技術(shù)專家? Java知識圖譜點擊鏈接: 體系化學(xué)習(xí)Java(Java面試專題) ???? 感興趣的同學(xué)可以收藏關(guān)注下 , 不然下次找不到喲 ???? Nginx性能高的原因有以下幾點: Nginx是一個輕量級的We

    2024年02月08日
    瀏覽(27)
  • 【W(wǎng)eb】HTTP代理和反向代理

    【W(wǎng)eb】HTTP代理和反向代理

    就是從客戶端直接訪問服務(wù)端,相當(dāng)于我直接去廠家買可樂,沒有中間商賺差價 HTTP代理指在客戶端先訪問代理服務(wù)器,然后由代理服務(wù)器去訪問服務(wù)端,代理服務(wù)器收到響應(yīng)后再轉(zhuǎn)發(fā)個客戶端,就像我去商店買可樂的過程 瀏覽器并不知道代理服務(wù)器的位置,所以我們要主動

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包