自主运算

自主运算（Autonomic computing，简称AC）是指分散式运算系统中的自我管理特性，可以适应不可预期的变化，而且可以封装其本质上的复杂，不需让使用者以及操作人员了解。自主运算是IBM在2001年提出的倡议，此倡议后来的目的是要开发可以自我管理的电脑系统，可以面对运算系统管理快速成长的复杂性，并且减少复杂性对未来系统扩充造成的阻碍。

## 叙述

自主运算系统的概念是要用高层次的政策，进行可适应环境的决策。系统会持续的检查其自身状态，并且进行最佳化，自动调适系统以适应变动的条件。自主运算框架是由彼此互动的自主组件（AC）组成。自主运算可以用二个主要控制架构（区域及全域）组成，配合传感器（可以进行自我监控）、执行器（自我调整）及知识，并且有规划器／调适器，利用基于自我意识和环境意识的政策，以进行调整。此架构有时会称为Monitor-Analyze-Plan-Execute（MAPE）。

在此愿景的驱使之下，已提出许多以“自我调整”自主组件为基础的架构框架。另一个类似的趋势是许多有关多智能体系统的研究。不过大部分的作法是用集中式或是云端服务器架构, 主要是为了降低管理成本，而不是为了要有复杂软件系统或是提供创新的服务。有些自主系统和移动代理（mobile agents）有关，其界面是透过松耦合的通讯机制。

自主导向运算（Autonomy-oriented computation）是Jiming Liu在2001年提出的范式，用人工智能系统模仿社会性动物的集合性行为，以此来解决复杂的计算问题。例如，蚁群算法可以会在此范式下进行探讨。

## 复杂度持续成长

根据预测，人们使用的运算装置每年会以38%的比例成长，设备的平均复杂度也在逐渐增加。目前而言，设备机能的多寡以及复杂度是由有专业技能的人员来进行管理，但是针对有专业IT技能人员的需求已大幅超越可以供给的数量，人口成本约是设备的18倍。运算系统因为其速度及自动化，带来许多的助益，但目前因为经济上的考量，自动化维护的需求也非常迫切。

Kephart和Chess在2003年电气电子工程师学会《计算机》的文章中提出警告，认为电脑系统以及设备互连性的理想：可能会因为架构师无法预期系统互动的复杂，进行设计和维护，因此变成“普适计算的梦魇”。他们提出自主运算的本质是系统自我管理、让管理者可以不用处理低阶的任务管理，提供比较好的系统行为。

有关现代分布式系统普遍存在一个问题：其复杂度（特别是管理上的复杂度）会成为未来发展上的限制因素。大公司以及组织为了沟通以及计算的需要，布署了大规模的计算机网络。在网络上进行的分散式应用范围非常广，会处理许多的工作，从内部控制流程，到呈现网页内容给客户等。

而且移动计算进入此一网络的速度是越来越快。公司员工不在办公室时，需要可以和公司通讯互动。会使用的设备有笔记型电脑、个人数码助理、移动电话，再配合各种的无线通讯技术来存取公司的资讯。

产生的计算网络非常的复杂，用人工来控制非常困难。人工控制非常费时，昂贵，而且容易出错。在电脑网络系统在成长时，要管理系统需要的人力也会快速增加。

在这类的基础架构中，80%的问题是发生在针对特定客户的应用程序，以及数据库层。大部分自主服务的提供者只保证到最基本的“plumbing层”（电源、硬件、操作系统、网络以及基础的数据库参数）。

## 自主系统的特点

有一个方式可以让现代的电脑网络系统在没有人员直接介入的情形下自主管理。Autonomic Computing Initiative（ACI）的目的就是建立自主系统的基础。其灵感是由人体的自主神经系统而来。人体神经系统可以控制重要的人体机能（例如呼吸、心率和血压），不需要人有意识的介入调整。

在自我管理的自主系统中，人员的角色也和以往不同：人不再直接控制系统，而是订定一般性的政策和规则，以此引导自我管理的流程。为了这个流程，IBM定义了以下四种特性，称为self-star（也称为self-*、self-x或auto-*）性质。

