# Computación autónoma

La computación autónoma (en inglés: autonomic computing, AC) son recursos informáticos distribuidos con características de autogestión, que se adaptan a cambios impredecibles mientras ocultan su complejidad intrínseca a los operadores y usuarios. Iniciada por IBM en 2001, esta iniciativa tenía como finalidad desarrollar sistemas informáticos capazes de autogestionarse, superar el rápido incremento en la complejidad de la gestión de sistemas informáticos y reducir el obstáculo que plantea la complejidad para un mayor desarrollo.

## Descripción

El objetivo de sistema AC es la toma de decisiones adaptativas haciendo uso de políticas de alto nivel. Comprobará y optimizará constantemente su estado y se adaptará automáticamente a condiciones variables. El espacio de trabajo de la computacion autónoma se compone de componentes autónomos (AC) que interactúan entre sí. Un sistema AC se puede modelar en términos de dos esquemas de control principales: local y global, los cuales cuentan con sensores (para automonitoreo), efectores (para autoajuste), conocimiento y planificador/adaptador para explotar políticas basadas en la conciencia de uno mismo y del entorno. Esta arquitectura a veces se denomina como Monitor-Analyze-Plan-Execute (MAPE).
La computación orientada a la autonomía es un paradigma propuesto por Jiming Liu en 2001 que utiliza sistemas artificiales que imitan los comportamientos colectivos de los animales sociales para resolver problemas computacionales difíciles. Por ejemplo, la optimización de colonias de hormigas podría ser un caso de estudio en este paradigma.

## Problema de complejidad creciente

Se prevé que los dispositivos informáticos en uso aumentarán un 38% al año, a la vez que la complejidad media de cada dispositivo va en aumento. Actualmente, este volumen y complejidad es manejado por personas altamente calificadas; pero la demanda de personal de TI calificado ya está superando la oferta, con costos de mano de obra superiores a los costos de equipo en una proporción de hasta 18:1. Los sistemas informáticos han aportado grandes facilidades en cuanto a velocidad y automatización, aunque ahora existe una grean necesidad por automatizar su mantenimiento para ahorrar gastos.
En un artículo de IEEE Computer en 2003, Kephart y Chess advierten que la ambición por la interconectividad de los sistemas y dispositivos informáticos podría convertirse en la "pesadilla de la informática generalizada" en la que los arquitectos de sistemas serían incapaces de anticipar, diseñar y mantener la complejidad de las interacciones. Afirman que la esencia del cómputo autónomo es un sistema de autogestión, liberando administradores de tareas de mantenimiento de nivel bajo y a la vez presentar un mejor comportamiento de sistema.
Un problema general de los sistemas informáticos distribuidos modernos es que su complejidad, y en particular la complejidad de su gestión se está convirtiendo en un factor limitante en su desarrollo. Grandes empresas e instituciones están empleando redes informáticas a gran escala para la comunicación y la computación. Las aplicaciones distribuidas que se ejecutan en estas redes informáticas son diversas y se ocupan de muchas tareas, que van desde los procesos de control interno hasta la presentación de contenido web para la atención al cliente.
Adicionalmente, la computación móvil se abre camino entre estas redes a una velocidad cada vez mayor pues los empleados necesitan comunicarse con sus empresas mientras no están en su oficina. Lo hacen mediante el uso de ordenadores portátiles, asistentes digitales personales, o teléfonos móviles con diversas formas de tecnologías inalámbricas para acceder a los datos de sus empresas.
Esto crea una enorme complejidad en la red informática global lo cual es difícil de controlar manualmente por operadores humanos. El control manual consume bastante tiempo, es costoso y propenso a errores. El esfuerzo manual que se necesita para controlar un sistema infórmatico tiende a incrementar rápidamente.
El 80 % de estos problemas en la infraestructura ocurren al nivel de la base de datos y aplicaciones específicas del cliente. La mayoría de los proveedores de servicios 'autónomos' se encargan del nivel más básico de trabajo (energía, hardware, sistema operativo, red y parámetros básicos de la base de datos).

## Características de los sistemas autónomos

