Кто гонял Virtual Box на AWS?

User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Кто гонял Virtual Box на AWS?

Post by Sergunka »

На старости лет подался в ДДОСники. Делаю симуляцию по высокой нагрузке

Мне надо побольше сокетов открыть так как сокету для коннекшина нужен свой IP то вроде как если посадить виртуал бокс на амазовновскую вм должно прокатить. Народ на стоковерфло плюется но вроде как сделать можно.

Если мож кто с сокетами рабоатет плотно то можно как то фейковые АйПи наплодить. Я проверяю имено на критичность открытых коннекшинсов типо.

В общем любые соображения велком вплоть до болезненных :D
"A patriot must always be ready to defend his country against his government." Edward Abbey
helg
Уже с Приветом
Posts: 4827
Joined: 15 May 2001 09:01

Re: Кто гонял Virtual Box на AWS?

Post by helg »

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

Если таки надо, и всё внутри одного хоста, то 127.*.*.* даёт достаточно адресов - они все идут на localhost.

А если наружу, то в случае linux в eth0 (ну или какое имя ifconfig показывает), есть витруальные интерфейсы eth0:0, eth0:1,... - и адреса добавляются командами типа:

# ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
# ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0
[..]
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Кто гонял Virtual Box на AWS?

Post by Sergunka »

helg wrote:Сокету для коннекшина нужен порт, а не IP. С одного клиентского хоста можно открыть тысячу сокетов на 80й порт сервера. У всех этих сокетов будет один IP, но разные порты на стороне клиента. Так что может и не надо много IP?

Если таки надо, и всё внутри одного хоста, то 127.*.*.* даёт достаточно адресов - они все идут на localhost.

А если наружу, то в случае linux в eth0 (ну или какое имя ifconfig показывает), есть витруальные интерфейсы eth0:0, eth0:1,... - и адреса добавляются командами типа:

# ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
# ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0
[..]
Кормилец - спасибо огромное. С меня бесплатный обед. Я сейчас гляну в этом направлении - по результату отпишусь с оказией после праздников.
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
Likenew
Уже с Приветом
Posts: 12065
Joined: 15 Feb 2002 10:01
Location: TX

Re: Кто гонял Virtual Box на AWS?

Post by Likenew »

а вы docker не пробовали? Там каждый имаге имеет свой ИП. Амазон вам может влететь в копеечку.
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Кто гонял Virtual Box на AWS?

Post by Sergunka »

Likenew wrote:а вы docker не пробовали? Там каждый имаге имеет свой ИП. Амазон вам может влететь в копеечку.
phpBB [video]


В условиях данной задачи это одно и то же.
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
Леонид Ильич Брежнев
Уже с Приветом
Posts: 8632
Joined: 22 Mar 2011 01:40

Re: Кто гонял Virtual Box на AWS?

Post by Леонид Ильич Брежнев »

Сергей, со стороны load generator можно использовать порты выше 1024 и до 65К включительно, т.е. в терминологии языка си нужно последовательно

- создаете сокет
- bind его на специфический ай-пи и порт
- send / accept ну и так далее фразы в разговоре между load generator и сервер

код где-то примерно такой. Главноe это bind свою локальную структуру на свой ip и специфический указанный порт

Code: Select all

struct sockaddr_in local; /* socket info about our local */
int mysocket;            /* socket used to send/receive */
socklen_t socksize = sizeof(struct sockaddr_in);

memset(&local, 0, sizeof(local));           /* zero the struct before filling the fields */
local.sin_family = AF_INET;                /* set the type of connection to TCP/IP */
local.sin_addr.s_addr = htonl(<один из ip адресов локальной NIC card goes here>); /* set our address to any interface */
local.sin_port = htons(<порт от 1024 и до 65К goes here>);           /* set the local port number */    

/* create socket */
mysocket = socket(AF_INET, SOCK_STREAM, 0);
  
/* bind local information to mysocket */
bind(mysocket, (struct sockaddr *)&local, sizeof(struct sockaddr));

/* other steps */ 
Когда один ip address полностью исчерпает все порты, на той же машине нужно будет добавить второй ip адресс и так далее. Т.е. условно, если есть 10 ip адресов и 50 тыс. свободных портов, то можно создать до 500 тыс. outgoing ресурсов. Далее мы упираемся в NIC карточку/карточки, поскольку там данные пихаются хоть и быстро (для 1G NIC карточки), но последовательно.

Привязывать (bind) можно только к внешнему адресу, 127.0.0.х не подойдет, поскольку Вы пытаетесь использовать internal loopback address для коммуникации наружу. Вот если бы и сервер и load generator сидели бы на oдной машине, то такой фокус удался бы без проблем. Тестовый инстанс кассанды, для примера, именно так и инсталируется, каждая нода на свой адрес: 127.0.0.1, 127.0.0.2, и так далее.

Только пожалуйста не создавайте тысячи средов на одной машине по одному на каждую комбинацию ip:port, используйте select

Задача сохранять на самом деле status каждой комбинации ip:port, что бы понимать, какой ее статус в каждый момент времени
- она только bind,
- она что-то отправила и ждет получения,
- она получила и требует анализа,
- она проанализировала и ждет след. отправки
- и так далее.

пробегать ее в while(1) и в зависимости от статуса делать следующий шаг.
ybby
Posts: 6
Joined: 26 Oct 2003 04:48
Location: MA

Re: Кто гонял Virtual Box на AWS?

Post by ybby »

