自主運算

**自主運算**（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-\*）性質。

1. 自我配置（Self-configuration）：組件的自動組態。
2. 自我修復（Self-healing）：自動發現故障，並且自動修正故障
3. 自我優化（Self-optimization）：自動監控以及控制資源，在定義的要求下確保機能的最佳化。
4. 自我保護（Self-protection）：針對任何的攻擊，可以主動識別並且保護。

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

1. 自我管理（Self-regulation）：系統為了維持某些參數（例如服務質量）而運作，在沒外部控制下有一定的重新啟動區間。
2. 自我學習（Self-learning）：系統用不需外部控制的機器學習技術（例如無監督學習）。
3. 自我覺察（Self-awareness），也稱為自我檢測（Self-inspection）及自我決策（Self-decision）：系統要瞭解系統本身。必須知道其自身資源的其連結資源的極限。為了控制以及管理，系統需要知道其內部元件以及外部連結。
4. 自我組織（self-organization）：在沒有外在壓力或是外來介入下，由實體模型驅動的系統結構。
5. 自我創建（Self-creation）也稱為自組裝（Self-assembly）或自我複製（Self-replication）：系統在沒有具體壓力或是系統外部參與的情形下，被生態以及社會類別旳模型所驅動。系統成員有 self-motivated 和自我驅動（self-driven）的特性，在持續變化的策略需求以下產生了開創性的回應，並在其中呈現複雜性以及秩序。
6. 自我管理（Self-management）也稱為自我治理（self-governance）：系統在沒有外界介入的情形可以自我管理。要管理的東西可能會依系統以及應用而變化。自我管理也代表一組的 self-star 程序（例如自主運算），而不是單一的 self-star 程序。
7. 自我敘述（Self-description）也稱為自我解釋（self-explanation）或自我呈現（Self-representation）：系統可以解釋自己。可以在不需進一步解釋的情形被人所瞭解（和反射式編程有關）。

IBM 更訂定了自主系統的八個條件:

系統要

1. 知道本身存取哪些資源，其容量以及限制，以及和其他系統連接的方式以及原因。
2. 可以依變化的計算環境，自動的進行自身的組態和重新組態。
3. 可以將自身的性能最佳化，以確保計算程序可以最有效率
4. 可以避開所遇到的問題，可能是修補自身的系統，或是可以有繞道演算法，可以避開有問題的點。
5. 在面對不同的攻擊時，可以進行偵測、識別和保護，以維持整體系統的安全性（security）和完整性。
6. 在環境變化時可以適應環境，和周圍的系統互動，並且建立通訊協定
7. 以開放標準為基礎，不會處在某個私有的環境下
8. 可以預測對資源的需求情形，同時對使用者保持透明。

## 演進程度

IBM 針對自主系統的佈署情形，定義了五個演進的程度，也稱為自主佈署模型（autonomic deployment model）：

* 第 1 級是最基礎的，代表目前的系統是用人工來管理。
* 第 2 至 4 級表示較多的自主管理機能。
* 第 5 級表示自主系統完全自我管理的終極目標。

## 設計模式

自主系統的設計複雜度可以用設計模式來簡化，例如使用 MVC 模式，透過封裝和機能有關的關注來達到關注點分離。

## 控制迴路

控制迴路也是會應用自主運算中的基本概念。此一概念源自過程控制理論。在本質來看，自主管理系統中的控制迴路會監控資源（軟體或是硬體的資源），自主調整，設法在其參數保持在一定範圍內。

依照 IBM 所述，大型的自主管理電腦系統中會有上百到數千個控制迴路。

## 概念模型

自主系統的基礎建構模塊就是感知能力（感測器 Si），讓系統可以觀察其外在的運作情形。自主系統的固有特性就是有關其運作目的的知識，以及在沒有外在介入時，可以自行運作的知識（可能是透過 Bootstrapping 法、組態知識、針對感測資料的詮釋等）。自主系統的實際運作是由「邏輯」所決定，邏輯是為了達到運作目的所進行的決策，同時也會受到感測器所感測的外在運作情形所影響。

此一模型強調自主系統的運作是由其目的（purpos