miércoles, 8 de julio de 2015

Arquitectural Patterns: Units of mitigation

Patterns for Fault Tolerant Software


Arquitectural Patterns: Units of mitigation

¿Como puedes prevenir que un sistema completo llegue a estar no disponible cuando ocurre un error?
Existen sistemas de software que están compuesto por un solo componente, a estos sistemas se les conoce como monolíticos. El problema con estos sistemas es que cuando ocurre un error, el sistema completo puede mantenerse inaccesible por un momento, mientras se hace la recuperación de tal error. Otra desventaja es que el manejo de errores(incluye la identificación, mitigación y tratamiento) puede ser menos flexible.

Una estrategia para sistemas grandes es crear unidades de mitigación, esto es: separar el sistema en componentes, estos componentes deben de tener algunas propiedades que se comentan mas adelante, lo importante por el momento es considerar que al separar un sistemas en diferentes componentes tenemos la posibilidad de aislar los componentes que presenten alguna falla y no afectar el sistema completo, es decir, los demás módulos pueden seguir trabajando. Entre mas pequeñas sean las unidades de mitigación, mas opciones tenemos para recuperar y mitigar errores por que el sistema puede tratar los errores por unidad mientras las otras unidades se mantienen trabajando.

Durante el diseño de la Arquitectura del sistema se decide cuales son las unidades de mitigación o los componentes que compondrán el sistema completo, entendiendo que cada una de las unidades debe de ser tolerante a fallas, para que el sistema completo también lo sea.

Las interfaces entre las unidades de mitigación deben de ser claras y muy bien definidas. Es a través de estas interfaces que las acciones de mitigación actúan para la recuperación de errores o reducir el impacto de los errores.

Las unidades de mitigación deben de contener acciones atómicas que no confíen fuertemente en la comunicación con otras unidades de mitigación para completar su tarea.

De manera general podemos identificar 4 fases en la tolerancia a fallas, las cuales son: Detección del Error, Recuperación del Error, Mitigación del Error y Tratamiento de la falla.


Se parte de una Falla Latente que tenga el sistema, cuando la falla se activa, genera un error, el sistema debe de ser capaz de detectar el error, en este caso se debe de disponer de la información necesaria para saber el tipo de error que se genero, una vez que el error ha sido detectado tenemos las fases de recuperación y de mitigación, ambas fases son indispensables para que la unidad de mitigación pueda volver a estar disponible, una vez que el procesamiento del error ha sido terminada se puede tener la unidad de mitigación disponible y empieza la fase de tratamiento de la falla, la última fase puede requerir mas tiempo para completarse, ya que se trata de correcciones de software(bugs), cambios de hardware, restablecimiento de recursos,......

El patrón de Unidades de mitigación es una actividad que se lleva a cabo a nivel de diseño, durante el diseño es donde se toma la decisión de que unidades de mitigación compondrán el sistema completo.
No existe reglas o procedimientos que sean aplicados de manera tajante para realizar la identificación de las unidades de mitigación, a continuación se describen algunas sugerencias:

- Divide el sistema en partes que puedan contener ambos, probables errores y recuperación de errores.

- Selecciona la división que haga mas sentido al sistema completo.

- Una vez identificadas las unidades de mitigación, construye el resto del sistema alrededor de estas unidades.

Referencia:

Patterns for Fault Tolerant Software, By Robert Hanmer