# Fog computing

Il Fog computing (o Fog) è un'architettura orizzontale, a livello di sistema, utile a distribuire senza soluzione di continuità risorse e servizi di calcolo, immagazzinamento di dati, controllo e funzionalità di rete sull'infrastruttura che connette il Cloud all'Internet delle Cose (IoT).
Il Fog rappresenta al tempo stesso un'estensione e un miglioramento del paradigma Cloud in supporto ad applicazioni IoT che debbano rispettare precisi parametri di Qualità di Servizio (QoS) per essere processati, quali latenza e banda disponibili per una certa connessione.

## Motivazione

Come previsto da Mark Weiser nel 1991, la tecnologia sta scomparendo, confondendosi nel tessuto stesso della nostra quotidianità fino a divenire indistiguibile da essa. Entro il 2020, CISCO prevede la presenza di oltre 50 miliardi di dispositivi connessi, con una media di 7 per persona (es. veicoli a guida autonoma, sistemi domotici, dispositivi di e-health). Ciascuno di questi dispositivi, raccogliendo dati costantemente, andrà ad accrescere la quantità di informazione da immagazzinare nei datacenter, in attesa di una successiva elaborazione.
Se da un lato la quantità di dati raccolti continua ad aumentare (Big Data), così come la capacità di calcolo necessaria per processarli, dall'altro la connettività disponibile per trasportare l'informazione dall'IoT verso i datacenter non si rivela sempre adeguata allo scopo. In particolare, applicazioni con requisiti stringenti in termini di tempo di risposta o sicurezza non sono supportate al meglio dall'attuale paradigma Cloud che richiede lo spostamento dei dati dai confini della rete verso strutture di elaborazione centralizzate. Si pensi ad esempio a sistemi di controllo per impianti industriali o edifici pubblici, a dispositivi medici connessi, a infrastrutture per la gestione efficiente del traffico veicolare.
Il Fog computing, sfruttando capacità di calcolo, immagazzinamento dati e rete fisicamente vicini all'IoT e altamente distribuiti, si propone di risolvere questi problemi. I nodi Fog, nel duplice ruolo di capacità di calcolo e filtri da e verso il Cloud, renderanno possibile il supporto ad applicazioni time-sensitive, con elevato consumo di banda o con particolari requisiti di sicurezza informatica (che non consentono di spostare i dati sull'infrastruttura Cloud pubblica).

## Definizioni

Nonostante lo spostamento paradigmatico e tecnologico verso il Fog si renda sempre più necessario, una definizione precisa e condivisa di Fog computing deve ancora essere data. Si tenta, in questa sede, di illustrare il dibattito scientifico corrente riportando criticamente alcune delle definizioni messe a punto sinora.
Il primo tentativo di definizione di Fog computing risale al 2012 e si deve a Flavio Bonomi et al.:
   Il Fog computing è una piattaforma altamente virtualizzata che offre capacità di calcolo, immagazzinamento dati e servizi di rete tra i dispositivi terminali e i tradizionali datacentre del Cloud computing. Tutto ciò, in genere, ma non esclusivamente è offerto al limitare (Edge) della rete.
Gli autori sottolineano inoltre che la piattaforma Fog debba godere di una distribuzione geografica capillare e debba essere organizzata gerarchicamente per garantire che l'analisi immediata (o di medio termine) dell'informazione raccolta avvenga quanto più possibile vicino alle sorgenti IoT, mentre l'analisi storica dei dati possa essere eseguita a livello Cloud. Secondo Bonomi, Le caratteristiche del Fog includono: consapevolezza della posizione geografica (location awareness), basse latenze, distribuzione capillare dell'infrastruttura, elevato numero e mobilità dei nodi Fog, interazione in tempo reale, predominanza dell'accesso wireless alla rete, interoperabilità e federazione tra gestori diversi. In generale, questa prima definizione è in linea con quella data da CISCO nello stesso anno:
   Il Fog estende il Cloud per essere più vicino a sensori e attuatori dell'IoT. I nodi Fog possono essere installati dovunque ci sia connettività a Internet [...]. Qualunque dispositivo capace di calcolo, immagazzinamento dati e connettività di rete può essere un nodo Fog (es., controllori industriali, switch, router, server dedicati e videocamere di sorveglianza). [...] Analizzare dati IoT vicino a dove sono generati minimizza la latenza. Riduce il carico della Rete internet di gigabyte di traffico; mantiene dati sensibili all'interno della rete privata.
Nel 2014, Vaquero et al. hanno sostanzialmente esteso la definizione di Fog, a favore di un concetto più fluido, composto da:
   dispositivi decentralizzati e ubiqui [che] comunicano e, potenzialmente, cooperano tra loro e con la rete al fine di eseguire immagazinamento dati o elaborazioni [...] per supportare funzioni di base della rete o nuovi servizi e applicazioni che eseguono in un ambiente sandbox.
Inoltre, secondo Vaquero et al., gli utenti possono cedere parte dei loro dispositivi per ospitare tali servizi in cambio di incentivi alla condivisione. Questa ampia definizione rivela di più sul potenziale del Fog come paradigma in cui gli utenti della rete e i loro dispositivi sono parte fondante e integrante nella profferta di servizi agli utenti stessi. Nella stessa direzione "umano-centrica" vanno i sostenitori dell'Edge-centric computing, secondo i quali il Fog dovrebbe incoraggiare la partecipazione umana, cogliendo al balzo l'opportunità mancata di utilizzare l'enorme quantità di risorse inutilizzate sui moderni dispositivi personali.
In linea con le precedenti è la definizione proposta da Mung Chiang nel 2016:
   Il Fog è un'architettura che usa uno o molti dispositivi utente, o situati vicini all'utente al limitare della rete, per eseguire una quantità sostanziale di operazioni di immagazzinamento dati, comunicazione e gestione.
Chiang sottolinea chiaramente la transizione paradigmatica dal Cloud fino (o il più vicino possibile) all'utente finale. Laddove l'immagazzinamento dati è prerogativa dei datacentre, la comunicazione avviene attraverso la rete dorsale e la gestione è eseguita dai gateway, il Fog si propone di distribuirla su dispositivi cooperanti nella Rete.
Infine, la definizione data da OpenFog Consortium, fondato nel 2015 sembra ad oggi la più generale:
   Un'architettura orizzontale, a livello di sistema, che distribuisce risorse e servizi di calcolo, immagazzinamento dati, controllo e funzioni di rete dovunque tra il Cloud e l'IoT, al fine di accelerare il processo di decision making. Le architetture Fog supportano uno specifico sottoinsieme di applicativi che non possono essere implementati utilizzando le sole architetture Cloud o unicamente i dispositivi intelligenti al limitare della rete.