繁体   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