Создание Тысяч Микросервисов/Докеров С Разными Ip-Адресами.

  • Автор темы T7riljlq
  • Обновлено
  • 21, Oct 2024
  • #1

Мне нужно смоделировать множество соединений. Сейчас использую Curl.

Как лучше всего развернуть тысячи таких запросов с разными IP-адресами с помощью какого-либо сценария?

T7riljlq


Рег
24 Oct, 2009

Тем
88

Постов
190

Баллов
660
  • 25, Oct 2024
  • #2

Linux, без докера

В Linux вы можете создать произвольное количество IP-адресов для каждого интерфейса. Комментарий в https://serverfault.com/questions/328146/max-number-virtual-ip-addresses-per-nic сообщает об успехе 2000 года и сообщает о 5000 успешных IP-адресах.

Так. Выберите любой Linux-компьютер в своей интрасети (это, конечно, может быть виртуальная машина), и создайте столько IP-адресов на его единственном интерфейсе Ethernet (MAC-адрес), сколько пожелаете.

Допустим, вы используете частную сеть 10.0.0.0/8, тогда вы можете выполнить множество из них:

curl

Вы должны иметь возможность использовать

curl
(or maybe
curl
), чтобы использовать определенный адрес источника. Для
curl
, it's
curl
и т. д. Запустите завитки в фоновом режиме ("&"), и они будут работать более или менее одновременно - или найдите какой-нибудь тестовый драйвер (другой вопрос), чтобы запустить их за вас.

Это даст вам множество запросов с разных IP-адресов, но все они будут удобно выполняться на одной машине.

Докер, тривиально

С помощью докера: просто создайте как можно более маленький образ, который будет подключаться к вашему серверу. Вы можете использовать

ifconfig
without any special options.

Затем запустите 1000 докер-контейнеров, как обычно. Каждый автоматически получит IP-адрес во внутренней сети докера (по умолчанию 172.x.0.0/16).

https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host указывает на то, что это возможно с использованием оборудования, которое сегодня не так уж редко; наивные 1000 докер-контейнеров использовали для них примерно 3 ГБ ОЗУ. В этом вопросе также есть несколько советов по вариантам, которые можно использовать для уменьшения потребности в памяти. Помимо памяти, накладных расходов не будет слишком много, то есть с точки зрения процессора они должны быть сопоставимы.

Docker со специальной сетью

--help
opens up manually created networking for you. You should be able to cobble something together (just check the individual
docker network
страниц, все это говорит само за себя) и объедините это с
curl
approach explained above. This would mean that you only need one container for your
--bind-address=10.0.0.3
s и запустите тысячи из них внутри этого контейнера.

Однако я бы попробовал сначала просто запустить ваши 1000 контейнеров, если только вы не ограничены в объеме оперативной памяти, для простоты использования.

О
wget
...

Что бы вы ни делали, не начинайте просто

--interface 10.0.0.3
in each instance, but have each runner be an endless loop of back-to-back
curl --interface eth0:3
звонки. Таким образом, вы избежите длительных перерывов между запуском и остановкой отдельных заданий; это, очевидно, особенно важно для варианта «1000 докер-контейнеров». В ответе, указанном выше, они отмечают, что им потребовалось немало минут, чтобы запустить эти тысячи контейнеров, поэтому вы не хотите делать это снова и снова.

И вы могли бы также избавиться от

ifconfig eth0:1 10.0.0.2 netmask 255.0.0.0
ifconfig eth0:2 10.0.0.3 netmask 255.0.0.0
...
ifconfig eth0:260 10.0.1.6 netmask 255.0.0.0
...
altogether and create small networking app in the language of your choice (Perl, Ruby, C, Java...) to avoid process startup overhead.

 

Bytehunter.cdm


Рег
04 Jul, 2006

Тем
64

Постов
191

Баллов
551
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно