雲端計算之上還有霧計算!? 霧計算(fog computing)的入門和用例
引言
雲端計算(cloud computing, aka 雲端運算)已經流行了很多年,就算你有沒有IT的背景,都很大可能聽過雲端計算。簡單來說,雲端計算就是計算裝置共享,使用者(user)可以透過網際網路隨時時地(anywhere and any time) 按需(on demand)使用資料中心的裝置,例如資料庫、CPU等等,進行開發和計算。
而云計算已經發展了十多年(由2006年亞馬遜提供雲端服務開始計),當中衍生出不少新技術,霧計算(fog computing) 就是其中之一。下文將會介紹霧計算的由來和應用。
為什麼是霧計算 (fog computing)? 名字背後有什麼意思 ?
雲端計算(cloud computing)名字的由來,我相信大部分人都可以聯想到。簡單來說,就是服務在很遠很遠的地方(i.e.雲端),使用者能夠遠距離存取。

雲端計算的比喻:對於一名使用者,由提供者提供的服務所代表的網路元素都是看不見的,彷彿被雲端掩蓋。(維基百科,2019)
但說到霧計算(fog computing),名字背後究竟有什麼意義呢?代表服務像霧一樣虛無縹緲?還是代表服務就如霧一樣無處不在?其實霧計算的命名,是來自一名句:
霧是更貼近地面的雲
這一句句子正正反映了霧計算的兩個特點:
1. 霧計算是雲端計算的延伸(雲與霧 — 反正都是水的聚合物)
2. 霧計算更接近終端使用者(End User)
霧計算其實和雲端計算一樣,都是在空氣中飄浮,從遠距提供服務。但霧又不像雲一高到遙不可及,反而十分貼近地面,是圍繞著生活周圍效能較弱又更為分散的伺服器。
霧計算的優勢和用例(Use Case)
霧計算既然又分散又弱,究竟有什麼好處呢?其實霧計算有一個絕對的優勢,就是:
霧計算能提供超低延遲
霧計算所採用的架構更接近網路邊緣,因此,存取速度就能非常之快。
用例1 — 智慧停車場
以智慧停車場為例(下圖),這裡有三層的架構,當中包括1)最底層的感應器,用作感知汽車有否在泊車位1中停泊,2)中層的霧計算伺服器,用作資料的初步處理,3)最上層的雲伺服器,用作分析汽車影像。

Fog Computing Use Case 1(筆者繪畫)
當泊車位1中的汽車離開停車場時,就會觸動到感應器製造車離開停車場的事件(Step 1)。但感應器的處理力有限,並未能有效處理到這件事 (event)。因此,感應器就會將資料傳輸到附近的霧計算伺服器。由於霧計算伺服器就佈置在停車場內,當它收到這件事件後,就能快速通知附近的照明系統,將泊車位1的照明關掉,以表示這個泊位可供其他車使用(Step 2)。但由於霧計算伺服器能力亦有限,並未能處理到影像。因此,霧計算伺服器就會將車的影像傳輸到遠端的雲伺服器中。雲伺服器處理力是最強的,但佈置得比較遠。雲伺服器處理完汽車的影像後,分析到汽車的車牌(AB1234),就會將車牌號碼發回到霧計算器中(Step 3)。由於車由泊位到離開處需時,霧計算器就能利用這段時間等待雲伺服器計算,並將車牌結果顯示到離開處(Step 4)。
通過霧計算的佈局,這大大減低了雲伺服器的負擔,又能快速回應環境的需求,一舉兩得。
用例2 — 實時地質監控

Fog Computing Use Case 2 (Openfog, 2018)
又例如以地質監控為例,地質每分每秒都在改變(e.g.溫度、溼度、光度等),每分鐘都在產生大量環境資料。
而且地球廣大遼闊,監控地質不可能只是監控幾十平方米的土壤。每次地質監控都可能涉數千萬平方米。
若然,只佈置一個強大的雲伺服器作地質監控,感應器和雲伺服器的距離可能相差數千萬米遠。就算資訊能以光速直線極速傳播,都可能會有數毫秒的延遲,再加上來回的計算時間,影響將可能很大。

Fog Computing Use Case 2 (Openfog, 2018)
因此,好多作地質監控的公司都會在中間佈置霧伺服器,來減少延遲時間。因霧伺服器較接近感應器,它將能快速回應環境需求,作出實時的監控。
霧計算的架構(Fog Computing Architecture)
透過上述的用例可見,霧計算的架構其實可以分為三層: 1)感應器層(Sensor Layer)、2)霧計算層(Fog Layer)、3)雲端計算層(Cloud Layer)

Fog Computing Architecture (Santos, Wauters, Volckaert, Turck, 2018 + 筆者繪畫)
感應器層(Sensor Layer)的作用顯然是感應環境的變化,並觸發事件(event)通知霧伺服器。
但感應器的設定是需要網路管理員控制的,而設定的方法是可以透過霧伺服器(Fog Layer)來進行。在霧伺服器中,它會提供使用者使用介面(GUI)和API。網路管理員只需將感應器連線到霧伺服器,就能統一管理。而透過霧伺服器的管理,管理員能夠控制不同的感應器的行為。當霧伺服器收到事件時,它能將事件作初步的分析,因應管理員的設定作出迴應(Fog Decision),例如用例一霧伺服器通知附近的照明系統等。如有需要,霧伺服器亦會通知雲伺服器作進一步的分析,並因應雲伺服器的計算,作出迴應。
簡單而言,霧計算層(Fog Layer) 有以下作用:
- 第一層資料分析(First-level Data Analysis)
- 事件(event)生命週期控制和管理(e.g.迴應和分析檢測到的事件)
- 配置感應器(Configuration of Sensors)
而霧伺服器本身亦是需要控制的,而設定的方法是可以透過雲端計算層(Cloud Layer)來進行。與霧伺服器相同,雲伺服器會提供GUI和API來設定霧伺服器。但與此不同的是,雲伺服器亦負責管理整體的服務,如開發人員開發了一個新服務,例如一個新的Fog API,管理人員就能將這個服務配置(Deploy)到全部的霧伺服器中,使整體的服務得以提升。當有一個複雜的事件需要處理時,雲伺服器亦能作出深入的計算,並將結果通知霧伺服器。
簡單而言,雲端計算層(Cloud Layer)有以下作用:
- 總體資料分析(Global Data Analysis)
- 服務層面的控制和管理(Service Level Agreements (SLAs) monitoring)
- 管理及配置霧伺服器(Configuration of Fog Servers)
總結 -- 這是一個雲與霧互相配搭的新年代
如果雲端計算是新一代的集中式計算,那霧計算則是新一代的分散式計算,並且非常適合用於需要實時監控的物聯網(IoT)中。在智慧城市裡,每秒都要處理大量資料(例如交通、風能、農業等),系統間需要頻繁大量的溝通,並對環境作廿出即時迴應。如果全部資料都由雲端處理,一來會造成大量的網路流量,並有可能令雲端會超負荷,二來由於雲伺服器較遠,因此未必能提供足夠快的服務。霧伺服器正正能作為有效的中間處理,初步處理資料,並作出即時的迴應,消除資料儲存及資料傳輸的瓶頸。當資料需要大量計算時,就可以將資料傳輸到雲端。雲與霧互相配搭,將能最有效迴應環境的需求。