Dato un'applicazione web in esecuzione su più di 10 server, quali tecniche sono state messe in atto per fare cose come alterare lo stato del tuo sito web in modo da poter implementare determinate funzionalità.
Ad esempio, potresti voler:
- Limita gli accessi / disattiva alcune funzionalità
- Trasforma il sito in "Sola lettura"
- Trasforma la pagina del sito in modalità di manutenzione singola.
Fare una delle cose sopra è piuttosto banale. Puoi lanciare un particolare "flag" in un file .ini, o aggiungere una riga / valore a una tabella site_options
nel tuo database e solo leggere quel valore e fare la cosa appropriata.
Ma queste soluzioni hanno i loro problemi.
Svantaggi / problemi
Ad esempio, se si utilizza un file per l'applicazione e si desidera disattivare temporaneamente una determinata funzione, è necessario aggiornare questo file su tutti i server. Quindi, potresti voler controllare qualcosa come ZooKeeper, ma probabilmente stai complicando le cose.
Quindi, potresti decidere di salvare questi flag "feature" in un database. Ma ovviamente stai aggiungendo query inutili a ogni richiesta di pagina. Quindi pensi a te stesso, che salterai con la memcached al mix e ti basterà mettere in cache la query. Quindi recuperi tutte le "Funzionalità" da memcached e aggiungi una latenza di 2ms ~ alla tua applicazione su ogni pagina. Quindi, per ovviare a questo, si decide di utilizzare un sistema a due livelli di cache, in cui si utilizza una cache inmemoria su ciascuna macchina (come Apc / Redis ecc.). Funzionerebbe, ma poi si complicherebbe, perché dovresti impostare la chiave / hash vita a forse 60 secondi, in modo che quando rimuovi / invalidi l'oggetto memcached che memorizza il risultato "Funzioni", la cache della tua macchina è abbastanza pronta per ottenere i nuovi stati.
Quali suggerimenti potresti avere? Tenendo presente che l'ottimizzazione / efficienza è la priorità qui.