Леонид Ильич Брежнев wrote: Только пожалуйста не создавайте тысячи средов на одной машине по одному на каждую комбинацию ip:port, используйте select
select упрется в FD_SETSIZE (обычно 1024) так что больше 1000 коннетов на процесс селектом не получится. Лучше epoll, но много кода писать самому. Еще лучше взять готовый wrk (https://github.com/wg/wrk" onclick="window.open(this.href);return false;) и пользоваться.
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Кто гонял Virtual Box на AWS?

Post by Sergunka »

Ребята спасибо офигено. Я думаю, что я попытаюсь просто тупорыло запускать по порту. По условиям задачи у меня все одно больше 8 сокетов на один бокс не получится так как сам симулятор требует дофига памяти.

Я там вообще попытаюсь вбубенить вот такую хренотень чтоб реально страшно было когда картинка строится динамически со стороны симулятора и на стороне time series когда на одном боксе можно смотреть как симулятор пихает данные и как эти данные проходят через облако за одно и латенси и консистенси наглядно можно показать.

Image

http://bl.ocks.org/mbostock/4060954" onclick="window.open(this.href);return false;
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
Сергей Армянский
Уже с Приветом
Posts: 1997
Joined: 10 Jul 2002 18:45
Location: redwood shores

Re: Кто гонял Virtual Box на AWS?

Post by Сергей Армянский »

voila https://github.com/shekyan/slowhttptest" onclick="window.open(this.href);return false;
And America has so many enemies. Iran, Iraq, China, Mordor, the hoochies that laid low Tiger Woods, undesirable immigrants - by which I mean everyone that came after me, including my children
Palych
Уже с Приветом
Posts: 13723
Joined: 16 Jan 2001 10:01

Re: Кто гонял Virtual Box на AWS?

Post by Palych »

А ну как Jmeter использовать?
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Кто гонял Virtual Box на AWS?

Post by Boriskin »

Sergunka wrote:В общем любые соображения велком вплоть до болезненных :D
Когда я тестировал нагрузку до 150тыс одновременных коннектов на сервак - я напиcал скрипт, который разгонял на 10 реальных разных коробках с Линуксом внутри по 15к клиентов. Практически на каждой системе есть ограничения на кол-во сокетов/FD, поэтому разогнать такое число (150к) на одной системе малореально (сам сервак на Фре пришлось тюнить и максимизировать память).

Если цифра в пару тысяч соединений устраивает - можно разогнать и на одном боксе, коннект идет на один и тот же порт на серваке (который слушает), на клиентской машине каждый новый сокет будет отбирать один свободный порт. Если клиент - не серверная винда - то 1-2к коннектов клиент вынесет, если какой линукс - то можно и до 5-10к разогнать, возможно придется подкрутить ограничения на макс. кол-во сокетов на процесс и на систему, но ядро пересобирать имхо не придется.

Мой опыт показывает, что обычное (не уровня heavy load ISP hardware) офисное оборудование (раутеры, хабы етс) может начать сходить от нагрузки в 100к активных соединений с ума, это может быть неприятным сюрпризом.

В общем - интересное и позновательное дело. :great:
Тупизна как Энтропия. Неумолимо растет.
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Кто гонял Virtual Box на AWS?

Post by Boriskin »

Леонид Ильич Брежнев wrote: Когда один ip address полностью исчерпает все порты, на той же машине нужно будет добавить второй ip адресс и так далее.
Т.е. условно, если есть 10 ip адресов и 50 тыс. свободных портов, то можно создать до 500 тыс. outgoing ресурсов. Далее мы упираемся в NIC карточку/карточки, поскольку там данные пихаются хоть и быстро (для 1G NIC карточки), но последовательно.
Это теория, а на практике все зависит от количества памяти, операционной системы и ее конфигурации.
Тупизна как Энтропия. Неумолимо растет.
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Кто гонял Virtual Box на AWS?

Post by Boriskin »

Sergunka wrote:Ребята спасибо офигено. Я думаю, что я попытаюсь просто тупорыло запускать по порту. По условиям задачи у меня все одно больше 8 сокетов на один бокс не получится так как сам симулятор требует дофига памяти.
А можно ли сбацать на коленке примитивный симулятор симулятора? Ну типа чтото запускается на отдельной треде, присоединяется к серваку, шлет http(s) запрос(ы) на слушателя, получает ответ, отрубает коннект, засыпает на случайное время, просыпается и снова долбит?
Если логика взаимодействия позволяет такое упрощение - таким образом можно легко разогнаться до нескольких тысяч псевдоклиентов и неплохо оттестровать серверную часть варьируя длительность сна и количество псевдоклиентов, например захреначить 1000 клиентов которые не спят вообще и посмотреть, что будет с серваком.
Тупизна как Энтропия. Неумолимо растет.
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: Кто гонял Virtual Box на AWS?

Post by Sergunka »

helg wrote:Сокету для коннекшина нужен порт, а не IP. С одного клиентского хоста можно открыть тысячу сокетов на 80й порт сервера. У всех этих сокетов будет один IP, но разные порты на стороне клиента. Так что может и не надо много IP?
Это предложение оказалось решающим на спрингбуте оказалось порт модифицируется параметром при вызове так, что я легко пусканул 27 серверов типо томкет у себе на маке и показал ошеломленной индусской массе как это должно выглядить.

Индюки побулькали - главный индус выразил мнение чо мол де не это они искали... на этом и порешили.

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

P.S. helg - еще раз респект и огромное спасибо :fr:
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
fruit6
Уже с Приветом
Posts: 4207
Joined: 10 Jan 2004 01:22
Location: n-sk -> MD -> VA

Re: Кто гонял Virtual Box на AWS?

Post by fruit6 »

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

Return to “Вопросы и новости IT”