簡體   English   中英

無狀態服務器如何工作?

[英]How do stateless servers work?

我試着理解這一點。 通常每次用戶登錄系統時,服務器端都會創建會話,而用戶客戶端則有cookie。 當人們談論無狀態服務器端,有狀態客戶端時,它們意味着什么? 服務器端無需使用會話跟蹤用戶? 僅在客戶端使用cookie來檢查用戶? 意思是如果我更換服務器,用戶將不會注意到它仍然可以恢復使用該服務?

如何配置spring-security來做到這一點?

跨服務器跟蹤用戶對於真正的無狀態服務器端來說是棘手的。 大部分時間都是sorta無狀態服務器,其中登錄是例外。 然而,無狀態服務器的重要性在於它使聚類變得非常簡單,因此您可以水平擴展。

在Java中,您可以使用cookie來存儲憑據或使用分布式哈希來使其無狀態。 通常,人們接受使用像memcache這樣的東西並說它們是無狀態的,因為狀態存儲在web服務器之外。 這允許用戶使用服務器場中的任何Web服務器並仍然可以安全地進行身份驗證。 在Java中,我們有很多可以與spring一起使用的分布式哈希實現,因此您不必使用memcache來執行此操作。

另一種選擇是使用cookie來存儲稱為HMAC的加密安全散列票。 使用cookie可以避免使用Session,因此Web服務器是無狀態的。 使用HMAC,您可以簽署一個數據塊,這些數據不能由第三方偽造或創建,並保證來自您。 這不需要外部服務器資源(緩存)來驗證用戶,因此它可以更好地擴展,但是您必須注意一些安全問題。 僅供參考,Google使用此技術進行橫向擴展。 一個HMAC不像SHA1或其他cyrpto-hashes。 它們需要一個必須位於服務器場中每台服務器上的密鑰。 這也必須使用對稱加密密鑰進行保護,以確保在有人獲得該文件的情況下將其安全地存儲在服務器上。 此外,HMAC信息以明文形式存儲,因此您可以將用戶名或電子郵件放入cookie中,任何人都可以使用實際的加密哈希值。 如果有人要獲得該cookie,他們可以偽裝成該用戶。 這就是為什么HMAC通常僅在一定時間內有效。 在那之后他們就會過期,所以如果有人確實得到了他們,他們就永遠無法訪問該帳戶。

所以HMAC有這個弱點,你應該小心你使用它們的應用程序。對於Paypal使用這個方案是一個非常糟糕的主意,因為我所要做的就是獲取你的安全cookie然后將所有資金轉移給我。 最重要的是一切都是你的應用程序真正無國籍。

最后一個選項是將您的java會話存儲在分布式哈希中。 Php和其他平台會將其會話轉儲到數據庫中,窮人會分配緩存,或者將它們轉儲到內存緩存中。 使用Java,您可以做同樣的事情。 您也可以將會話對象放入分布式緩存中。 這個選項已經不再受歡迎,因為人們認為“現在很酷,我可以將我想要的東西轉移到我的會話中,它將是無國籍的。” 但是,與所有分布式緩存一樣,傳輸速度,復制時間和有效負載大小都存在限制。 這適用於Java或Memcache。 保持你的會話小,這很好。 將所有內容都放入會話中,然后您可以直接使用單個服務器來解決問題。 實際上它可能比你剛剛使服務器有狀態更糟糕,因為有時網格計算比單個服務器更差。

更新:以下是可用於執行此操作的Java分布式緩存庫的列表:

http://www.manageability.org/blog/stuff/distributed-cache-java

無狀態服務是一種不在應用程序服務器上存儲任何數據的服務。 它將數據讀取或寫入數據庫,返回值(或不返回),之后,任何有關任務本身的信息都會被遺忘。

狀態服務用於執行事務,即依賴於先前任務結果的一系列任務。 最簡單的示例是在網上商店發送訂單,您可以在購物車中收集產品,當您退房時,您在一個頁面上輸入您的帳戶數據,存儲它,然后輸入您的帳單地址,存儲它,然后確認您的訂單並完成交易。 每個步驟都取決於前一步驟的成功結果,並且需要保留數據,直到完成這些步驟中的最后一個步驟或取消交易,在這種情況下必須進行回滾以將帳戶余額恢復到該方式這是在你簽出之前。

在大多數情況下,您可以雙向實現事務,但如果您要使用無狀態服務,您的客戶端應用程序將必須處理正確的順序和完成任務,或者您必須找到一些其他方式來存儲正確處理事務信息並管理回滾。 正如你所說的那樣,那將是一個有狀態的客戶端

然而,所有這些都是非常普遍的,並且在每種情況下都必須考慮安全性和/或會話處理。 您可以很好地使用會話信息來驗證無狀態服務調用 - 您只需要單獨驗證每個調用,例如通過將會話ID或用戶ID或其他安全令牌附加到業務數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM