Техника ограничения количества экземпляров нашего приложения на сервере терминалов - PullRequest
3 голосов
/ 09 марта 2010

Я ищу простые способы контроля и ограничения количества экземпляров нашего приложения на сервере терминалов (2003 и 2008).

Цель этого ограничения - убедиться, что мы не перегружаем наши серверы. Это внутреннее административное требование - я не ищу решение по лицензированию.

Соответствующее приложение написано на Python 2.6 (32-разрядная версия), но я рад получить независимые ответы от инструментов разработки. Хотя мы не используем Citrix, я рад получить идеи, связанные с Citrix, в надежде, что смогу использовать аналогичную технику с Terminal Server.

Ответы [ 2 ]

1 голос
/ 12 марта 2010

На основе отзывов в списке рассылки Python Win32 API я также рассматриваю один из следующих методов:

  1. Использование семафоров Windows

  2. Использование пула мьютексов (обеспечивает лучшую возможность восстановления, чем семафоры)

  3. Использование диапазона портов

1 голос
/ 09 марта 2010

Различные экземпляры вашего приложения нуждаются в некотором способе общения друг с другом. Когда экземпляр запускается, он задает вопрос: «Сколько уже запущено?». Если их больше, чем разрешено n, он решает не запускать.

Один из подходов к реализации может заключаться в том, чтобы сделать n файлы для блокировки для n экземпляров вашего приложения, которые вы разрешаете запускать одновременно. Затем приложение пытается получить блокировку для одного из этих файлов; если не может, то сразу выходит. Снимите блокировку, когда вы закончите, но, по-видимому, операционная система снимет блокировку для вас в случае сбоя.

Другой подход заключается в регистрации некоторой уникальной части информации для каждого процесса (PID?) В центральном местоположении (некоторая база данных) при запуске.

Еще третьим может быть использование сетевого сервера только для хоста, где либо выделенная серверная программа, либо один из экземпляров координирует связь с другими экземплярами. Если хост завершается, один из других экземпляров может саморазвититься как сервер.

...