Panoramica
La multitenancy è un'architettura software in cui una singola istanza software può servire più gruppi di utenti distinti. I prodotti Software-as-a-Service (SaaS) sono un esempio di architettura multitenant.
Nel cloud computing, la multitenancy può anche riferirsi all'hosting condiviso, in cui le risorse server sono suddivise tra diversi clienti.
La multitenancy è l'opposto della tenancy singola, quando un'istanza software o un sistema informatico include 1 utente finale o 1 gruppo di utenti.
Le applicazioni multitenant in genere includono un livello di personalizzazione per i tenant, ad esempio la personalizzazione dell'aspetto dell'applicazione o la possibilità per il tenant di decidere in merito ad autorizzazioni e restrizioni specifiche di controllo dell'accesso per gli utenti.
Dal timesharing al SaaS
L'idea di multitenancy esiste da decenni. Negli anni '60, le università con potenti e costosi mainframe svilupparono un software di timesharing che consentiva a più utenti di accedere al computer contemporaneamente.
Quel concetto non è mai scomparso. Alla base del cloud computing risiede infatti l'architettura multitenant. Un cloud pubblico acquisisce un pool di risorse condivise, con potenza di elaborazione e memoria, e lo divide tra più tenant. I dati e i carichi di lavoro di ciascun tenant rimangono isolati, anche se operano nello stesso computer fisico o nello stesso gruppo di computer.
Se applichiamo il concetto all'architettura software, arriviamo al moderno SaaS. Un provider SaaS esegue una singola istanza di un'applicazione e offre l'accesso a singoli clienti. I dati di ciascun utente rimangono isolati, anche se tutti gli utenti accedono allo stesso software.
Quando si fa riferimento a una piattaforma di orchestrazione di container come Kubernetes, il termine multitenancy in genere indica un singolo cluster che serve più progetti. Il cluster è configurato in modo che ciascun progetto sia isolato dagli altri.
Multitenancy e cloud computing a confronto
Come indicato in precedenza, il concetto di multitenancy è una caratteristica importante del cloud computing perché consiste in una singola istanza di un'applicazione software fornita a più tenant. I cloud sono considerati Platforms-as-a-Service (PaaS), al contrario della multitenancy, che è spesso associata alle applicazioni SaaS.
I provider di servizi cloud forniscono agli utenti la piattaforma e l'infrastruttura IT sottostante necessaria per il cloud computing da un pool di risorse che vengono quindi allocate a più utenti (o tenant).
Con architettura cloud si intende il modo in cui tutti i componenti e le funzionalità necessari per creare un cloud sono connessi per erogare una piattaforma online sui cui eseguire le applicazioni.
Per progettare una piattaforma cloud occorrono infatti livelli aggiuntivi di sviluppo per integrare le tecnologie di containerizzazione, orchestrazione, interfacce di programmazione delle applicazioni (API), routing, sicurezza, gestione e software di automazione.
Architettura di cloud pubblico: ambienti cloud creati con risorse, la cui proprietà non è dell'utente finale, che possono quindi essere ridistribuite ad altri tenant.
Architettura di cloud privato: spesso definiti come ambienti cloud dedicati esclusivamente all'utente finale, in genere si trovano all'interno del firewall dell'utente e a volte sono on premise.
Vantaggi dell'architettura multitenant
La multitenancy offre numerosi vantaggi, evidenti nella diffusione del cloud computing.
La multitenancy consente di risparmiare denaro. L'elaborazione è più economica su scala ridotta e la multitenancy consente di consolidare e allocare le risorse in modo efficiente, risparmiando così sui costi operativi. Per un singolo utente, pagare per l'accesso a un servizio cloud o a un'applicazione SaaS è spesso più conveniente rispetto all'esecuzione di hardware e software a tenant singolo.
La multitenancy offre flessibilità. Se hai investito in componenti hardware e software, questi potrebbero raggiungere la capacità massima nei periodi di richiesta elevata o rimanere inattivi nei periodi di richiesta bassa. Un cloud multitenant, invece, può allocare un pool di risorse agli utenti che ne hanno bisogno, man mano che le esigenze di tali utenti aumentano e diminuiscono. In qualità di cliente di un provider di cloud pubblico, puoi accedere a capacità aggiuntive quando ne hai bisogno e non pagare quando non ti servono.
La multitenancy può essere più efficiente. La multitenancy riduce la necessità per i singoli utenti di gestire l'infrastruttura, gli aggiornamenti e la manutenzione. I singoli tenant possono fare affidamento su un provider di cloud centrale, anziché sui propri team, per gestire le operazioni di routine.
Inizia subito a utilizzare il cloud.
Quando è preferibile il tenant singolo
Nonostante i vantaggi della multitenancy, in alcuni scenari i sistemi informatici a singolo tenant risultano più adatti, come ad esempio un cloud privato o il proprio datacenter.
In particolare, la sicurezza dei dati per le applicazioni che includono dati altamente sensibili. Gli ambienti di cloud pubblico e i prodotti SaaS sono progettati per isolare carichi di lavoro e dati e per supportare processi complessi. Tuttavia, nei test controllati, i ricercatori hanno scoperto vulnerabilità che potrebbero, almeno in teoria, consentire attacchi tra tenant in ambienti cloud.
In pratica, questi rischi sono relativamente ridotti. Le vulnerabilità della tenancy condivisa sono rare e richiedono alti livelli di sofisticazione, secondo un rapporto del 2020 sulle vulnerabilità del cloud della U.S. National Security Agency. Dopo il rapporto della NSA, non sono stati documentati attacchi cross-tenant a nessuno dei principali provider di cloud pubblico. La NSA considera questi rischi inferiori ai rischi derivanti da un controllo degli accessi scarso e da configurazioni errate.
Ambienti multitenant in Linux
Chiunque crei un ambiente multitenant dovrà scegliere se isolare gli ambienti utilizzando macchine virtuali (VM) o container.
Con le VM, un hypervisor avvia computer guest, ciascuno con il proprio sistema operativo, nonché applicazioni e dipendenze. Inoltre, l'hypervisor fa in modo che gli utenti siano isolati l'uno dall'altro.
Rispetto alle VM, i container offrono un modello più ottimizzato, flessibile e con una scalabilità semplice. I container semplificano i deployment multitenancy di più applicazioni su un singolo host, usando il kernel e il runtime del container per avviare ciascun container. Rispetto alle VM, ciascuna delle quali include il proprio kernel, le applicazioni eseguite in container condividono un kernel, anche tra più tenant.
In Linux®, i namespace consentono a più container di utilizzare la stessa risorsa contemporaneamente senza creare un conflitto. Proteggere un container è come proteggere qualsiasi processo in esecuzione.
Se si utilizza Kubernetes per l'orchestrazione dei container, è possibile configurare ambienti multitenant mediante un singolo cluster Kubernetes. È possibile separare i tenant nei relativi namespace e creare policy che impongano l'isolamento dei tenant.