hosting e la suddivisione delle risorse: le tecnologie #tipoftheday
TRANSCRIPT
Hosting e la suddivisione delle risorse:
le tecnologie
Limitare le risorse
in un ambiente di hosting è possibile,
ricorrendo a piattaforme come CloudLinux,
capaci di isolare ogni singolo
account utente
#e-Commerce
Contenuti a cura di HostingTalk
Le offerte di hosting sono croce e delizia tanto degli utenti quanto dei provider.
Per gli utenti, un servizio di hosting è abbordabile
dal punto di vista economico
e facilmente gestibile dal punto di vista tecnico.
Allo stesso tempo, i provider come Aruba offrono l’hosting perché permettono
una democratizzazione delle tecnologie di hosting a un mercato
che lo richiede e che si rende quindi profittevole.
Il rovescio delle medaglia sta nella difficoltà di gestire questi ambienti di hosting.
Dal punto di vista degli utenti,
la condivisione del medesimo hardware provoca problemi di sovra-utilizzo
da parte di alcuni clienti attestati sul server,
che, approfittando dell’assenza di limiti sulla CPU e sugli accessi al disco,
elaborano un quantitativo di richieste tali da sovraccaricare il server
e provocare difficoltà operative a chi condivide
la stessa macchina.
In questo modo,
i siti più popolari provocano lentezza operativa,
instabilità e malfunzionamenti ai siti più piccoli residenti sul medesimo server.
Dal punto di vista dei provider,
la gestione di questa situazione e delle lamentele dei clienti che ne derivano
è difficoltosa e costosa, soprattutto per la necessità di individuare
l’utenza approfittatrice e gestire anche conseguenti interruzioni di servizio.
Il problema della limitazione delle risorse in un ambiente di hosting
può essere risolto impostando dei limiti al consumo hardware
e una giusta suddivisione delle risorse computazionali e di connettività
fra le utenze attestate sul medesimo server.
Una delle più interessanti tecnologie in questo senso
prende il nome di CloudLinux.
Anche se molti continuano a vedere CloudLinux come una distribuzione Linux a sé stante (basata su CentOS), in realtà CloudLinux è un’estensione per CentOS/RHEL
(Red Hat Enterprise Linux) integrata ormai da oltre un anno nel kernel di Linux,
ad affiancare tecnologie di containerizzazione molto più vetuste come chroot e cgroups.
Agli utenti di hosting , CloudLinux risolve il problema dei “vicini” di server che vogliono dominare gli spazi comuni, offrendo ai provider un controllo granulare sulle risorse da assegnare a ogni singolo cliente di hosting attestato sulla medesima macchina.
CloudLinux previene che un
utente o pochi utenti possano
impossessarsi delle risorse di un
server e permette di configurare
specifici limiti d’utilizzo
su RAM, CPU, processi
e accessi al disco
per ogni singolo account.
L’obiettivo è una ripartizione equa delle risorse,
evitando che ci possano essere rallentamenti per gli utenti che usano meno risorse e che il provider debba intervenire in modo manuale per risolvere i problemi di sovra-utilizzo.
Per consentire ai provider di gestire al meglio l’assegnazione delle risorse,
CloudLinux crea un ambiente di runtime isolato e limitato per ogni singolo account utente.
Questo ambiente prende il nome di Lighweight Virtual Environment (LVE)
ed è essenzialmente paragonabile a un container.
LVE di CloudLinux permette di gestire a livello kernel l’isolamento,
il monitoraggio e la reportistica sulle risorse usate dagli utenti e
ha la stessa origine tecnologica della virtualizzazione basata sui contenitori.
CloudLinux si differenza infatti da un qualsiasi hypervisor, come VMware,
in quanto non permette di eseguire diversi sistemi operativi sul medesimo server,
ma permette la coesistenza indipendente di diversi ambienti utenti sullo stesso server Web,
sotto lo stesso sistema operativo.
Mentre le funzionalità di un hypervisor si adattano meglio agli ambienti di cloud computing,
CloudLinux e le tecnologie ad esso simili sono più adatte a un contesto di hosting.
Le limitazioni su CPU, memoria e I/O disco possono essere impostate tramite CloudLinux
in modo che siano valevoli per ogni hosting presente sul server; oppure possono essere rese differenti sulla base del singolo account, delle singole necessità tecniche,
magari corrispondenti anche a diverse condizioni economiche praticate ai diversi clienti.
In questo modo, i provider possono anche pensare di associare maggior risorse agli account
altospendenti o, viceversa, aumentare la densità server con scarso impatto negativo sugli
account di hosting già esistenti. CloudLinux, quindi, rappresenta non solo una garanzia
per un servizio di hosting efficiente, ma anche un’opportunità per i provider,
per minimizzare gli sprechi e massimizzare i guadagni.
Se si fatica ancora a capire l’importanza di una tecnologia come CloudLinux,
si può pensare a un esempio lampante. Un Web server Apache genera un nuovo processo
per ogni connessione utente quando si sta lavorando in single-thread. Ognuno di
questi processi consumano grandi quantità di memoria, soprattutto se pongono
in esecuzione linguaggi come Python, che richiede una nuova istanza
dell’interprete Python per ogni processo.
Sotto queste condizioni,
un sito traffica utilizzerà la maggior parte delle risorse con un conseguente
rallentamento per tutti gli altri siti ospitati in hosting.
In casi come questi, CloudLinux controlla il numero di processi che un cliente può creare, limitando il problema al singolo account utente. Se un account inizia a consumare
una grande quantità di risorse viene limitato. Il server continuerà ancora a funzionare
bene e solo i processi dell’account incriminato verranno rallentati o bloccati.
L’uso di CloudLinux, inoltre, migliora anche l’aspetto sicurezza.
In un’installazione CentOS/RHEL tradizionale, a un account viene impedito
di navigare nel file system degli altri clienti e nei loro processi attraverso apposite
impostazioni sui permessi file di Linux o tramite opportuna configurazione del php.ini.
CloudLinux fornisce un modo più sicuro per gestire questo aspetto,
con la creazione di un livello di astrazione superiore,
basato sulle funzioni di base del kernel.
Infatti, CloudLinux previene gli attacchi symlink e riduce la
visibilità al livello di ProcFS.
Per fare ciò, a livello di kernel implementa:
• CageFS che permette di dotare ogni singolo account di hosting di un proprio file system virtuale dedicato, in modo che un cliente non possa vedere gli altri account di
hosting, né le directory, i file ed i processi ad essi associati;
• SecureLinks che previene la possibilità che un utente crei un link simbolico a un file PHP qualsiasi di un altro utente (come il wp-config.php), i cui permessi sono
solitamente impostati a 644. Un file di questo tipo può essere letto tramite Web browser
perché Apache lo permette, e SecureLinks assicura che questo file possa essere
acceduto da Apache, solo se il proprietario del file è il medesimo utente
che sta eseguendo l’Apache VirtualHost.
Altri componenti avanzati di CloudLinux sono:
• il PHP Selector, che permette al cliente di eseguire la versione di PHP che predilige nel
proprio account di hosting. Con PHP Selector, l’utente può evitare di sottostare a un
upgrade forzato e imposto dal provider, scegliendo il motore PHP che più conviene per
l’esecuzione del proprio codice. In questo modo, viene garantito all’utente l’eseguibilità
di codice legacy, compatibile solo con i rilasci meno aggiornati del PHP;
• il MySQL Governor, utilizzato per terminare le query SQL di SELECT lente o di lunga
esecuzione, che potrebbero occupare le risorse senza utilità. L’algoritmo di rilevamento
degli abusi MySQL è capace di identificare un numero eccessivo di byte letti/scritti da o
verso un database, o un gran numero di connessioni MySQL. L’algoritmo prende in
considerazione molti parametri diversi e quando individua un utente che fa uso eccessivo
di risorse, gli impedisce di accedere a MySQL per un periodo di tempo che può prolungarsi
con il protrarsi dell’abuso.
Chi crede che CloudLinux sia l’unica tecnologia capace di limitare e suddividere
le risorse fra i differenti account di hosting, si sbaglia.
In realtà, CloudLinux non solo non è l’unica piattaforma che funziona in questo senso,
ma non è nemmeno la prima.
Esistono infatti altre tipologie di piattaforme di virtualizzazione
basate su contenitori che in qualche modo hanno di volta in volta aggiunto
delle funzionalità che con il tempo hanno portato a soluzioni come CloudLinux e simili.
In passato, si parlava dei FreeBSD Jail, ossia di un meccanismo di implementazione di una
virtualizzazione a livello di sistema operativo FreeBSD, che consentiva di partizionare un
elaboratore basato su FreeBSD in diversi minisistemi indipendenti, chiamati, appunto, jail.
FreeBSD Jail consentiva l’isolamento a livello di file system, di rete e permetteva di imporre
limiti sulla memoria, sullo spazio disco e sulla CPU, ma non consentiva il controllo sull’I/O
e la live migration. Per l’epoca, 1998, questa tecnologia era comunque avanzata,
soprattutto se paragonata al semplice chroot (1982).
I più recenti cgroups, anche per via della posizione di rilievo conquistata da Linux nel settore, sono invece la risposta all’esigenza di compartimentare in modo più efficace gli utenti. Accanto a FreeBSD Jail, nei medesimi anni si parlò di Linux-VServer (2001), Virtuozzo Containers(2001), OpenVZ (2005) e Solaris Containers (2005).
Ora, accanto CloudLinux si possono citare:
• BetterLinux , che per quanto sviluppato e usato da Bluehost, Hostmonster, Fastdomain, Hostgator e altri, non sembra godere della stesse fortuna di CloudLinux;
• Hive, le cui funzionalità si sovrappongono a quelle di CloudLinux, anche se Hive usa RLimits per limitare l’uso delle risorse e basa l’isolamento degli account di hosting
su chroot, mentre CloudLinux agisce a livello kernel e sfrutta, come detto, CageFS.