реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> TCP Server, Нагрузка на сервер
sobr
сообщение May 29 2012, 14:32
Сообщение #1


Знающий
****

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



Чем, как протестировать нагрузочную способность TCP сервера?
Go to the top of the page
 
+Quote Post
sobr
сообщение May 30 2012, 08:40
Сообщение #2


Знающий
****

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



Цитата(sobr @ May 29 2012, 21:32) *
Чем, как протестировать нагрузочную способность TCP сервера?

Что, никто не тестирует свои серваки? Или сервакими не пользуемся?
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 30 2012, 09:14
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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/
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение May 30 2012, 11:40
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 2-02-11
Пользователь №: 62 643



Цитата(sobr @ May 29 2012, 18:32) *
Чем, как протестировать нагрузочную способность TCP сервера?


В общем случае: нужна программа имитирующая нормальную работу того, что там к серверу подключается. Желательно в over9000 потоков. Потом на over9000 компьютерах запускается over9000 копий (на каждом) и смотрится время отклика, используемая память и где узкие места и т.п.

Если сервер web, то есть готовое ПО. Или можно прямо тут адрес написать, тебе и протестируют сразу всё подряд.
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 30 2012, 12:44
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



over 9000 на несчастный контроллер?
Go to the top of the page
 
+Quote Post
sobr
сообщение May 30 2012, 13:44
Сообщение #6


Знающий
****

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



Цитата(=F8= @ May 30 2012, 19:44) *
over 9000 на несчастный контроллер?

Какой контроллер, вы о чем?
Я имею в виду сервер в дата-центре.
Суть в том, что щас делаю ТСР сервер к которому будут коннектиться
Десятки тысяч девайсов через GPRS. А сдругой стороны столько же юзеров с компов и айфонов.
Сервер создает практически прозрачный канал между девайсом в машине и юзером, и тот в онлайне мониторит и управляет.
Вот и встал вопрос какой мощности железо надо ставить в датацентре.
С ходу не нашел готовый инструмент для стресс-теста.
Пока выкрутился так: сам сервер VPS 600 MGz, на другом таком же плодятся клиенты в количестве 1000 и хором каждую секунду на мой сервак отправляют пакеты по 100 байт.
Проц нагрузился на 15%. тест конечно не очень коректный, но в первим приближении пойдет.

А те виртуальные серверы под винду на которые вы ссылки привели попробуйте хотя бы 1000 сокетов нагрузить, скорее всего разочаруетесь.
Go to the top of the page
 
+Quote Post
Frolov Kirill
сообщение May 30 2012, 15:34
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
sobr
сообщение May 30 2012, 16:28
Сообщение #8


Знающий
****

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



Во... Беседа началась. С вашего позволения завтра с компа отвечу, а то с "огрызка" тяжко много писАть.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение May 31 2012, 05:08
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Проще свою тестилку написать и запустить 100500 экземпляров с разных машин. Есть в природе и готовые утилиты, только я ими не пользовался. Попробуйте JMeter или LoadRunner.
Go to the top of the page
 
+Quote Post
Slonofil
сообщение May 31 2012, 09:30
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781



Закажите DDoS на свой адрес =)
Go to the top of the page
 
+Quote Post
GeGeL
сообщение May 31 2012, 10:08
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
sobr
сообщение Jun 1 2012, 03:11
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 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МБ. А вот нагрузка на проц растет пропорционально открытым сокетам, точнее даже не открытым а передающим.

Go to the top of the page
 
+Quote Post
MKdemiurg
сообщение Jun 1 2012, 05:35
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата
Ну не совсем. Железка прицепляется к серверу по ТСР, авторизуется и гонит пакеты в бинарном виде. Когда прицепляется юзер через Websockets с такимже идентификатором, сервер переводит пакеты из бинарного в текстовый формат и шлет юзеру и наоборот. От БД пока отказался.


Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете sm.gif

ЗЫ А чем вам не нравится синтез анализ? Прямо в код сервера включите "клиентов" передающих. Тогда всё что вам надо будет потом - обеспечить достаточный канал. Я на Qt генерил сигналы коннекта и передачи вручную, в отдельном потоке. Нажал кнопку - добавил в тело 1 клиента. И так жамкаешь пока уже кнопка/GUI не жамкается, а зависает lol.gif Потом GUI убрал - ещё и запас появился.

Сообщение отредактировал MKdemiurg - Jun 1 2012, 05:50
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Jun 1 2012, 05:47
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(sobr @ Jun 1 2012, 06:11) *
И сколько клиентов одновременно держит?
---
VPS только для тренировки "на кошках", буду ставить нормальный сервер.
---
А вот нагрузка на проц растет пропорционально открытым сокетам, точнее даже не открытым а передающим.


Так вот я и пытаюсь донести мысль... В моей архитектуре как бы нет понятия "к-во клиентов", ибо они используют udp, т.е. в любой момент любая железка и любой клиент могут отправить единичный пакет, и он будет обработан. Значимым есть не к-во клиентов, а их общая активность.
Конечно, если открывать тсп для каждого клиента и каждой железки, то VDS будет для кошек. Но это ведь следствие неверного (студенческого) проектирования. Кроме проблемы ресурсов, установленное тсп подразумевает жесткий учет переданных-принятых байт и разрыв сесии при невостановлении. Это не всегда оптимально для нашей задачи (а особенно со стороны движущихся объектов с их реконектами).

Цитата(MKdemiurg @ Jun 1 2012, 08:35) *
Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете sm.gif

А зря вы так считаете... Да, лучше не напишешь, но ведь универсальных вещей хороших не бывает. И если заточить конкретно под задачу, то однозначно выйдет лучше.
У меня БД организована в виде суточных бинарных файлов, фрагменты которых по необходимости клиент может получить на локаль и там уже анализировать и извлекать что надо. Сервер работает с файлами через стандартные open, fgetc и т.д. Оцените экономию ресурса в сравнении, скажем с SQL

Сообщение отредактировал GeGeL - Jun 1 2012, 06:16
Go to the top of the page
 
+Quote Post
sobr
сообщение Jun 1 2012, 06:33
Сообщение #15


Знающий
****

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



Цитата(MKdemiurg @ Jun 1 2012, 12:35) *
Зря. Половина нагрузки ( по вашим словам) ляжет на БД. А лучше чем там не напишете sm.gif

ЗЫ А чем вам не нравится синтез анализ? Прямо в код сервера включите "клиентов" передающих. Тогда всё что вам надо будет потом - обеспечить достаточный канал. Я на Qt генерил сигналы коннекта и передачи вручную, в отдельном потоке. Нажал кнопку - добавил в тело 1 клиента. И так жамкаешь пока уже кнопка/GUI не жамкается, а зависает lol.gif Потом GUI убрал - ещё и запас появился.
Ничего не понял laughing.gif


Цитата(GeGeL @ Jun 1 2012, 12:47) *
т.е. в любой момент любая железка и любой клиент могут отправить единичный пакет, и он будет обработан. Значимым есть не к-во клиентов, а их общая активность.
Я это и имел в виду когда спрашивал о количестве клиентов. Какое количество активных клиентов выдержит ваш сервер с "KeepAlive"? У меня тоже каждый клиент и каждая железка могут в любой момент отправить пакет, и он будет обработан. А вот с удп сомневаюсь что каждый...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 21:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016