2010-01-08 3 views
3

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

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

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

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

МАШИНА -> ServiceHost (службы Windows?) -> экземпляр сервера -> Управление Singleton объекты

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

Какой бы (где -> 1: 1, => 1: много):

МАШИНА -> ServiceHost (? Служба Windows) => экземпляр сервера ->управления Singleton объекты

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

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

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

+0

Думать об этом, можно как-то использовать Reflection? –

+0

Как экземпляр сервера будет обращаться к объектам управления? – Lazarus

+0

Что ты делаешь? Ваша проблема, похоже, не описана выше; и у меня нет понятия о том, что означает «Масштабирование синглтонов» ... (Как у вас больше 1 ..., что кажется контр-интуитивным, если не сказать больше: P) –

ответ

2

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

+0

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

Смежные вопросы