Multi Tenancy utilizzando l'appartamento gem

Cerchiamo innanzitutto di capire la differenza tra single e multi-tenancy

Locazione singola
:

Ogni cliente ha la propria istanza software, il proprio DB e serve per un solo cliente. In questo caso il software può essere personalizzato per soddisfare le specifiche esigenze del cliente poiché è indipendente.


Multilocazione:

In questo caso, una singola istanza dell'applicazione software serve più clienti. Qui chiamiamo ogni cliente come inquilino. Qui possiamo modificare le regole dell'interfaccia utente e le regole aziendali ma non possiamo modificare il codice dell'applicazione poiché la stessa architettura è condivisa da più clienti. È economico poiché i costi di sviluppo e manutenzione del software sono condivisi tra i clienti. Ma gli aggiornamenti possono essere effettuati solo dal provider.

singolo-tenente-multitenente
Vantaggi:
1. Un unico hardware che gestisce più clienti.
2. Risparmio sui costi. I costi possono essere ripartiti tra tutti i clienti.
3. Facile manutenzione
4. La configurazione può essere modificata senza toccare la base di codice.
5. È possibile aggiungere facilmente nuovi inquilini, poiché si tratta di un'architettura condivisa.

Svantaggi:
La personalizzazione del DB sarà difficile da gestire, poiché si tratta di un unico DB condiviso tra più clienti con tenant diversi.

Esistono milia, acts_as_tenant e apartment gem per gestire la multi-tenancy nell'applicazione Rails.

Appartamento gioiello:

Questo gioiello adotta un modo diverso di gestire la multi-tenancy. Funziona creando un altro DB per ciascun inquilino. Per PostgreSql, crea un altro schema per ciascun tenant. Mi piace questo approccio alla luce del fatto che, per questa situazione, l'informazione è davvero disimpegnata. Il database non è condiviso e, nel caso in cui sia necessario cancellare le informazioni di un cliente, tutto ciò che devi fare è semplicemente eliminare il suo database (o modello). Supporta anche gli ascensori e consente il passaggio automatico tra l'inquilino del cliente e quindi l'automazione della logica di commutazione.

Questo gemma ci aiuta a gestire la multi tenancy in un'applicazione Rails.

Aggiungete la riga sottostante al vostro Gemfile ed eseguite l'installazione del bundle.

gioiello "appartamento"

Per generare il file inizializzatore dell'appartamento, esegui il comando seguente:

bundle exec rails genera apartment:install
config.excluded_models = %w{ Tenant } 

Qui si possono specificare i tenant di portata globale, come il modello di autenticazione, comune a tutti i tenant.

In questo caso, creerò un cliente con sottodomini, in modo che ogni volta che il cliente accede all'applicazione, l'appartamento recupera i sottodomini e interroga il database, in base al sottodominio dell'inquilino.

rotaie g impalcatura Nome cliente:string tenant_domain:string

Fare

rotaie db:migrare

Dobbiamo creare l'inquilino dell'appartamento, una volta creato il cliente.

Appartamento::Tenant.create('tenant_name') - Per creare un inquilino

Utilizza after_create callback nel tuo modello per creare tenant.

def crea_tenant Appartamento::Tenant.create(tenant_domain) end

Una volta eseguito il callback di cui sopra, tutte le migrazioni verranno eseguite sotto il rispettivo tenant.

La commutazione dei sottodomini sarà gestita automaticamente quando si richiede l'applicazione con i sottodomini. Di seguito è riportata la linea di configurazione per cambiare i tenant in base al sottodominio.

Rails.application.config.middleware.use 'Appartamento::Ascensori::Sottodominio'

Per passare da un inquilino all'altro

Appartamento::Inquilino.switch!('nome_inquilino')

Tutte le query di ActiveRecord saranno indirizzate al tenant specifico quando viene richiesto lo switch.
Switch si troverà nell'ambito root quando viene chiamato senza argomenti.

Anche il cambio di inquilino può essere fatto in base al primo sottodominio, ma è necessario impostare la configurazione nel file di inizializzazione. Possiamo anche escludere alcuni sottodomini, come il sottodominio normale.

config.middleware.use 'Appartamento::Ascensori::PrimoSottodominio'
Appartamento::Ascensori::FirstSubdomain.excluded_subdomains = ['www']

Possiamo anche limitare gli utenti a non creare alcuni domini come www, admin. Questi domini non saranno disponibili per gli utenti durante la registrazione.

È necessario decommentare la riga di configurazione sottostante nel file inizializzatore dell'appartamento.

Appartamento::Ascensori::Sottodominio.excluded_subdomains = ["pubblico", "www" e "admin"]

Possiamo anche cambiare, in base all'host completo. Qui dobbiamo trovare il nome del tenant corrispondente nell'hash utilizzando la seguente riga di configurazione. Dobbiamo aggiungere la riga seguente al tuo application.rb

config.middleware.use 'Appartamento::Ascensori::HostHash', {'example.com' => 'example_tenant'}

Abbandonare gli inquilini:

Il comando seguente può essere utilizzato per eliminare i tenant:

Appartamento::Inquilino.drop('nome_inquilino')

Si prega di controllare la risorsa ufficiale di gem per trovare ulteriore documentazione. 

Iscriviti per gli ultimi aggiornamenti

Articoli correlati

Informazioni sull'autore del post

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


it_ITItalian