Stateful 與 Stateless 的介紹 ( I )

Stateful 與 Stateless 的介紹 ( I )

什麼叫做狀態 (state),  它代表什麼意思?   根據Dictionary.com的定義,狀態是指特定的時間的特有狀態。

State: the particular condition that someone or something is in at a specific time.      – Dictionary.com

說到這裡,我先舉一個範例。試想一個銀行信用卡客服中心的範例。您一定曾有在客服中心電話線上轉換部門的經驗。假設您對您的信用卡的刷卡限額不滿意,想要提高每月可以刷卡的上限,於是您就打電話給信用卡的客服中心來達成您的心願。當電話打進客服專線後,您會被詢問許多關於您的身分確認相關的資訊,例如您的出身年月日,您的住址,手機號碼,及其他屬於您私人的相關資訊來驗證 (authentication)您的身分,驗證完成後,您就可以經電話按鍵選項來與客服人員通話。

然而,當您向客服人員解釋您想請銀行這邊提高您的信用卡刷卡上限需求時,此時客服人員告訴您他(她)必須把電話轉到其他部門,並且請您在電話轉接後,再次確認您的身分驗證一次。此時的您雖然百般的不願意,但也只好勉為其難的再重做一次身分驗證。

讓我們回到狀態本身。與字典的一般定義相似,狀態在電腦科學中是指在某個時間點的已被儲存可供讀取的資訊。那這到底是什麼東西 ? 其實, 狀態就是資訊儲存。從上述的範例來看,先不論您是否覺得此種重複驗證的機制的不方便,換個場景,如果回到負載平衡 (load balancing) 的架構來說 (請參考圖一),假設一個使用者從他的web 瀏覽器發出一個登入某一網站的需求 (request),網站的附載平衡器 (load balancer) 收到需求後,依照演算法 (此處假設是Round Robin),將需求轉給Server 1,Server 1 此時就與後面的資料庫 (database) 確認是否有此一帳號,如果有,就回覆 (response) 給使用者說登入成功。


圖一 :  傳統的負載平衡

如果此時,使用者想要更改他的通訊地址,於是使用者又發出一個更改 (update)的需求  ,此時這個需求從使用者端被傳送至負載平衡器 (LB),於是這時LB 就把需求依照Round Robin 演算法的規則轉給Server 2。但是,此時Server 2 不知道使用者先前已經輸入帳號密碼並登入至Server 1過了,也就是Server 2沒有使用者的狀態 (state),於是Server 2就再要求使用者重新登入。於是使用者只好重新再登入一次,看到這裡,您有發現這與上面信用卡限額的範例很像呢!

上述就是沒有stateless的範例。如果您是使用者,您會感到麻煩嗎?其實這裡不只麻煩,還很沒有效率。

如果要解決 Stateful問題,我們可以利用sticky session、或stateless等不同的方法來改善上述問題,但是是否真的有效 ? 請持續追蹤我們的下一篇文章 ”Stateful Application的介紹與解決方法 ”,我們將會有更進一步的介紹與說明。

撰文:賴欣宜 迎棧科技技術專欄作家

訂閱電子報

Select list(s)*

 

Loading