¿Cómo construir servidores retorcidos que puedan hacer intercambio de código caliente en Python?

StackOverflow https://stackoverflow.com/questions/4864380

  •  27-10-2019
  •  | 
  •  

Pregunta

He desarrollado un conjunto de servidores de transmisión de audio, todos están usando Twisted y están en Python, por supuesto. Funcionan, pero un problema me sigue preocupando, cuando encontré algunos errores allí en el servidor en ejecución, o quiero agregar algo al servidor, necesito detenerlos y comenzar. A diferencia de los servidores HTTP, está bien reiniciarlos cuando, pero no está bien con los servidores de transmisión de audio. Una vez que reinicio mi servidor de transmisión, significa que mis usuarios encontrarán una desconexión.

Intenté configurar una orilla (un servicio SSH para servidores retorcidos, puede iniciar sesión y escribir el código Python en la consola para hacer algo) y conectarse a la consola, recargar los módulos de Python en la mosca. A veces funciona, pero difícil de controlar. Nunca se sabe cuántas instancias de clase antigua hay en el servidor, y algunos de ellos podrían ser difíciles de alcanzar, y las relaciones de clase serían muy complejas. Además, puede funcionar en algunas situaciones, pero a veces realmente necesita reiniciar el servidor, por ejemplo, está ejecutando el servidor con el reactor Selector, y desea ejecutarlo con Epoll Reactor en su lugar, luego debe reiniciarlo. Otro ejemplo, cuando el uso de la memoria sube demasiado alto, también debe reiniciarlos.

Para construir dicho sistema, tengo una idea en mi cabeza, creo que es posible entregar esas conexiones y datos de un proceso a otro. Por ejemplo:

Tenemos un servidor llamado Broadcasting, y la instancia en ejecución está en Rev.123, y queremos reemplazarlo con Rev.124.

Broadcasting rev.123 is running....
Startup Broadcasting rev.124 ....
Broadcasting rev.124 is stand by
Hand over connections from instance of rev.123 to instance of rev.124
Stop Broadcasting rev. 123 instance

es posible? No tengo idea de que la vida útil de las manijas de socket se une a los procesos o no, pensé que los enchufes creados por un proceso se cerrarán cuando se mate el proceso del creador, pero no estoy seguro. Si es posible, ¿hay alguna pauta o artículos para diseñar este tipo de mecanismo de intercambio de código caliente? ¿Y hay algo que pueda lograr lo que quiero para Twisted ya está hecho?

Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top