Обсуждение:Система балансировки нагрузки на несколько СП (монитор производительности серверов и переадресация терминалов)
0 (0)
Обсуждение:Система балансировки нагрузки на несколько СП (монитор производительности серверов и переадресация терминалов) ( Обсуждение примера 21.01.2006 06:43 )
0(0)Сервер статистики (apsrvmon.exe) периодически считывает текущую загрузку компонентов серверов приложений: процессора, памяти, сетевого интерфейса, количество работающих процессов из числа интересующих нас, также проверяет по запросу клиента стаус определенного TCP порта на предмет запущенного СП, используя для этого стандартные средства API и пару недокументированных (но стандартных) функций WinNT. Работает под WinNT, начиная с 4.0 SP4. Тестировал под NT4.0SP6 server, W2kSP4 server, W2k3SP1 server.
Клиентская часть (apsrvbln.exe) опрашивает сервера статистики средствами WSA, затем расчитывает приоритетный сервер по двум алгоритмам: 1 - если найден сервер(ы), где процессор и память нагружены менее 50%, то приоритетным будет тот, где запущено меньше отслеживаемых процессов, 2 - рассчитываются весовые коэффициенты для каждого сервера, приоритетным будет менее загруженный сервер (если от серверов не получено статистики, то веса расчитываются случайным образом, то есть запуск терминала будет произведен, даже если нет ни одного работающего сервера). После выбора приоритетного сервера запускает терминал, настроенного на работу с этим сервером и выгружается из памяти, оставляю терминалу свою консоль. Может вести журнал работы, рассылать критические сообщения средствами SMTP и NetSend, блокировать кнопку закрытия консоли, устанавливать определенный размер консоли в символах отдельно по вертикали и по горизонтали. Также умеет обновлять собственный exe файл, скачанный с сервера статистики (на будующее). Работает под всеми Windows, начиная с 98 (под 95 не проверял). NetSend работает только под NT.
Оба exe файла имеют настроечные ini файлы, создающиеся при первом запуске из шаблона и короткую справку, вызывающуюся со стандартными ключами. apsrvmon.exe - сервис WinNT, ставится и удаляется из командной строки.
Ярлык на клиентских р/ст нужно делать на сам exe-файл apsrvbln. Если ярлык будет на bat-ник, то после запуска term.exe и выгрузки apsrvbln командный процессор (cmd.exe) установит свои параметры консоли перед тем как выгрузится сам, в результате у терминала будут перехватываться некоторые комбинации клавиш и будет невозможно работать мышью. Можно сделать в батнике команду start apsrvbln.exe, но тогда вновь созданная консоль будет иметь параметры по умолчанию вместо пользовательских. Вообщем тут есть над чем подумать: можно, конечно, оставлять apsrvbln в памяти, тогда с консолью будет все красиво, но на каждый терминал будет висеть по экземпляру cmd.exe и apsrvbln.exe, или создавать свою консоль и менять ей параметры - пока решил оставить так. На самом деле батник нужен только под 98, для того чтобы пользователи могли сохранять свои параметры консоли.
Писано на MS VC++. Исходники прилагаются.
Посмотреть пример
>> ОтветитьКруто (+) ( григ 23.01.2006 08:00 )
0(0)Я сделал все на РСЛ, правда на уровне количества процессов. Но зато терминал трогать не надо.
>> ОтветитьИсправил (надеюсь) несколько некритичных ошибок в клиентской части, выложил версию 1.1 ( Goblin 27.01.2006 13:59 )
0(0)Not specified
>> ОтветитьХорошая работа! ( Кубрин Сергей 06.02.2006 14:36 )
0(0)В настоящее время мы в компании собираемся реализовать штатное средство распределения нагрузки для сервера приложений. Хотелось бы учесть имеющиеся реальные достижения в этом вопросе. Поэтому для нас представляет интерес любая имеющющаяся информация по этой теме. Например, как решается у вас следующая проблема. Согласно описанному алгоритму, если одновременно X теминалов обратятся к серверу статистики (утром, например, все начинают работать одновременно), то им всем будет выдан в качестве наимениее загруженного сервера один и тот же адрес, и все эти Х терминалов присоединятся к одному и тому же серверу.
>> ОтветитьДля этого предусмотрен настраиваемый интервал сбора статистики ( Goblin 06.02.2006 18:38 )
0(0)Не могу представить себе ситуацию, когда в течение 2-х секунд (интервал по умолчанию) к серверам подключатся сразу, скажем, 100 пользователей. 2-5 да, возможно, но это не критично.
При разработке данной утилиты ставилась задача обеспечить переадресацию 600 пользователей. Опыт показывает успешную эксплуатацию системы в течение одного месяца. В нашем случае большинство пользователей запускает apsrvbln.exe и терминалы из сети. При этом обеспечивается дополнительная синхронизация за счет использования общего протокола работы. Одновременно производить запись в него может лишь один процесс, остальные ждут. Также можно манипулировать количеством коммуникационных потоков (10 по умолчанию). Если количество одновременных подключений к одному серверу превысит их количество, следующий подключившийся клиент получить статус сервера "down", соответственно будет избран другой сервер (на самом деле эта ситуация малореальна, для такого поведения системы необходимо очень большое количество одновременных подключений (т.к. таймаут подключения к серверу - 1 секунда, за эту секунду серверная часть может обработать достаточно большое количество запросов даже при использовании одного потока).
>> Ответить
Выложил исходники. ( Goblin 26.05.2006 16:55 )
0(0)По поводу ошибок никто не обращался.
Расширить функциональность планы были только по трем задачам:
1. Передавать терминалу командную строку.
2. Опционально передавать в поток ввода консоли имя пользователя, домен и пароль для терминалов, авторизующихся принудительно (решение подобной задачи у меня есть, но это другая утилита).
3. Решить проблему, описанную Кубриным С. в этой теме. Практического смысла в ней мало, но, чтобы все было красиво, можно ввести на серверах статистики счетчик подключенных к этому серверу терминалов в промежутке между считыванием статистики. При этом надо будет добавить запрос клиента на обновление статистики, поменять формат пакета и добавить в клиенте обработку нового счетчика.
Решать эти задачи мне смысла никакого нет, полагаюсь на Вас, уважаемый All. Если будете публиковать модифицированную версию, не забудьте, пожалуйста, сослаться на источник (мелочь, а приятно).
>> Ответить