AppDomain или процесс для каждого экземпляра? - PullRequest
7 голосов
/ 16 февраля 2011

Я хотел бы знать, должен ли я использовать процесс для каждого экземпляра или я должен запускать несколько экземпляров в одном процессе, используя AppDomain s.

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

Программное обеспечение должно поддерживать не менее 500 одновременных подключений, возможно, даже больше.Типичная установка потребует от 3 до 7 экземпляров приложения для непрерывной работы, хотя все, кроме одного экземпляра, будут иметь всего несколько соединений (они предназначены для тестирования, эталонных сред и т. Д.).В домашних условиях, для целей разработки, будет максимум 40 сред с максимум 20 одновременными соединениями на среду.Моей целевой хост-средой будет 64-битная Windows.

Я знаю, что IIS использует модель, в которой он имеет только один процесс и несколько AppDomain с, но я также вижу преимущества в наличии процесса на экземпляр.

Что я должен использовать и почему?

РЕДАКТИРОВАТЬ:
Различные экземпляры касаются разных версий одного и того же приложения, которые не могут быть запущены водин AppDomain вместе.Кроме того, разные экземпляры не должны связываться друг с другом, только с главной службой для целей управления.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

Подводя итог:

  1. У вас есть серверное приложение, похожее на telnet.
  2. На одной машине будет работать несколько версий этого приложения.
  3. Разным экземплярам НЕ нужно общаться друг с другом; только с общим обслуживанием.

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

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

Кстати, вы ошиблись, заявив, что IIS имеет только 1 процесс с несколькими доменами приложений. IIS может ускорить несколько процессов для одного сайта. Это называется веб-сад . Кроме того, IIS запускает как минимум один процесс для каждого пула приложений, который у него есть. Вы можете видеть их как отдельные процессы w3wp.exe, выполняющиеся на сервере IIS.

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

Наконец, количество пользователей не имеет значения, так как оно будет зависеть от использования ресурсов приложениями. Это может означать сеть, память или даже диск, в зависимости от того, какие именно функции выполняет ваше приложение.

2 голосов
/ 16 февраля 2011

ну, вы не можете иметь процесс за сеанс пользователя, так как вы планируете 500 из них.То же самое можно сказать и о 500 доменах приложений.IIS использует домен приложения для каждого приложения, а не сеанса пользователя, в рамках хост-процесса (пула приложений).

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

1 голос
/ 17 февраля 2011

Довольно просто структурировать ваш сервер, чтобы вы могли решить это позже и, что более вероятно, иметь некоторую смесь;какой-то общий хостинг с несколькими доменами приложений и какой-то один хостинг?

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

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

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

Лично я склонен встроить все это в службу, а затем просто запустить несколько копий , если вам нужно несколько серверова затем вы можете смешивать и сопоставлять по своему усмотрению, а профилирование всей системы предполагает, что вы должны это сделать.

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

...