En una entrevista anterior, me preguntaron cómo escribiría un servicio de Windows de misión crítica que debe mantener el 100% de tiempo de actividad, ser muy receptivo y también ser actualizable. El servicio se describió como una aplicación basada en la comunicación remota que toma las solicitudes, realiza cálculos y envía una respuesta.Actualizando una aplicación con 100% uptime
Mi solución fue tener un servicio muy genérico que simplemente actúa como una puerta de enlace. Este servicio nunca se detendrá. Pondría en cola las solicitudes y las reenviaría a otro servicio en un dominio de aplicación separado que realmente manejaría la solicitud. Tendría que haber al menos dos de estos servicios de manejo, por lo que uno podría reducirse para actualizarse mientras que el otro respondería a las solicitudes entrantes. Las interfaces entre los servicios incluirían una capacidad de handshake para ver si un servicio se estaba ejecutando. Existiría un tiempo de espera muy pequeño, por lo que si un servicio fuera completo, no retendría la solicitud. También enfaticé el punto de que esta solución podría escalar bien ya que podría agregar más de estos servicios en diferentes cajas.
El entrevistador no estaba demasiado loco con esta idea debido a problemas relacionados con la latencia entre la comunicación entre los dominios de la aplicación e incluso a través de la red. Dije que para una aplicación de misión crítica debe establecer una infraestructura sólida como el software solo no puede ser la respuesta. También dijo que actualmente tienen un sistema implementado usando la reinserción. Pensé en cargar ensamblajes en un dominio de aplicación y ver un directorio para cambios de ensamblaje, pero esto parece demasiado propenso a errores.
¿Alguien ha desarrollado algo con requisitos similares? ¿Qué soluciones usaste? ¿Qué no funciona? ¿La reflexión es una opción utilizable?
¡Gran respuesta! Gracias +1 – Bob