Могут ли два контейнера поменяться местами, обслуживая один и тот же IP:ПОРТ туда и обратно в AWS?

#amazon-web-services #docker #amazon-elastic-beanstalk #amazon-ecs #aws-application-load-balancer

#amazon-веб-сервисы #докер #амазонка-эластичный бобовый стебель #amazon-ecs #aws-балансировщик нагрузки приложений

Вопрос:

Контекст

Я пытаюсь запустить сервер Minecraft по протоколу TCP/25565, для которого требуется постоянно работающий сервер, имеющий доступ к большому объему памяти и процессору. Это было бы дорого для постоянного запуска. Однако без постоянного запуска клиент не сможет легко подключиться и включить его. Чтобы создать иллюзию постоянно работающей службы, я придумал решение с двумя серверами: один полный сервер и один резервный.

Решение до сих пор

У меня есть два контейнера Docker, которые запускают серверы по протоколу TCP/25565.

Полный сервер запускает Minecraft вместе с фоновым процессом, который отключается, если он когда-либо обнаружит, что клиенты не вошли в систему. Этот код работает просто отлично.

Резервный сервер запускает поддельный сервер Minecraft, который придерживается протокола и отвечает на любой вход в систему сообщением, в котором говорится: «Настоящий сервер еще не запущен. Пожалуйста, подождите.», а затем немедленно запускает полный сервер. Этот код также работает.

Проблема

Проблема, с которой я сталкиваюсь, заключается в том, как сделать резервный сервер и полный сервер общими IP-адресами, чтобы порт 25565 по умолчанию направлялся на резервный сервер, но на полный сервер всякий раз, когда он работает. В настоящее время резервный сервер всегда работает самым дешевым способом с наименьшим количеством ресурсов. Он запускает полный сервер, но к полному серверу все равно невозможно подключиться. Его IP — адрес неизвестен пользователю. Кажется, я не могу найти в ECS никакого способа легко поменять местами два контейнера. Кто-нибудь знает, как это сделать?

Возможные решения

Я считаю, что это возможно с помощью балансировщика нагрузки приложений, однако постоянная работа обойдется в 16 долларов в месяц, что не совсем экономит деньги. Я надеюсь запустить это менее чем за 5 долларов в месяц, если предположить, что на полном сервере нет активности. Когда есть активность на полном сервере, она будет оплачена в ту минуту, когда она запущена.

Я изучил способ, которым AWS Lambda или что-то в этом роде реагирует на произвольный трафик портов или запускает контейнер ECS в качестве ответа на трафик портов, устраняя необходимость в постоянно находящемся в режиме ожидания сервере, но я, похоже, не могу найти решение, которое это делает.

Я мог бы полностью пропустить процесс и предоставить веб-страницу, на которую пользователи переходят, если сервер не включен, и эта веб-страница позволит любому просто включить сервер.

Комментарии:

1. Вы можете разместить балансировщик сетевой нагрузки перед контейнерами и зарегистрировать/отменить их регистрацию по мере необходимости. Вы можете предоставить клиентам IP-адрес балансировщика нагрузки. Хотя балансировщики нагрузки стоят денег, вы бы хотели сначала проверить цены.

2. Гипотетически, что будет, если первый контейнер перенаправит трафик на второй контейнер? Недостатком является то, что вы потеряете возможность IP-запрета определенных игроков.

3. Ха, забавно, что я попробовал это сделать и просто добавил некоторый контекст, когда вы писали этот комментарий. Они составляют около 16 долларов в месяц. Я надеюсь, что затраты на этот аспект всегда будут намного дешевле. lt; $5. Надеюсь, около 1-3 долларов за отсутствие активности.

4. Я бы не возражал против такого проксирования трафика, но я бы беспокоился о задержке, а также о способности меньшего сервера обрабатывать весь трафик, если у него минимальные ресурсы. Хотя, возможно, это и не проблема. Это не похоже на то, что тяжелая работа сервера связана с сетевым трафиком. Также написание этого кода переадресации портов потребует некоторых усилий, но я ничего не могу сделать.

5. Вы можете запустить свой собственный обратный прокси-сервер, т. Е. HAProxy или Nginx, для обратного прокси-сервера на основе нужного контейнера. Таким образом, ваша идея с балансировщиком нагрузки является правильной. Если вы хотите, чтобы это было дешево, сверните свой собственный в контейнер.