Масштабирование синглетонов - PullRequest
3 голосов
/ 08 января 2010

После нескольких трудных часов, обдумывая некоторые архитектурные проблемы для моего серверного приложения, я чувствую, что мне придется использовать синглтоны для достижения моей цели. Чисто по следующим причинам (оправдывая мой запах):

  • Мне не нужно передавать дорогие объекты глубоко в стек вызовов
  • Я могу выполнять функции для одноэлементных объектов управления в любом контексте. (Большая часть кода уже существует, и поэтому я не хочу переписывать обширные фрагменты работающего в противном случае кода)

Помимо этого, синглтоны предлагают еще одну проблему. Моё серверное приложение - это, по сути, DLL с классом, который может вызывать несколько экземпляров серверов. Класс экземпляра сервера содержит одноэлементные объекты управления. Обычно этим управляет служба Windows, поэтому соотношение сервер: машина будет 1: 1.

Таким образом, вы можете просмотреть его как (где -> равно 1: 1, => равно 1: много):

MACHINE -> ServiceHost (служба Windows?) -> Экземпляр сервера -> Объекты управления Singleton

Однако мы хотели бы разрешить модель SaaS, для которой требуется, чтобы хост службы (будь то служба Windows или приложение Win32) мог запускать несколько серверов, как того требует бизнес. Таким образом, физический компьютер может работать на одном хосте сервера, который будет запускать несколько экземпляров сервера.

Что будет (где -> = 1: 1, => = 1: много):

MACHINE -> ServiceHost (служба Windows?) => Экземпляр сервера -> Объекты управления Singleton

Проблема заключается в том, что эти синглтоны будут совместно использоваться серверами. Что не может случиться. Синглтоны должны быть 1: 1 с экземпляром сервера.

Предполагая, что я не могу отойти от этих синглетонов, могу ли я отделить эти экземпляры сервера друг от друга, вызвав класс экземпляра службы как отдельное пространство процесса / памяти?

Я могу только представить, что мне нужно будет запустить несколько EXE-файлов (и использовать WCF для управления), по одному для каждого экземпляра сервера. Это, очевидно, было бы не очень хорошо.

1 Ответ

2 голосов
/ 08 января 2010

А как насчет разных доменов приложений для разных "экземпляров"?

...