Smart Timeouts

Smart Timeouts es una feature de Overlord bastante simple, pero que me ha demostrado ser eficaz. Aunque la arquitectura de Overlord, la cual es un árbol encadenado (inspirado de alguna manera por DNS), es simple pero escala muy bien, eso trae el inconveniente de que un fallo en la cadena C puede ralentizar la cadena B y A. Al menos el cliente verá un error, pero no sin esperar unos segundos valiosos.

Continuando, la idea de esta feature es deshabilitar la cadena que esté fallando, y está solo puede ser la cadena final (o la cola), o "la cadena C". Esto al menos se debe realizar desde la cadena B. Al igual que el timeout se propaga, esta deshabilitación de la cola trae consigo el beneficio de que, dado que no se está intentando conectar a una cadena fallando, no generará un timeout por lo que todo el sistema se verá beneficiado, ahorrando unos buenos recursos, más si está sobrecargado.

Suponiendo una lista de cadenas inicial A -> B -> C, el cliente intentará conectarse (indirectamente a través de las propias cadenas) a todas las cadenas para usar sus recursos. Todas las cadenas continúan operando con normalidad, pero repentinamente la cadena C falla por cualquier razón. El cliente ve el ejemplo luego de unos segundos. La cadena B sabe que hubo un fallo y dependiendo de cuanto sea la tolerancia, pondrá la cadena fallando en una lista negra por un periodo de tiempo configurable. Sin embargo, este periodo de tiempo configurable en el que la cadena fallando puede estar puede no ser suficiente, dado que tal vez el problema de la cadena C (la cadena fallando) puede persistir por un largo tiempo, así que cuando finalice el tiempo en el que esa cadena estará en la lista negra, el cliente se intentará conectar nuevamente sin éxito, lo cual pondrá nuevamente la cadena fallando en la lista negra, pero es donde se incrementa el tiempo hasta un máximo configurable. Así hasta que la cadena que esté fallando vuelva a la vida.

Esto no quiere decir que el timeout se ha eliminado, no tendría sentido, es mejor arreglar el problema de la cadena fallando o simplemente configurar Overlord para eliminar o deshabilitar la cadena.

Así de simple funcionan los Smart Timeouts en un sistema distribuido como Overlord.