- 自我配置（Self-configuration）：组件的自动组态。
- 自我修复（Self-healing）：自动发现故障，并且自动修正故障
- 自我优化（Self-optimization）：自动监控以及控制资源，在定义的要求下确保机能的最佳化。
- 自我保护（Self-protection）：针对任何的攻击，可以主动识别并且保护。

而Poslad、Nami和Bertels将以下的概念加入self-star集合里。

- 自我管理（Self-regulation）：系统为了维持某些参数（例如服务质量）而运作，在没外部控制下有一定的重新启动区间。
- 自我学习（Self-learning）：系统用不需外部控制的机器学习技术（例如无监督学习）。
- 自我觉察（Self-awareness），也称为自我检测（Self-inspection）及自我决策（Self-decision）：系统要了解系统本身。必须知道其自身资源的其连结资源的极限。为了控制以及管理，系统需要知道其内部元件以及外部链接。
- 自我组织（self-organization）：在没有外在压力或是外来介入下，由实体模型驱动的系统结构。
- 自我创建（Self-creation）也称为自组装（Self-assembly）或自我复制（Self-replication）：系统在没有具体压力或是系统外部参与的情形下，被生态以及社会类别旳模型所驱动。系统成员有self-motivated和自我驱动（self-driven）的特性，在持续变化的策略需求以下产生了开创性的回应，并在其中呈现复杂性以及秩序。
- 自我管理（Self-management）也称为自我治理（self-governance）：系统在没有外界介入的情形可以自我管理。要管理的东西可能会依系统以及应用而变化。自我管理也代表一组的self-star程序（例如自主运算），而不是单一的self-star程序。
- 自我叙述（Self-description）也称为自我解释（self-explanation）或自我呈现（Self-representation）：系统可以解释自己。可以在不需进一步解释的情形被人所了解（和反射式编程有关）。

IBM更订定了自主系统的八个条件:

系统要

- 知道本身存取哪些资源，其容量以及限制，以及和其他系统连接的方式以及原因。
- 可以依变化的计算环境，自动的进行自身的组态和重新组态。
- 可以将自身的性能最佳化，以确保计算程序可以最有效率
- 可以避开所遇到的问题，可能是修补自身的系统，或是可以有绕道算法，可以避开有问题的点。
- 在面对不同的攻击时，可以进行侦测、识别和保护，以维持整体系统的安全性（security）和完整性。
- 在环境变化时可以适应环境，和周围的系统互动，并且建立通讯协定
- 以开放标准为基础，不会处在某个私有的环境下
- 可以预测对资源的需求情形，同时对使用者保持透明。

## 演进程度

IBM针对自主系统的布署情形，定义了五个演进的程度，也称为自主布署模型（autonomic deployment model）：

- 第1级是最基础的，代表目前的系统是用人工来管理。
- 第2至4级表示较多的自主管理机能。
- 第5级表示自主系统完全自我管理的终极目标。

## 设计模式

自主系统的设计复杂度可以用设计模式来简化，例如使用MVC模式，透过封装和机能有关的关注来达到关注点分离。

## 控制回路

控制回路也是会应用自主运算中的基本概念。此一概念源自过程控制理论。在本质来看，自主管理系统中的控制回路会监控资源（软件或是硬件的资源），自主调整，设法在其参数保持在一定范围内。

依照IBM所述，大型的自主管理电脑系统中会有上百到数千个控制回路。

## 概念模型

<image>

自主系统的基础建构模块就是感知能力（感测器Si），让系统可以观察其外在的运作情形。自主系统的固有特性就是有关其运作目的的知识，以及在没有外在介入时，可以自行运作的知识（可能是透过Bootstrapping法、组态知识、针对感测资料的诠释等）。自主系统的实际运作是由“逻辑”所决定，逻辑是为了达到运作目的所进行的决策，同时也会受到感测器所感测的外在运作情形所影响。

此一模型强调自主系统的运作是由其目的（purpos