Para mantener el servicio funcionando al menos, puede hacer que el Administrador de servicios de Windows reinicie el servicio automáticamente si falla (consulte la pestaña Recuperación en las propiedades del servicio). Hay más detalles disponibles, incluido un script por lotes para establecer estas propiedades - Restart a windows service if it crashes
La alta disponibilidad es más que solo mantener el servicio desde el exterior - el servicio mismo necesita construirse con alta disponibilidad en mente (es decir, usar buenas prácticas de programación, estructuras de datos apropiadas, pares de recursos y lanzamiento), y todo el stress-tested para asegurarse de que permanecerá bajo las cargas esperadas.
Para comandos idempotentes, tolerar fallas intermitentes (como recursos bloqueados) puede lograrse al volver a invocar el comando un cierto número de veces. Esto permite que el servicio proteja al cliente de la falla (hasta cierto punto). El cliente también debe estar codificado para anticipar el error. El cliente puede manejar las fallas del servicio de varias maneras: el registro, la solicitud del usuario, la repetición de X veces, la grabación de un error fatal y la salida son todos los posibles manejadores; cuál es el adecuado para usted depende de sus requisitos. Si el servicio tiene "estado de conversación", cuando el servicio falla (es decir, el proceso se reinicia), el cliente debe conocer y manejar esta situación, ya que generalmente significa que se ha perdido el estado actual de la conversación.
Una sola máquina va a ser vulnerable a fallas de hardware, por lo que si va a utilizar una sola máquina, asegúrese de que tenga componentes redundantes. Las unidades de disco duro son particularmente propensas a fallas, por lo tanto, al menos deben tener unidades duplicadas o una matriz de discos RAID. Las PSU son el siguiente punto débil, por lo que una fuente de alimentación redundante también vale la pena, al igual que un UPS.
En cuanto a la agrupación en clústeres, Windows admite clústeres de servicios y administra los servicios utilizando un nombre de red, en lugar de nombres de equipo individuales. Esto permite que su cliente se conecte a cualquier máquina que ejecute el servicio y no a un nombre codificado. Pero a menos que tome medidas adicionales, esta es la Conmutación por falla de recursos: dirigir las solicitudes de una instancia del servicio a otra. El estado convergente generalmente se pierde. Si sus servicios están escribiendo en una base de datos, entonces también se debe agrupar para garantizar la confiabilidad y garantizar que los cambios estén disponibles para todo el clúster, y no solo para el nodo local.
Esto es solo la punta del iceberg, pero espero que te dé ideas para comenzar a investigar más.
Microsoft Clustering Service (MSCS)
¿Se puede compartir un poco más de información acerca de lo que está haciendo su servicio? Las estrategias de HA pueden variar según lo que estés tratando de hacer. –
Justin, me interesan los servicios de Windows muy triviales, como el que escucha los sockets o el sondeo/escritura de datos en algunas bases de datos/archivos planos, etc. – asyncwait