|
TCP Server, Нагрузка на сервер |
|
|
|
May 30 2012, 09:14
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
А что значит нагрузочная способность? Сколько соедениний тянет? На каком потоке данных затыкается? Если второе то для GPRS это вообще неактуально. PS как вариант берете любой VirtualSerial<->TCP (например этот http://www.hw-group.com/products/hw_vsp/index_en.html) соеденяетесь с сервером и копируете в этот порт файл. Вот еще ipref то-же под винду http://mayoxide.com/iperf/
|
|
|
|
|
May 30 2012, 11:40
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643

|
Цитата(sobr @ May 29 2012, 18:32)  Чем, как протестировать нагрузочную способность TCP сервера? В общем случае: нужна программа имитирующая нормальную работу того, что там к серверу подключается. Желательно в over9000 потоков. Потом на over9000 компьютерах запускается over9000 копий (на каждом) и смотрится время отклика, используемая память и где узкие места и т.п. Если сервер web, то есть готовое ПО. Или можно прямо тут адрес написать, тебе и протестируют сразу всё подряд.
|
|
|
|
|
May 30 2012, 13:44
|

Знающий
   
Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552

|
Цитата(=F8= @ May 30 2012, 19:44)  over 9000 на несчастный контроллер? Какой контроллер, вы о чем? Я имею в виду сервер в дата-центре. Суть в том, что щас делаю ТСР сервер к которому будут коннектиться Десятки тысяч девайсов через GPRS. А сдругой стороны столько же юзеров с компов и айфонов. Сервер создает практически прозрачный канал между девайсом в машине и юзером, и тот в онлайне мониторит и управляет. Вот и встал вопрос какой мощности железо надо ставить в датацентре. С ходу не нашел готовый инструмент для стресс-теста. Пока выкрутился так: сам сервер VPS 600 MGz, на другом таком же плодятся клиенты в количестве 1000 и хором каждую секунду на мой сервак отправляют пакеты по 100 байт. Проц нагрузился на 15%. тест конечно не очень коректный, но в первим приближении пойдет. А те виртуальные серверы под винду на которые вы ссылки привели попробуйте хотя бы 1000 сокетов нагрузить, скорее всего разочаруетесь.
|
|
|
|
|
May 30 2012, 15:34
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643

|
Цитата(sobr @ May 30 2012, 17:44)  Какой контроллер, вы о чем? Я имею в виду сервер в дата-центре. Суть в том, что щас делаю ТСР сервер к которому будут коннектиться Десятки тысяч девайсов через GPRS. А сдругой стороны столько же юзеров с компов и айфонов. Wooow! Цитата Сервер создает практически прозрачный канал между девайсом в машине и юзером, и тот в онлайне мониторит и управляет. Я правильно понимаю, сервер просто из тцп/удп сокета айфона отправляет в тцп/удп сокет прибора, и наоборот? Т.е. практически обработки информации нет. Это резко меняет дело. Потому, что когда речь идёт о БД, о вебе со скриптами, об каких-то других приложениях -- это одно. А тут просто proxy. Если так, то в принципе почти хватит обычного IBM-PC. Но -- десятки тысяч, это сколько? Тут дальше начинаются вопросы связанные в основном с архитектурой ПО в первую очередь, во второй очереди лимит количества (полу)пустых пакетов в секунду, на сетевом интерфейсе. Для 100Мбит сети во втором случае речь будет идти где-то о 64к пакетов в секунду, с другой стороны поддержать более 64к коннектов на один тцп/удп порт тоже не получится. Но 100МБит сеть закончится в пределах датацентра и дааалеко не факт, что хостинг-провайдер будет иметь достаточно хорошую связность с опсосами, но это отдельный вопрос и пока далёкий. Зато недалёким видится вопрос в регулярной нарушении оной связности, что бывает в любом датацентре, и жалобы десятков тысяч клиентов. А также различные сбои ПО, сети, чего угодно ещё. Напрашивается по меньшей мере два различных сервера на двух разных площадках, множественные A-записи в DNS, и ещё скорей какие-то методы балансирования нагрузки на уровне IP-протокола (маршрутизации). Если это только прокси. Иначе ещё и репликация БД. Что касается архитектуры ПО. google C10k problem. Вопрос в архитектуре ПО сервера. Скорей это небольшое число потоков и параллельных программ (в 2-4 раза большее, чем количество процессоров в сервере), где каждый из потоков (я бы не рекомендовал увлекаться многопоточным программированием без нужды, классические средства межпроцессного взаимодействия позволяют всё то же самое, почти, но при этом граница между процессами более явно видна не сложно вляпаться в неочевидные трудности) или программ обрабатывает достаточно большое (единицы тысяч) соединений. Здесь становится очевидно, что proxy таким образом построить достаточно легко (пример nginx), а сложные приложения, со своей сложной логикой, БД и т.п. -- не очень-то. И стоит сказать про ограничения операционной системы. По-умолчанию обычно больше ~1024 файлов (соединнений) на процесс не открыть, придётся настраивать ОС, вплоть до перекомпиляции ядра (я немножко не в теме, но знаю, проблема есть). Объём ОЗУ опять же. Несколько десятков-сотен КБайт на стек и соединение (одно!) при многопоточном программировнии (C10k -- можно забыть) или несколько килобайт при описываемом подходе. Цитата Вот и встал вопрос какой мощности железо надо ставить в датацентре. VPS. Позволяет масштабирование по ресурсам и деньгам в весьма широких пределах. Цитата Пока выкрутился так: сам сервер VPS 600 MGz, на другом таком же плодятся клиенты в количестве 1000 и хором каждую секунду на мой сервак отправляют пакеты по 100 байт. Проц нагрузился на 15%. тест конечно не очень коректный, но в первим приближении пойдет. Бредовая оценка. Зачастую лимитирует отнюдь не процессор. А (зависит от софта) размер ОЗУ, ограничения ОС на число открытых сокетов, пропускная способность сети и даже непосредственно сетевой карты. А также тип технологии виртуализации. Цитата А те виртуальные серверы под винду на которые вы ссылки привели попробуйте хотя бы 1000 сокетов нагрузить, скорее всего разочаруетесь. AFAIK винда просто не позволяет более N соединений по лицензионным соображениям. Какие десятки тысяч? Только если ultimate-enterprise edition.
|
|
|
|
|
May 31 2012, 10:08
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(sobr @ May 30 2012, 16:44)  Суть в том, что щас делаю ТСР сервер к которому будут коннектиться Десятки тысяч девайсов через GPRS. А сдругой стороны столько же юзеров с компов и айфонов. Сервер создает практически прозрачный канал между девайсом в машине и юзером, и тот в онлайне мониторит и управляет. Я так понимаю, речь идет о сервере мониторинга объектов (охрана, навигация и т.д.). Тоже занимался аналогичным, сделал так: - использую самый дешевый VDS (P500 MHz, 256 RAM с Ubuntu), 5 уе/мес - обработка на сервере МИНИМАЛЬНА: в одном потоке разруливание пакетов и архивация , причем не в БД, а в суточный двоичный файл в собственном сжатом формате с метками времени. Доступ клиента к архиву через свой UDP-протокол, использующий метки времени. - связь с объектами и с клиентами (диспетчера, визуализация, управление) - только UDP, на сервере ОДИН сокет, так гораздо економнее по ресурсам. - каждый клиент поддерживает связь с помощью KeepAlive, отваливается по таймауту, каждое устройство требует подтверждения данных сервером, но не на каждый пакет, а по необходимости. - сервер также обеспечивает транзит управляющий пакетов "клиент - устройство" туда и обратно. - все остальные вычисления, обработка, фильтрация, сортировка, выборка и т.п. - на клиентской программе. Многое зависит также от программирования: все желательно делать компакно и оптимально по коду, заранее чувствуя, как оно будет тянуть ресурс. А вот что касается не-windows - юзеров (Android, iOS etc) - вопрос пока остался открытым. Возможно, придется тоже подымать второй сервер c Apachi и на php делать мультиюзера, работающего с браузерными клиентами, но это уже другой разговор.
Сообщение отредактировал GeGeL - May 31 2012, 10:14
|
|
|
|
|
Jun 1 2012, 03:11
|

Знающий
   
Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552

|
Цитата(GeGeL @ May 31 2012, 17:08)  Я так понимаю, речь идет о сервере мониторинга объектов (охрана, навигация и т.д.). Тоже занимался аналогичным, сделал так:... И сколько клиентов одновременно держит? Цитата(Frolov Kirill @ May 30 2012, 22:34)  Я правильно понимаю, сервер просто из тцп/удп сокета айфона отправляет в тцп/удп сокет прибора, и наоборот? Т.е. практически обработки информации нет. Это резко меняет дело. Потому, что когда речь идёт о БД, о вебе со скриптами, об каких-то других приложениях -- это одно. А тут просто proxy. Ну не совсем. Железка прицепляется к серверу по ТСР, авторизуется и гонит пакеты в бинарном виде. Когда прицепляется юзер через Websockets с такимже идентификатором, сервер переводит пакеты из бинарного в текстовый формат и шлет юзеру и наоборот. От БД пока отказался. Цитата Но -- десятки тысяч, это сколько? Да хрен его знает, сколько влезет. Цитата Тут дальше начинаются вопросы связанные в основном с архитектурой ПО в первую очередь, во второй очереди лимит количества (полу)пустых пакетов в секунду, на сетевом интерфейсе. Для 100Мбит сети во втором случае речь будет идти где-то о 64к пакетов в секунду, с другой стороны поддержать более 64к коннектов на один тцп/удп порт тоже не получится. Но 100МБит сеть закончится в пределах датацентра и дааалеко не факт, что хостинг-провайдер будет иметь достаточно хорошую связность с опсосами, но это отдельный вопрос и пока далёкий. Зато недалёким видится вопрос в регулярной нарушении оной связности, что бывает в любом датацентре, и жалобы десятков тысяч клиентов. А также различные сбои ПО, сети, чего угодно ещё. Напрашивается по меньшей мере два различных сервера на двух разных площадках, множественные A-записи в DNS, и ещё скорей какие-то методы балансирования нагрузки на уровне IP-протокола (маршрутизации). Если это только прокси. Вот для того, что бы это выяснить и хочу нагрузить его по самое "не балуйся". Цитата Что касается архитектуры ПО. google C10k problem. Вопрос в архитектуре ПО сервера... Пока остановился на Node.js Цитата VPS. Позволяет масштабирование по ресурсам и деньгам в весьма широких пределах. VPS только для тренировки "на кошках", буду ставить нормальный сервер. Цитата Бредовая оценка. Зачастую лимитирует отнюдь не процессор. А (зависит от софта) размер ОЗУ, ограничения ОС на число открытых сокетов, пропускная способность сети и даже непосредственно сетевой карты. Какая есть, нет возможности с кучи машин одновременно долбить сервер, по тому то и спросил как это можно устроить. Но в моем конкретном случае на 1000 коннектах пока лимитирует лишь процессор память практически не грузится. Сам сервер сжирает 9.5 МБ при 0 коннектов, а при 1000 - 10МБ. А вот нагрузка на проц растет пропорционально открытым сокетам, точнее даже не открытым а передающим.
|
|
|
|
|
Jun 1 2012, 05:35
|
Знающий
   
Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939

|
Цитата Ну не совсем. Железка прицепляется к серверу по ТСР, авторизуется и гонит пакеты в бинарном виде. Когда прицепляется юзер через Websockets с такимже идентификатором, сервер переводит пакеты из бинарного в текстовый формат и шлет юзеру и наоборот. От БД пока отказался. Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете ЗЫ А чем вам не нравится синтез анализ? Прямо в код сервера включите "клиентов" передающих. Тогда всё что вам надо будет потом - обеспечить достаточный канал. Я на Qt генерил сигналы коннекта и передачи вручную, в отдельном потоке. Нажал кнопку - добавил в тело 1 клиента. И так жамкаешь пока уже кнопка/GUI не жамкается, а зависает  Потом GUI убрал - ещё и запас появился.
Сообщение отредактировал MKdemiurg - Jun 1 2012, 05:50
|
|
|
|
|
Jun 1 2012, 05:47
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Цитата(sobr @ Jun 1 2012, 06:11)  И сколько клиентов одновременно держит? --- VPS только для тренировки "на кошках", буду ставить нормальный сервер. --- А вот нагрузка на проц растет пропорционально открытым сокетам, точнее даже не открытым а передающим. Так вот я и пытаюсь донести мысль... В моей архитектуре как бы нет понятия "к-во клиентов", ибо они используют udp, т.е. в любой момент любая железка и любой клиент могут отправить единичный пакет, и он будет обработан. Значимым есть не к-во клиентов, а их общая активность. Конечно, если открывать тсп для каждого клиента и каждой железки, то VDS будет для кошек. Но это ведь следствие неверного (студенческого) проектирования. Кроме проблемы ресурсов, установленное тсп подразумевает жесткий учет переданных-принятых байт и разрыв сесии при невостановлении. Это не всегда оптимально для нашей задачи (а особенно со стороны движущихся объектов с их реконектами). Цитата(MKdemiurg @ Jun 1 2012, 08:35)  Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете  А зря вы так считаете... Да, лучше не напишешь, но ведь универсальных вещей хороших не бывает. И если заточить конкретно под задачу, то однозначно выйдет лучше. У меня БД организована в виде суточных бинарных файлов, фрагменты которых по необходимости клиент может получить на локаль и там уже анализировать и извлекать что надо. Сервер работает с файлами через стандартные open, fgetc и т.д. Оцените экономию ресурса в сравнении, скажем с SQL
Сообщение отредактировал GeGeL - Jun 1 2012, 06:16
|
|
|
|
|
Jun 1 2012, 06:33
|

Знающий
   
Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552

|
Цитата(MKdemiurg @ Jun 1 2012, 12:35)  Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете ЗЫ А чем вам не нравится синтез анализ? Прямо в код сервера включите "клиентов" передающих. Тогда всё что вам надо будет потом - обеспечить достаточный канал. Я на Qt генерил сигналы коннекта и передачи вручную, в отдельном потоке. Нажал кнопку - добавил в тело 1 клиента. И так жамкаешь пока уже кнопка/GUI не жамкается, а зависает  Потом GUI убрал - ещё и запас появился. Ничего не понял Цитата(GeGeL @ Jun 1 2012, 12:47)  т.е. в любой момент любая железка и любой клиент могут отправить единичный пакет, и он будет обработан. Значимым есть не к-во клиентов, а их общая активность. Я это и имел в виду когда спрашивал о количестве клиентов. Какое количество активных клиентов выдержит ваш сервер с "KeepAlive"? У меня тоже каждый клиент и каждая железка могут в любой момент отправить пакет, и он будет обработан. А вот с удп сомневаюсь что каждый...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|