2009-07-09 10 views
17

Esistono modelli comuni che le persone utilizzano per creare applicazioni multi-tenant utilizzando Django. La struttura integrata dei "siti" sembra un'opzione. Ci sono altri approcci con cui le persone hanno avuto successo?Multi-Tenant Applicazione Django

+1

possibile duplicato di [architettura ottimale per l'applicazione multitenant su django] (http://stackoverflow.com/questions/7194341/optimal-architecture-for-multitenant-application-on-django) – akaihola

risposta

9

L'utilizzo della struttura dei siti è molto importante per fornire una garanzia di sicurezza agli "inquilini", presupponendo che ogni istanza del sito fornisca una tabella univoca.

D'altra parte, sarà un grosso problema se si dispone di un piccolo numero di inquilini e si sprecherà una quantità enorme di risorse del server poiché sarà necessario almeno un processo del server per cliente, anche se essi non stanno usando il sistema. Se si dispone di un numero elevato di inquilini, non sarà molto problematico perché sarete costretti ad automatizzare la soluzione indipendentemente dal vostro approccio.

Inserire una chiave esterna del locatario in quasi tutti i modelli funzionerà perfettamente e l'ORM di Django rende più semplice (più semplice?) L'applicazione della sicurezza utilizzando custom managers. Lo svantaggio è la performance se inizi a essere martellato con molti utenti, perché non c'è un modo semplice per scalare.

Se è necessario ridimensionare, penso che la soluzione migliore potrebbe essere una combinazione di entrambi gli approcci. Ogni modello ha una chiave straniera titolare in modo che i database possano essere condivisi, ma successivamente si sviluppa un meccanismo a un livello superiore rispetto a quello di Django per instradare i clienti in un'istanza del sito. Ciò consente di inserire tenant davvero grandi nei propri database con risorse appropriatamente ottimizzate solo per loro (ad esempio il numero corretto di demem mod_wsgi, numero di connessioni database, pool memcache opportunamente dimensionato, ecc.) E tenant più piccoli condividono risorse comuni.

7

Dai uno sguardo allo https://github.com/bcarneiro/django-tenant-schemas Avrai solo un'istanza di progetto e non dovrai apportare molte modifiche nel codice.

+0

Questo è un buon approccio se si desidera più DB: consente di utilizzare più schemi in un singolo DB, per un minore sovraccarico. Richiede PostgreSQL. Anche gli schemi semplici-tenant di Django sono interessanti. – RichVel

+0

@RichVel intendi se ** non ** vuoi più DB, giusto? – Clash

+1

Intendevo "se vuoi un approccio più simile a DB ma usando gli schemi", mi spiace – RichVel

Problemi correlati