Как обрабатываются статические объекты при кластеризации? - PullRequest
4 голосов
/ 06 мая 2011

Статические объекты инициализируются только один раз. Классы Singleton создаются только один раз. Если мы используем одноэлементный кластер, он создаст несколько экземпляров одноэлементного кластера. Так что же происходит со статическим объектом в кластерной среде? Почему этот объект не инициализируется на других серверах кластера? или почему состояние объектов не меняется?

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

Статические объекты всегда находятся в области действия ClassLoader (в большинстве случаев для JVM) и не учитываются при кластеризации.Если вам нужен Singleton, вы должны указать контейнеру на его создание.От природы вашего Singleton зависит, будет ли он существовать только один на кластер или один раз на JVM или один раз на загрузчик классов.

3 голосов
/ 06 мая 2011

Каждый узел в кластере работает в отдельной JVM - поэтому у каждой JVM (узла кластера) будет свой собственный Singleton. Если вы посмотрите на кластер как на систему JVM, то верно, что число экземпляров Singleton в кластере равно количеству узлов.

Singleton кластера не может быть реализован с обычными классами Java. Вам может понадобиться один (некластеризованный) экземпляр сервера, который предоставляет синглтон.

2 голосов
/ 06 мая 2011

Синглтоны даже не надежны в течение одного процесса. Вы можете загрузить один и тот же класс через несколько загрузчиков классов и получить несколько «синглтонных» объектов.

Синглтон - это анти-паттерн по причине - избегайте его .

В случае кластера ситуация еще хуже, поскольку все узлы должны координировать свои действия, чтобы решить, где будет расположен синглтон. Это уязвимо для сетевого разделения, поэтому оно несостоятельно. Теорема Брюера даст вам некоторое представление об этом.

...