Più utenti che usano lo stesso script per i loro siti web

2

Sto lavorando a un progetto, ho una domanda riguardante l'architettura:

  • Diciamo che ho molti script Python sul mio server e c'è main.py che contiene tutte le classi. E c'è una sceneggiatura chiamata %codice%
  • Un utente di nome alex si registra e l'URL del suo sito è archiviato MariaDB
  • copymain.py controlla se un utente si è iscritto ogni 5 minuti usando cron
  • quando copymain.py rileva che alex si è registrato, crea una copia di copymain.py rinominala in main.py , sposta alex.py in alex.py e scrive l'url del sito di alex in scriptFolder
  • Cron o Celery (non ancora deciso) eseguiranno tutti i file alex.py all'interno di .py ogni diciamo 15 minuti

Perché ho scelto questo design?

  • Questo design mi consentirà di eliminare molti stack e code e inserendo il mio script e rendendolo più semplice, è una soluzione semplice e funziona perfettamente. Se devo modificare scriptFolder , tutto ciò che devo fare è modificare i moduli importati, quindi non è necessario modificare singole copie.

  • Penso che copiando i file, potrei facilmente distribuirlo su molti server. Sposta alcuni file main.py su questo server, altri su quello e io sono fatto. Questi sono i due motivi principali.

  • Diciamo che devi generare RSS per i siti web, per qualche ragione c'è un utente chiamato fred che ha un problema, c'è un problema che richiede uno script speciale, perché sappiamo tutti che ogni sito ha il proprio design e molti si verificano errori durante la rottamazione e la gestione di html, puoi andare su .py e modificare lo script per quell'utente.

È l'architettura più efficiente? O dovrei usare un file, ottenere gli utenti dal database? Al momento il mio script lo fa, ma preferisco copiare per i motivi sopra indicati, una semplice pianificazione lo farebbe. Ho bisogno di assicurarmi che, indipendentemente da quanti utenti ho, il sito web di ogni utente verrà elaborato esattamente nel momento in cui ho promesso quando si sono registrati, quando ce ne sono troppi e ho notato che è lento, ho appena acquistato l'aggiornamento o acquista un altro server. Ho paura di creare troppi thread e dovermi preoccupare di come scala. Copiare sembra la soluzione più semplice, Linux usa cron sempre per intere directory.

Modifica

Per favore dimenticatevi della parte di rottamazione, diciamo che dovete fare qualche compito per ogni utente nel vostro database, come mandargli un messaggio, o qualsiasi altra cosa, è la mia soluzione come coda e threading, in termini di tempo trascorso sul processo e in termini di leggerezza sul server? C'è una soluzione migliore che non ho considerato?

    
posta Lynob 17.01.2015 - 23:52
fonte

3 risposte

2

Non è raro fare ciò che hai descritto. Infatti, quando crei un nuovo database per il tuo utente, in pratica crei un nuovo file per quell'utente. Quindi, aggiunge semplicemente un file al set di file per utente.

La scelta di quando fare il lavoro richiede però una spiegazione. Effettuando periodicamente il processo di registrazione in batch è possibile creare picchi di carico sui server. È meglio e più semplice copiare immediatamente tutti i file per i nuovi utenti. Se il processo è abbastanza lungo (ad es. Creando un vm per utente), visualizzi una pagina di "installazione in corso".

    
risposta data 20.01.2015 - 05:35
fonte
3

Generalmente, questo non è un buon set up, perché non è DRY ("Do not Repeat Yourself"). Se fossi in me, mi impegnerei molto per capire come avere uno script ben testato in grado di generare i feed necessari ai singoli utenti. Forse lo script otterrebbe informazioni per utente dal database.

    
risposta data 20.01.2015 - 09:37
fonte
1

Disclaimer : non sono del tutto sicuro di aver capito cosa stai effettivamente cercando di ottenere qui, quindi la mia risposta sarà piuttosto vaga.

Cron or Celery (haven't decided yet) will run all the .py files inside scriptFolder every lets say 15 mins

Siamo ottimisti e supponiamo che tu abbia milioni di utenti un giorno. Cron / Celery riuscirà a superare tutte quelle sceneggiature in un ragionevole periodo di tempo? Quanto tempo impiega ogni script per eseguire?

Se i tuoi script sono sufficientemente complessi, probabilmente avrai difficoltà a ridimensionare a milioni di utenti. Se sono non sufficientemente complessi, puoi probabilmente ottenere un design più semplice, magari usando multiprocessing .

    
risposta data 20.01.2015 - 22:58
fonte