簡體   English   中英

如何在分布式環境中制作Spring bean單例?

[英]How to make the Spring bean singleton in distributed environment?

我正在學習Spring,我知道bean在一個應用程序上下文中默認是單例。但是如果我們在分布式系統中部署應用程序會怎么樣? 實現單例的實用方法是什么,因為每次請求進入時,它都可以路由到具有不同應用程序上下文的不同機器?

在群集環境中讀過Singleton,但答案是關於緩存。

我想我們可以做一些事情,比如把單例放到一個中心位置(比如memcached),每次我們需要這個bean並從IO序列化和反序列化時,這有用嗎? 但是,在我看來,這將花費很多,因為一些對象轉移非常“昂貴”。

謝謝!

  • 您的單例是無狀態的:然后您只需在每個節點中重新創建相同的東西,而不需要節點之間的通信;

  • 或者你的單身人是有狀態的:然后你需要分配它的狀態。 這是必須應用memcached或任何其他大量可用分布式緩存的地方。 您仍將獨立地在每個節點中重新創建單例,但您將使其內部狀態駐留在分布式緩存中。

您可以設置您的Web / app服務器以使會話“粘滯”:一旦請求被路由到特定服務器,該會話中的所有請求都將轉到同一服務器。

更大的問題是:為什么要以這種方式設計和實現分布式系統? 所有人的單身都無法擴展。 如果你堅持這條道路,那么聚集任何東西都沒有意義。

更好的解決方案是無狀態,不可變,功能齊全。 創建無狀態REST服務,為您的系統建模。

這取決於,如果您要像服務一樣使用Singleton實例,並且您不會在其中存儲任何全局變量,則不需要將其分發。

在某些情況下,您需要分發,因此,使用緩存解決方案; 您可以嘗試優化實施以存儲最少的數據,從而降低分配成本

暫無
暫無

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

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