es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Pueden dos contenedores intercambiar el servicio en la misma IP:PUERTO en AWS?

El contexto

Estoy tratando de ejecutar un servidor de Minecraft en TCP/25565, lo cual requiere un servidor que esté en funcionamiento constantemente y que tenga acceso a una gran cantidad de memoria y CPU. Sería costoso mantenerlo en funcionamiento constante. Sin embargo, sin tenerlo en funcionamiento constante, no hay forma de que un cliente pueda conectarse fácilmente y encenderlo. Con el fin de brindar la ilusión de un servicio siempre en funcionamiento, he ideado una solución de dos servidores: uno completo y uno de respaldo.

La solución hasta ahora

Tengo dos contenedores Docker que ejecutan servidores en TCP/25565.

El servidor completo ejecuta Minecraft junto con un proceso en segundo plano que se apaga si detecta que no hay clientes conectados. Este código funciona muy bien.

El servidor de respaldo ejecuta un servidor falso de Minecraft que sigue el protocolo y responde a cualquier inicio de sesión con un mensaje que dice “El servidor real aún no está en funcionamiento. Por favor, espere.”, y luego inmediatamente inicia el servidor completo. Este código también funciona.

El problema

Tengo el problema de cómo hacer que el servidor de respaldo y el servidor completo compartan una dirección IP, de modo que el puerto 25565 se enrutará al servidor de respaldo de manera predeterminada, pero al servidor completo cuando esté en funcionamiento. Actualmente, el servidor de respaldo siempre se ejecuta de la forma más económica posible, con la menor cantidad de recursos. Inicia el servidor completo, pero el servidor completo no se puede conectar de ninguna manera. La dirección IP es desconocida para el usuario. No puedo encontrar ninguna forma en ECS de cambiar fácilmente los dos contenedores. ¿Alguien sabe cómo hacer esto?

Posibles soluciones

Creo que esto es posible con un balanceador de carga de aplicaciones, sin embargo, eso costaría $16 al mes para mantenerlo en funcionamiento constantemente, lo cual no ahorraría dinero. Espero que se pueda ejecutar por menos de $5 al mes, siempre y cuando no haya actividad en el servidor completo. Cuando haya actividad en el servidor completo, se pagará por los minutos que esté en funcionamiento.

He investigado la posibilidad de que una función de AWS Lambda o algo similar responda al tráfico de puerto arbitrario o inicie un contenedor ECS como respuesta al tráfico de puerto, lo cual evitaría la necesidad de tener el servidor de respaldo siempre en funcionamiento, pero no puedo encontrar una solución que haga esto.

Podría omitir por completo el proceso y proporcionar una página web a la que los usuarios acudan si el servidor no está encendido, y esta página permitirá a cualquiera encender el servidor fácilmente.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para el intercambio en caliente de contenedores en ECS

    Una posible solución para intercambiar en caliente los dos contenedores en ECS es utilizar un AWS Application Load Balancer. Sin embargo, esta solución podría costar $16 al mes, lo cual no es rentable para este caso.

    Otra solución podría ser utilizar un AWS Lambda o algo similar para responder al tráfico del puerto arbitrario o crear un contenedor ECS como respuesta al tráfico del puerto. Sin embargo, parece que no existe una solución para esto.

    Mientras tanto, el problema se podría solucionar utilizando una página web a la cual los usuarios pueden acceder si el servidor está apagado. Esta página web permitiría a cualquier persona encender el servidor fácilmente.

Comments are closed.