Users can upload files and our application store those files in the local filesystem.
I can solve item 1 by storing all files in an external/shared storage (SAN, etc..)
La memorizzazione delle risorse statiche comuni su un sistema esterno accessibile a tutti è certamente un modo per affrontare il problema degli utenti che caricano file che devono essere salvati. Questo riduce molti problemi e ignora completamente il brutto problema di cercare di sincronizzare i file system locali (non andare giù per questa strada, porta solo alla follia).
There are scheduled jobs that might cause problems when executed concurrently (i.e. generating files).
With item 2, I can create a locking mechanism in the database so when the scheduled jobs run, the web apps will first check the table and only the first one to update will run the said job.
Affrontare i lavori programmati che scrivono dati "statici", si entra in qualche altra brutta situazione.
La prima cosa da considerare è che cosa stanno generando? Se stanno generando altri file di dimensioni ridotte, perché non memorizzare invece i dati generati nel database. Questo risolve anche il problema del "blocco" in una certa misura (nel senso che lo scarica nel database). Quindi, l'applicazione dovrebbe leggere i dati dal database anziché dal file system.
Quando vai su "ewww" quando pensi a un grosso database Oracle, puoi anche prendere in considerazione un database nosql più leggero. L'uso del file system per il blocco ha altri problemi che lo rendono un po 'meno desiderabile. L'utilizzo di più sistemi diversi (database e file system) non ha le stesse condizioni di gara (sono altri da considerare), ma significa anche che i due devono rimanere correttamente sincronizzati. Le gioie della rimozione dei blocchi del database quando l'applicazione termina in modo errato.
Archivia il contenuto generato nel database e dovresti essere bravo. Rende diverse cose molto più facili. Prendi in considerazione aspetti come i record con data / ora e poi seleziona il timestamp più recente che è stato fatto.
Ci sono altre cose a cui pensare qui, come avere un servizio sui server delle applicazioni che scriverà un file che proviene da un client specifico (quindi il tuo lavoro pianificato spinge il server delle applicazioni che lo scrive sul common file system) o con un sistema di messaggistica che notifica ai server delle applicazioni il nuovo contenuto in una determinata posizione che attiva un'applicazione per estrarre i dati in un file system locale.
Ci sono molti modi diversi di avvicinarsi a questo per singoli aggiornamenti che vengono spinti all'area del contenuto. Questo potrebbe essere l'argomento di una domanda completamente nuova a seconda delle specifiche del problema e dei vincoli del sistema.
Session variables are heavily used in most modules.
Actually, I'm still not sure if item 3 can cause problems. If a user logs in to our application and the load balancer directs him to Server 1, is it possible that the load balancer will point him to Server 2 the next time he click a link? I have no idea yet how the load balancer works in this level.
Il concetto chiave che stai cercando è "sessione appiccicosa". Cade sotto l'area di 'load balancer persistance'
In questo, anche il bilanciamento del carico è a conoscenza delle sessioni create e quando una richiesta di sessione arriva per un sistema, la manterrà sempre "bloccata" sul server delle applicazioni che lo ha generato.
Questo non è privo di una serie di problemi (un sistema va giù, le sessioni passano all'altra (hai failover, giusto?) e poi ritorna su, ma ora tutto il carico è bloccato all'altro server).
Comprendere che la natura esatta di questo supporto dipende dal bilanciamento del carico utilizzato. Alcuni hanno i loro cookie, alcuni usano JSESSIONID e simili, altri usano ip (e se hai un firewall / proxy di qualche tipo lì, potrebbe sembrare che tutte le richieste provengano dallo stesso ip).
Si potrebbe anche voler guardare una cache esterna per le sessioni in modo che siano condivise tra entrambe le macchine piuttosto che fare il bilanciamento del carico tra di esse. Alcuni framework hanno questo, oppure potresti guardare ad altre soluzioni di caching per percorrere questa strada. Di nuovo, forse un argomento di una nuova domanda se ci sono più informazioni sull'ambiente e sui vincoli poiché questo sta diventando ragionevolmente lungo.