無狀態服務VS有狀態服務

2021-09-11 02:43:59 字數 695 閱讀 2560

在網易蜂巢的服務管理中存在兩種服務:無狀態服務和有狀態服務。

無狀態服務(stateless service): 

是指該服務執行的例項不會在本地儲存需要持久化的資料,並且多個例項對於同乙個請求響應的結果是完全一致的。這類服務在網易蜂巢雲平台建立後,借助k8s內部的負載均衡,當訪問該服務的請求到達服務一端後,負載均衡會隨機找到乙個例項來完成該請求的響應(目前為輪詢)。這類服務的例項可能會因為一些原因停止或者重新建立(如擴容時),這時,這些停止的例項裡的所有資訊(除日誌和監控資料外)都將丟失(重啟容器即會丟失)。因此如果您的容器例項裡需要保留重要的資訊,並希望隨時可以備份以便於以後可以恢復的話,那麼建議您建立有狀態服務。

有狀態服務(stateful service): 

是指該服務的例項可以將一部分資料隨時進行備份,並且在建立乙個新的有狀態服務時,可以通過備份恢復這些資料,以達到資料持久化的目的。有狀態服務只能有乙個例項,因此不支援「自動服務容量調節」。一般來說,資料庫服務或者需要在本地檔案系統儲存配置檔案或其它永久資料的應用程式可以建立使用有狀態服務。要想建立有狀態服務,必須滿足幾個前提:

待建立的服務映象(image)的dockerfile中必須定義了儲存卷(volume),因為只有儲存卷所在目錄裡的資料可以被備份 

建立服務時,必須指定給該儲存卷分配的磁碟空間大小 

如果建立服務的同時需要從之前的乙個備份裡恢復資料,那麼還要指明該儲存捲用哪個備份恢復。

無狀態服務 VS 有狀態服務

對伺服器程式來說,究竟是有狀態服務,還是無狀態服務,其判斷依舊是指兩個來自相同發起者的請求在伺服器端是否具備上下文關係。如果是狀態化請求,那麼伺服器端一般都要儲存請求的相關資訊,每個請求可以預設地使用以前的請求資訊。而對於無狀態請求,伺服器端所能夠處理的過程必須全部來自於請求所攜帶的資訊,以及其他伺...

有狀態服務和無狀態服務

伺服器端需要保留請求的相關資訊,每個請求可以預設的使用以前的請求資訊 相比無狀態的 web 伺服器請求,狀態化的伺服器似乎有更為廣闊的應用場景,比如網路遊戲伺服器等。無狀態的服務可以在伺服器中維護每乙個連線的狀態資訊,當服務端接收到每個連線請求時候,可以從本地儲存的資訊來重現上下文。基於有狀態的服務...

有狀態服務還是無狀態服務

無狀態服務 就是沒有特殊狀態的服務,各個請求對於伺服器來說統一無差別處理,請求自身攜帶了所有服務端所需要的所有引數 服務端自身不儲存跟請求相關的任何資料,不包括資料庫儲存資訊 有狀態服務 與之相反,有狀態服務在服務端保留之前請求的資訊,用以處理當前請求,比如session等 如何選擇 有狀態服務常常...