TL; DR: costruzione ridondante, modulare; verifica la disponibilità; monitorare attentamente.
Dopo aver realizzato che provare a spremere qualsiasi spiegazione potrebbe richiedere molto tempo, quindi scriverò tutte le osservazioni che ho fatto.
Mettere in discussione la premessa
Il sistema cloud è una panacea
Anche se dovessi andare completamente sul cloud, con un fornitore di cloud leader, dovrai comunque progettare la tua applicazione per la resilienza. AWS potrebbe sostituire la VM, ma l'applicazione dovrebbe essere in grado di riavviarsi se lasciata nel mezzo del calcolo.
Non vogliamo usare il sistema cloud, a causa di x / y / z
A meno che tu non sia un'organizzazione ultra grande, stai meglio usando i sistemi cloud. I primi 3 sistemi cloud (AWS, MSFT, Google), impiegano migliaia di ingegneri per offrirti SLA promessi e dashboard facile da gestire. In realtà è un buon affare usarli al posto di spendere un centesimo su questo in-house.
Problemi di scoping e design
Definire, quantificare e quindi misurare continuamente la disponibilità di un servizio è una sfida più grande della scrittura di una soluzione per i problemi di disponibilità.
Definire e misurare la "disponibilità" è più difficile del previsto
Diverse parti interessate hanno una visione diversa della disponibilità e ciò che può accadere è la definizione preferita da una persona con il salario più alto che supera altre definizioni. Questa è talvolta una definizione corretta, ma spesso l'ecosistema non è costruito attorno alla misurazione della stessa cosa perché quella definizione ideale è molto difficile da misurare, per non parlare del monitoraggio in tempo reale. Se hai una definizione di disponibilità che non può essere monitorata in tempo reale, troverai il tuo progetto simile fai da te ancora e ancora con strane somiglianze. Attenersi a qualcosa di sensato e qualcosa che può essere facilmente monitorato.
Le persone sottovalutano le complessità del sistema sempre disponibile.
Per parlare dell'elefante nella stanza, lasciami dire questo: "Nessun sistema multi-computer è disponibile al 100%, potrebbe in futuro ma non con la tecnologia attuale". Qui con la tecnologia attuale, mi riferisco alla nostra incapacità di inviare segnali più velocemente della velocità della luce e cose del genere. Tutti gli ingegneri informatici che meritano il loro sale conoscono i limiti del calcolo distribuito e la maggior parte di loro non lo menzionerà nelle riunioni, temendo che sembreranno dei rumori. Per compensare tutti coloro che non menzionano i limiti del calcolo distribuito , dirò, è complicato ma non sempre fidarsi dei computer .
Le persone sopravvalutano le capacità del proprio ingegnere
Sfortunatamente, la disponibilità rientra nella categoria, dove non sai cosa vuoi ma sai cosa non vuoi. È un po 'più complicato che la categoria "conosci i desideri" come l'interfaccia utente. Richiede un po 'di esperienza e molta lettura per imparare dall'esperienza altrui e altro ancora.
Costruire un sistema disponibile da zero
Assicurati di evangelizzare per ogni team di architettura e design la giusta priorità della disponibilità come requisito di sistema.
Attributi del sistema che aiutano la disponibilità
Le seguenti caratteristiche del sistema hanno dimostrato di aver contribuito alla disponibilità del sistema:
Ridondanza
Alcuni esempi di questo sono di non avere mai una sola VM dietro un VIP o di non archiviare mai una sola copia dei tuoi dati. Queste sono le domande che un buon IAAS ti renderà più facile da risolvere, ma dovrai comunque prendere queste decisioni.
modularità
Un REST modulare è migliore del SOA monolitico. Un microservizio persino modulare è in realtà più disponibile rispetto al solito REST HATEOS . Il ragionamento potrebbe essere trovato nella discussione relativa alla resa nella prossima sezione. Se si sta eseguendo l'elaborazione in batch, è meglio l'elaborazione in batch in un batch ragionevole di 10s rispetto alla gestione di un batch di 1.000.000.
elasticità
"I am always angry"
- Hulk
Un sistema resiliente è sempre pronto per il ripristino. Questa resilienza si applica a casi come il riconoscimento di ACK per una scrittura solo dopo la scrittura sul disco RAID, e possibilmente su almeno due data center. Un'altra tendenza recente è quella di utilizzare strutture di dati prive di conflitti , in cui la struttura dei dati si assume la responsabilità di risolvere i conflitti quando viene presentata con due versioni diverse. Un sistema non può essere resiliente come ripensamento, deve essere previsto e integrato. Un fallimento è garantito a lungo termine, quindi dovremmo essere sempre preparati con un piano di recupero.
Traccia di registro
Questo è tecnicamente un sottotipo di Resilienza, ma molto speciale perché cattura tutte le funzionalità. Nonostante il massimo sforzo, potremmo non essere in grado di prevedere il modello di indisponibilità. Se possibile, mantenere una traccia log sufficiente delle attività di sistema per poter riprodurre eventi di sistema. Ciò consentirà, a costi manuali elevati, di riprendersi da situazioni impreviste.
Attributi di disponibilità
L'elenco di attributi "non disponibili" non esaustivi di "disponibilità": per motivi di discussione, supponiamo che la domanda che l'utente pone sia: "Quanti articoli ho nel carrello?"
Correttezza
Non si deve produrre il più preciso possibile risposta o è errori make ok? Solo per riferimento, quando si preleva denaro dal bancomat, non è garantito che sia corretto. Se la banca scopre che ha commesso un errore, potresti invertire le transazioni. Se il tuo sistema sta producendo numeri primi, quindi immagino, potresti voler sempre risposte giuste.
dare la precedenza
Salta questo punto, se hai sempre risposto correttamente alla domanda precedente sull'argomento. A volte la risposta alle domande non deve essere precisa, ad es. Quanti amici ho su Facebook in questo momento? Ma la risposta dovrebbe essere sempre nel campo da baseball +/- 1. Quando produci il risultato atteso, la tua resa è 100.
Consistenza
La tua risposta potrebbe essere corretta in un determinato momento, ma quando la luce ha lasciato lo schermo ed è entrata nella retina dell'osservatore, le cose potrebbero essere cambiate. Rende la tua risposta sbagliata? No, lo rende incoerente. Molte applicazioni sono eventualmente coerenti, ma il trucco sta nel definire quale tipo di modello di coerenza fornirà la tua applicazione. Per caso la tua applicazione può essere eseguita su un singolo computer, puoi saltare questa bella lettura sul teorema di CAP .
Costo
Molto dipende dall'impatto totale degli effetti a breve termine (perdita di entrate) e degli effetti a lungo termine (cattiva reputazione, fidelizzazione dei clienti). A seconda del tipo di cliente (pagamento / gratuito, ripetizione / unico, captive) e disponibilità delle risorse, è necessario integrare diversi livelli di garanzia di disponibilità.
Verso il miglioramento della disponibilità di un sistema esistente
La gestione operativa delle singole macchine e di una rete è così complessa, che presumo tu l'abbia lasciato al fornitore del cloud o che tu sia già abbastanza esperto da sapere cosa stai facendo. Toccerò altri argomenti in base alla disponibilità. Per la strategia a lungo termine Define-Measure-Analyse-Control è una partita paradisiaca, qualcosa che mi sono visto.
- Definisci cos'è la "disponibilità" per i tuoi stakeholder
- Come misurerai ciò che hai definito
- Analisi della causa principale per identificare i colli di bottiglia
- Compiti per miglioramenti
- Monitoraggio continuo ( controllo ) del sistema
Cause di non disponibilità
Poiché abbiamo concordato che la gestione operativa che dovrebbe coprire qualsiasi gestione delle infrastrutture fisiche, dovrebbe essere effettuata da professionisti, toccherò altre cause di indisponibilità per completezza. La disponibilità dell'IMO dovrebbe includere anche la mancanza di comportamenti previsti, il che significa che se all'utente non viene mostrata l'esperienza prevista, qualcosa non è disponibile. Con questa ampia definizione in mente, ciò che segue potrebbe causare indisponibilità: - Bug di codice - Incidenti di sicurezza - Problemi di prestazioni