простой подход .net для распределения нагрузки между двумя серверами приложений - PullRequest
1 голос
/ 04 мая 2011

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

У меня есть два сервера приложений (на базе Windows 2003 Server), на которых я хочу выполнить балансировку нагрузки. Для обсуждения назовем его AppX1 и AppX2. Приложение также использует SQL Server для хранения и извлечения.

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

Мне нужен простой подход , где я могу разделить нагрузку обработки между двумя серверами приложений. Возможно, AppX1 может быть ведущим, а AppX2 - ведомым. AppX1 может связываться с AppX2 для обработки определенного набора местоположений. Каков наилучший способ добиться этого общения? WCF - это вариант?

Как только AppX2 завершит работу, он сбросит информацию обратно в базу данных и сообщит AppX1. Затем AppX1 может отправлять больше расположений в AppX2 для обработки.

Ответы [ 2 ]

0 голосов
/ 08 мая 2011

Вместо того, чтобы разделять вашу функциональность по серверам, я бы, не зная дополнительных / более глубоких деталей вашей системы, реализовывал вызовы службы без сохранения состояния, многопоточное поведение в реализации службы (очень легко в .NET) и один экземпляр /узел множественного параллелизма.Затем используйте фактический балансировщик нагрузки или даже просто Windows NLB, чтобы разделить вызовы между серверами, обслуживая один вызов на одном сервере наиболее эффективным способом.

0 голосов
/ 04 мая 2011

Я не знаю, как вы читаете данные из файлов Excel, но в принципе я бы сделал что-то вроде этого:

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

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

Теперь обработайте данные и запишите результаты в базу данных.

С этим механизмом серверы приложений не взаимодействуют напрямую друг с другом - электронная таблица используется для разделения работы между ними.

Если вы хотите получить больше фантазии, столбец Обработанные в электронной таблице может иметь 3 состояния: Не обрабатывается, Ожидает и Обработан. Когда вы захватываете данные, вы устанавливаете для столбца значение Ожидание, и после того, как результаты записаны в базу данных, вы снова открываете электронную таблицу и устанавливаете для столбца значение Обработано, одновременно захватывая следующий набор данных (Не обработано). .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...