第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新 Go Web 應(yīng)用程序的最佳實(shí)踐

更新 Go Web 應(yīng)用程序的最佳實(shí)踐

Go
SMILET 2021-09-10 16:52:36
我想知道將更新部署到 (MVC) Go web 應(yīng)用程序的最佳實(shí)踐是什么。想象一下以下場景:1) 為我的 Go Web 應(yīng)用程序編寫代碼并測試一些更改2) 在沒有任何人當(dāng)前使用先前版本被中斷的情況下部署更新。我不知道如何確保第 2) 點(diǎn)可以被覆蓋 - 當(dāng)有人向服務(wù)器發(fā)送請求并且我就在此時重建/重新啟動它時,他會收到錯誤 - 即使請求只使用了一部分我沒有接觸的代碼或向后兼容的代碼,或者我剛剛添加了一個新的請求處理程序。也許我錯過了一些瑣碎或眾所周知的模式,因?yàn)槲抑皇窃趯W(xué)習(xí) go 的過程中,而我以前的 Web 應(yīng)用程序是 ASP.NET 或 php 應(yīng)用程序,這沒有問題,因?yàn)槲也恍枰匦聠哟a更改的網(wǎng)絡(luò)服務(wù)器。
查看完整描述

1 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個贊

這不僅僅是 Go 的問題,但總的來說,我們可以將問題分為兩個獨(dú)立的問題:

  1. 確保當(dāng)前請求不會被終止并影響用戶體驗(yàn)。

  2. 確保沒有無法處理新請求的停機(jī)時間。

第一個更容易解決:你只是不要猛烈地殺死你的服務(wù)器,而是告訴它退出,導(dǎo)致“排水階段”,在這個階段它不接受新請求,只完成當(dāng)前正在運(yùn)行的請求,然后退出。例如,這可以通過偵聽信號并將應(yīng)用程序進(jìn)入特殊狀態(tài)來完成。

Go 并不簡單,因?yàn)槟J(rèn)的 http 服務(wù)器不支持關(guān)閉它,但是您可以使用 啟動服務(wù)器net.Listener,然后保留對它的引用并在時間到期時關(guān)閉它。

現(xiàn)在,只執(zhí)行一種方法然后再次啟動服務(wù)將導(dǎo)致在此過程中不接受新請求,我們都知道在極端情況下這可能需要幾秒鐘。

所以我們需要的是另一個已經(jīng)運(yùn)行新代碼的服務(wù)器實(shí)例,在舊代碼沒有響應(yīng)新請求的那一刻,對吧?這可以通過多種方式完成:

  1. 擁有多個服務(wù)器,并且在它們之上有一個負(fù)載平衡器,允許一個(或多個)服務(wù)器在我們重新啟動另一臺服務(wù)器時承擔(dān)負(fù)載。這是最簡單的方法,也是大多數(shù)人的做法。如果您需要 N 個服務(wù)器來承擔(dān)您的用戶的負(fù)載,只需保留 N+1 并一次重新啟動一個。

  2. 使用套接字共享技巧。在較新的 Linux 內(nèi)核中,許多進(jìn)程可以在同一個端口上偵聽和接受。您所做的只是啟動新實(shí)例,然后告訴舊實(shí)例完成并退出。這樣就沒有停頓。這是通過設(shè)置SO_REUSEPORT偵聽套接字來完成的。

  3. 以上可以通過準(zhǔn)備交付的解決方案自動化,例如 Einhorn,為您處理所有細(xì)節(jié),請參閱https://github.com/stripe/einhorn

  4. 這篇博文中記錄了另一種方法:http : //blog.nella.org/?p=879


查看完整回答
反對 回復(fù) 2021-09-10
  • 1 回答
  • 0 關(guān)注
  • 306 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號