{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

要做負(fù)載均衡,代碼要滿足什么條件?

DevTTLDevTTL 回答6 收藏1
收藏問題

6條回答

CloudDeveloper

CloudDeveloper

回答于2022-06-22 15:43

當(dāng)我們的程序只部署一套,不再能滿足訪問量(調(diào)用量)的時候,最簡單的橫向擴(kuò)容的方法就是部署多套應(yīng)用環(huán)境,負(fù)載均衡將用戶(客戶端)的訪問平均地分配到每臺服務(wù)器上,這樣就可以利用多臺機(jī)器的資源,增加系統(tǒng)的負(fù)載能力。

那么要做負(fù)載均衡,對我們的系統(tǒng)有什么要求么?或者說我們的代碼需要做什么改造么?

大部分時候我們的代碼是不需要改造的,但是也要注意這么幾點(diǎn)。

我們的服務(wù)最好是無狀態(tài)的,也就是每一次的調(diào)用,不依賴于前一次的調(diào)用結(jié)果,如果前后有依賴,則需要后面的請求攜帶著前一次請求的結(jié)果,作為參數(shù)進(jìn)行訪問。

除非負(fù)載均衡開啟了會話保持,或者通過一些負(fù)載均衡路由策略,讓同一個 IP 的請求始終路由到同一臺服務(wù)器上,但是這并不是一個好的解決方案。

通常我們需要保持服務(wù)的無狀態(tài)性,如果需要做權(quán)限認(rèn)證的話,建議采用 Token 或使用 Redis 做 Session 共享(推薦使用 Token)。

還有一點(diǎn),可能不一定必須的,不過我覺得也是個不錯的方案,供大家參考。

假如我們有兩臺應(yīng)用服務(wù)器 A 和 B,前面掛一臺負(fù)載均衡,當(dāng)我們需要做應(yīng)用升級的話,通常可以怎么做?

  • 通常的辦法是停掉服務(wù)器 A,這時候負(fù)載均衡會監(jiān)控到這臺服務(wù)器 A 已經(jīng)無法使用了(比如監(jiān)控到端口消失),再來的請求會發(fā)送給服務(wù)器 B;

  • 對服務(wù)器 A 升級并啟動,負(fù)載均衡監(jiān)控到 A 恢復(fù)了,會將請求發(fā)送給 A 和 B;

  • 對服務(wù)器 B 做相同的操作。


這樣看似沒有問題,因?yàn)樵诜?wù)器升級的時候,負(fù)載均衡不在發(fā)送請求到這臺服務(wù)器上;但是大家仔細(xì)想一想這個過程,如果在停服務(wù)器的那一刻,已經(jīng)有請求進(jìn)來了并進(jìn)行處理,但是還沒有返回,這時候停掉服務(wù)器,會導(dǎo)致這部分請求發(fā)生異常,那么這個問題如何解決呢?這就需要對程序進(jìn)行一定的改造了。

  • 應(yīng)用提供一個接口,返回一個靜態(tài)變量的值,只要 true 或 false 兩個狀態(tài);

  • 負(fù)載均衡不再監(jiān)控端口是否消失,而是監(jiān)控剪口返回的狀態(tài),返回 true 表示應(yīng)用正常,false 或沒有返回表示不正常;

  • 每次停服務(wù)之前,通過接口修改當(dāng)前應(yīng)用靜態(tài)變量的值為 false;

  • 負(fù)載均衡認(rèn)為該服務(wù)器狀態(tài)不正常,將不再發(fā)送請求到這臺服務(wù)器上;

  • 等待幾十秒,這段時間相當(dāng)于等待當(dāng)前請求都處理并返回,再停止服務(wù)。


“停止服務(wù)時,不再接受新的請求,等現(xiàn)有請求都處理完成后再真正停止服務(wù)”,這只是一個笨辦法,想要避免以上問題還有更好的辦法,并且對代碼沒有侵入性;有些中間件本身提供了類似的功能,我們只需執(zhí)行對應(yīng)的停止服務(wù)的命令即可;或者需要在代碼中添加監(jiān)聽類,當(dāng)收到 kill 信號的時候,拒絕新的請求,等待一段時間,再結(jié)束程序等等。

我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注。

評論0 贊同0
  •  加載中...
CKJOKER

CKJOKER

回答于2022-06-22 15:43

1.確保你的接口無狀態(tài),鑒權(quán)可以使用token,redis集中化session

2.確保你的接口冪等性,可以為接口生成請求id,過濾請求id,防重,或者可以使用一次性token。

3.確保你的接口集群對等,代碼,數(shù)據(jù),都需要對等,通常每臺機(jī)器數(shù)據(jù)源都是一樣的,代碼是相同的。同時機(jī)器的配置也是相同的。

評論0 贊同0
  •  加載中...
_ivan

_ivan

回答于2022-06-22 15:43

代碼中不能把數(shù)據(jù)、上傳文件、日志等保存到本地。

數(shù)據(jù)庫保存數(shù)據(jù)

對象存儲保存上傳文件

日志服務(wù)保存系統(tǒng)日志

Redis或NFS保持session

評論0 贊同0
  •  加載中...
xi4oh4o

xi4oh4o

回答于2022-06-22 15:43

大家好,我是IT屠工,很高興回答此問題,希望我的回答可以幫助到你!

什么是負(fù)載均衡