Una posible solución podría ser permitir a los sistemas informáticos de red a gestionarse por sí mismos sin intervención humana directa. La Iniciativa del Cómputo Automático (en inglés: Autonomic Computing Initiative, ACI) planea proveer la base para los sistemas autónomos. Está inspirado por el sistema nervioso autónomo del cuerpo humano. Este sistema nervioso controla funciones importantes del cuerpo humano de manera inconsciente.
En un sistema autónomo autogestionado, el operador humano toma un nuevo rol: en lugar de controlar el sistema directamente, define políticas y reglas generales que guían el proceso de autogestión. Para este proceso, IBM definió los siguientes cuatro tipos de propiedades denominadas propiedades self-star (también llamadas self -*, self-x o auto -*).
* Autoconfiguración (self-configuration): Configuración automática de componentes;
* Autorreparación (self-healing): Descubrimiento automático y corrección de fallas;
* Autooptimización (self-optimization): Monitoreo y control automático de los recursos para asegurar el funcionamiento óptimo respetando los requisitos definidos;
* Autoprotección (self-protection): Identificación proactiva y protección frente a ataques arbitrarios.
Otros como Poslad y, Nami y Sharifi se han expandido en el set de self-star de la siguiente manera:
* Autorregulación: Un sistema que opera para mantener algún parámetro, p. ej., Calidad de servicio, dentro de un rango de reinicio sin control externo;
* Autoaprendizaje: Sistemas que utilizan técnicas de aprendizaje automático como aprendizaje sin supervisión el cual no requiere control externo;
* Autoconciencia (también llamado autoinspección y Autodecisión): El sistema debe conocerse a sí mismo. Debe conocer el alcance de sus propios recursos y los recursos a los que se vincula. Un sistema debe ser consciente de sus componentes internos y enlaces externos para poder controlarlos y administrarlos;
* Autoorganización: Estructura del sistema manejada por modelos de tipo físico sin presión explícita o participación desde fuera del sistema;
* Autocreación (también llamada Autoensamblaje, Autorreplicación): Sistema impulsado por modelos de tipo ecológico y social sin presión explícita o participación externa al sistema. Los miembros de un sistema son automotivados y autoimpulsados, generando complejidad y orden en una respuesta creativa a una demanda estratégica en constante cambio;
* Autogestión (también llamada autogobierno): Un sistema que se gestiona a sí mismo sin intervención externa. Lo que se gestiona puede variar en función del sistema y la aplicación. La autogestión también se refiere a un conjunto de procesos de estrella propia, como la computación autónoma, en lugar de un solo proceso de estrella propia;
* Autodescripción (también llamada autoexplicación o autorrepresentación): Un sistema se explica a sí mismo. Es capaz de ser entendido (por los humanos) sin más explicación.
IBM ha establecido ocho condiciones que definen un sistema autónomo:
El sistema debe
* Conocer a que recursos tiene acceso, cuáles son sus capacidades y limitaciones; y de que manera se relaciona con otros sistemas.
* Ser capaz de configurarse y reconfigurarse automáticamente dependiendo del entorno informático cambiante;
* Ser capaz de optimizar su rendimiento para garantizar el proceso informático más eficiente;
* Ser capaz de solucionar los problemas encontrados mientras se repara a sí mismo o al desviar las funciones del problema;
* Detectar, identificar y protegerse contra diversos tipos de ataques para mantener la seguridad e integridad general del sistema;
* Adaptarse a su entorno a medida que cambia, interactuando con los sistemas vecinos y estableciendo protocolos de comunicación;
* Depender de estándares abiertos y no puede existir en un entorno propietario;
* Anticipar la demanda de sus recursos sin dejar de ser transparente para los usuarios.
Aunque el propósito y comportamiento de los sistemas autónomos varían de un sistema a otro, cada sistema autónomo debe tener las siguientes propiedades para cumplir su propósito:
* Automático : Esto esencialmente significa ser capaz de autocontrolar sus funciones y operaciones internas. Como tal, un sistema autónomo debe ser autónomo y capaz de ponerse en marcha y funcionar sin ninguna intervención manual o ayuda externa. El conocimiento requerido para arrancar el sistema (Know-how) debe ser inherente al sistema.
* Adaptativo : Un sistema autónomo debe poder cambiar su funcionamiento (es decir, su configuración, estado y funciones). Esto permitirá que el sistema haga frente a los cambios temporales y espaciales en su contexto operativo, ya sea a largo plazo (personalización/optimización del entorno) o a corto plazo (condiciones excepcionales como ataques maliciosos, fallas, etc.).
* Consciente : Un sistema autónomo debe poder monitorear su contexto operativo, así como su estado interno para poder evaluar si su operación actual cumple su propósito. Esto le permite controlar la adaptación de su comportamiento operativo en respuesta al contexto o cambios de estado.

## Niveles evolutivos

IBM definió el modelo de implementación autónoma, el cual contiene cinco niveles evolutivos para la implementación de sistemas autónomos:
* El nivel 1 presenta la situación actual en la que los sistemas se gestionan esencialmente de forma manual.
* Los niveles 2 a 4 introducen funciones de gestión cada vez más automatizadas.
* El nivel 5 representa el objetivo final de los sistemas autonómicos y de autogestión.

## Patrones de diseño

La complejidad del diseño de los sistemas autónomos se puede simplificar mediante la utilización de patrones de diseño como el patrón modelo-vista-controlador (MVC) para mejorar la separación de preocupaciones al encapsular preocupaciones funcionales.

## Circuitos de control

Un concepto básico que se aplicará en Sistemas Autonómicos es el decircuitos de control cerrados . Este conocido concepto proviene de la Teoría de Control de Procesos . Esencialmente, un circuito de control cerrado en un sistema de autogestión monitorea algún recurso (componente de software o hardware) y de manera autónoma trata de mantener sus parámetros dentro de un rango deseado.
De acuerdo con IBM, se espera que cientos o incluso miles de estos circuitos de control funcionen en un sistema informático autogestionado a gran escala.

## Modelo conceptual

Un componente fundamental de un sistema autónomo es la capacidad de detección ( Sensores $_{Si}$ ), que permite al sistema observar su contexto operativo externo. Inherente a un sistema autónomo es el conocimiento del propósito (intención) y el Know-how para operar en sí mismo (por ejemplo, arranque, conocimiento de configuración, interpretación de datos sensoriales, etc.) sin intervención externa. La operación real del sistema autónomo está dictada por la Lógica, que es responsable de tomar las decisiones correctas para servir a su Propósito, e influenciada por la observación del contexto operativo (basado en las entradas del sensor).
Este modelo destaca el hecho de que la operación de un sistema autónomo está impulsada por un propósito. Esto incluye su misión (p. ej., el servicio que se supone que debe ofrecer), las políticas (p. ej., que definen el comportamiento básico) y el "instinto de supervivencia". Si se ve como un sistema de control, esto se codificaría como una función de error de retroalimentación o, en un sistema heurísticamente asistido, como un algoritmo combinado con un conjunto de heurísticas que limitan su espacio operativo.