怎麼理解和設計應用的無狀態化?

2021-09-01 12:54:10 字數 915 閱讀 4704

什麼是無狀態?

無狀態(statelessness)指的是服務內部變數值的儲存。這句話怎麼理解?我們可以理解為在我們的伺服器內部儲存乙個變數。

乙個請求過來,那麼此時帶著該變數的就為有狀態,或者在客戶端儲存了該變數,請求過來時,需要重複使用該變數的也是有狀態的體現。

那麼我們怎麼做,可以讓我們的應用軟體是無狀態。那麼我們需要將該變數儲存在

第三方的一些服務或者中介軟體上,比如將使用者登陸token儲存在redis上。

這樣將有狀態的資訊隔離在了第三方服務上,從而保證我們自己的應用本身無狀態化。

判斷是不是無狀態?

1. 發起兩個相同的請求a,b

2. 檢視請求的上下文資訊

3. a請求預設使用b請求資訊  則為有狀態

4. a請求沒有使用到b請求的資訊,則為呼叫了其他伺服器或者中介軟體所儲存的公共資訊, 則為無狀態。

無狀態的場景使用       

web伺服器

請求和請求本身之間是是無狀態的。

伺服器模組本身                

是無狀態的。特定版本的模組只會存在乙個例項。我們不會例項化軟體模組,

儘管我們需要例項化軟體模組中的類,這些類會保持狀態,

但是模組本身不會這樣做。符合這部分定義的軟體實體樣例包括war、ear以及jar檔案。

有狀態:服務間資料需要同步 主從同步  副本同步等  擴容複雜  雙機熱備等 宕機容易丟失資料

無狀態:服務間資料不需要同步  擴容快速   熱備冷備切換容易 容易水平擴充套件。

怎麼做到應用無狀態化?

a. 通過配置管理中心 進行配置檔案的有狀態化 驅動應用的無狀態化。

b. 通過第三方軟體服務進行儲存處理、集群、擴容等手段,來保證所應用的隔離達到應用的無狀態化。

c. 通過自己設計第三方的隔離服務,整合所需要無狀態化的應用服務。

restful的無狀態理解

所謂無狀態 就是資源可以通過uri來指定,就像是乙個蘿蔔乙個坑的意思。而且定位與其他資源無關,也不會因為其他資源的變化而變化。有狀態和無狀態的區別,有狀態是指 比如乙個資產應用系統,你想看下報廢的台式電腦有多少,是什麼型號,你得在登入介面登進去,然後點開資產維護功能,檢視報廢的相關資訊,選中台式電腦...

REST無狀態的理解

representational state transfer的縮寫。我對這個片語的翻譯是 表現層狀態轉化 降低開發的複雜性,提高系統的可伸縮性 資源 rest的名稱 表現層狀態轉化 中,省略了主語。表現層 其實指的是 資源 resources 的 表現層 所謂 資源 就是網路上的乙個實體,或者說是...

理論與例項,準確理解REST的無狀態設計

rest含義為 表述性狀態轉移 基於rest的web服務遵循一些基本的設計原則,比較難理解的是伺服器端的請求應該是無狀態的。rest 含義為 表述性狀態轉移 rest是一種開發 web 應用的架構風格,可以將其理解為一種設計模式。1 通過 uri 來標識資源 系統中的每乙個物件或是資源都可以通過乙個...