負(fù)載均衡主要通過專門的硬件設(shè)備或者通過軟件算法實(shí)現(xiàn)。通過硬件設(shè)備實(shí)現(xiàn)的負(fù)載均衡效果好、效率高、 性能穩(wěn)定,但是成本比較高。通過軟件實(shí)現(xiàn)的負(fù)載均衡主要依賴于均衡算法的選擇和程序的健壯性。均衡 算法也是多種多樣的,常見的有兩大類:即靜態(tài)負(fù)載均衡算法和動態(tài)負(fù)載均衡算法。靜態(tài)算法實(shí)現(xiàn)比較簡 單,在一般網(wǎng)絡(luò)環(huán)境下也能達(dá)到比較好的效果,主要有一般輪詢算法、基于比率的加權(quán)輪詢算法以及基于 優(yōu)先級的加權(quán)輪詢算法等。動態(tài)負(fù)載均衡算法在較為復(fù)雜的網(wǎng)絡(luò)環(huán)境中適應(yīng)性更強(qiáng),效果更好,主要有基 于任務(wù)量的最少連接優(yōu)先算法、基于性能的最快響應(yīng)優(yōu)先算法、預(yù)測算法及動態(tài)性能分配算法等。

網(wǎng)絡(luò)負(fù)載均衡技術(shù)的大致原理是利用一定的分配策略將網(wǎng)絡(luò)負(fù)載平衡地分?jǐn)偟骄W(wǎng)絡(luò)集群的各個操作單元 上,使得單個重負(fù)載任務(wù)能夠分擔(dān)到多個單元上并行處理,或者使得大量并發(fā)訪問或數(shù)據(jù) 流量分擔(dān)到多個 單元上分別處理,從而減少用戶的等待響應(yīng)時間。


Nginx 服務(wù)器負(fù)載均衡配置

Nginx 服務(wù)器實(shí)現(xiàn)了靜態(tài)的基于優(yōu)先級的加權(quán)輪詢算法,主要使用的配置是 proxy_pass 指令和 upstream 指令,這些內(nèi)容實(shí)際上很容易理解,關(guān)鍵點(diǎn)在于 Nginx 服務(wù)器的配置靈活多樣,如何在配置負(fù)載均衡的同 時合理地整合其他功能,形成一套可以滿足實(shí)際需求的配置方案。

下面的有一些基礎(chǔ)示例片段,當(dāng)然不可能將所有的配置情況包括在內(nèi),希望能夠起到拋磚引玉的效果,同 時也需要大家在實(shí)際應(yīng)用過程中多總結(jié)多積累。在配置中需要注意的地方將以注釋的形式添加。


配置實(shí)例:

在以下實(shí)例片段中,backend 服務(wù)器組中所有服務(wù)器的優(yōu)先級全部配置為默認(rèn)的 weight=1,這樣它 們會按照一般輪詢策略依次接收請求任務(wù)。該配置是一個最簡單的實(shí)現(xiàn) Nginx 服務(wù)器負(fù)載均衡的配置。所 有訪問 www.myweb.name 的請求都會在 backend 服務(wù)器組中實(shí)現(xiàn)負(fù)載均衡。實(shí)例代碼如下:

...

upstream backend #配置后端服務(wù)器組

{

server 192.168.1.2:80;

server 192.168.1.3:80;

server 192.168.1.4:80; #默認(rèn) weight=1

}

server

{

listen 80;

server_name www.myweb.name;


index index.html index.htm;


location / {


proxy_pass http://backend;


prox_set_header Host $host;


}


...


}

由于 Nginx 服務(wù)器的 功能在結(jié)構(gòu)上是增量式的,因此 ,我們可以在這些配置的基礎(chǔ)上繼續(xù)添加更多功能,比如 Web 緩存等功 能,以及 Gzip 壓縮技術(shù)、身份認(rèn)證、權(quán)限管理等。同時在使用 upstream 指令配置服務(wù)器組時,可以充 分發(fā)揮各個指令的功能,配置出滿足需求、高效穩(wěn)定、功能豐富的 Nginx 服務(wù)器。

歡迎大家關(guān)注并點(diǎn)贊,我是@IT屠工,專注IT網(wǎng)絡(luò)技術(shù)資源分享,普及IT網(wǎng)絡(luò)技術(shù)

評論0 贊同0
  •  加載中...
import.

import.

回答于2022-06-22 15:43

一般涉及到負(fù)載均衡,以下幾種情況必須要注意:

文件管理

這里所說的文件管理是指通過上傳至服務(wù)器的文件,這就不能再單純地存儲至代碼所在服務(wù)器上了,必須有專門的文件服務(wù)器。

數(shù)據(jù)庫

單一服務(wù)器一般都是WEB服務(wù)器與數(shù)據(jù)庫在一起。在負(fù)載均衡中,數(shù)據(jù)庫最好做成讀寫分離。

緩存和SESSION

代碼需要對SESSION以及緩存做處理,保證能夠正常訪問這些共享的數(shù)據(jù),建議引入R edis。

日志

日志也應(yīng)與文件管理一樣,有專門的服務(wù)器進(jìn)行管理。

評論0 贊同0
  •  加載中...
caiyongji

caiyongji

回答于2022-06-22 15:43

建議用戶授權(quán)不要用session。可以采用token方式。將用戶信息加密到token中,每次請求將token通過header post給服務(wù)器,然后再去解密。這樣負(fù)載均衡就沒任何問題了。

評論0 贊同0
  •  加載中...

相關(guān)問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<