Traduzione dell'articolo preparata appositamente per gli studenti del corso , che inizia già oggi!

Hai mai lanciato un nuovo servizio in produzione? O ti sei mai occupato della manutenzione di tali servizi? Se sì, quali criteri hai seguito? Cosa è buono per la produzione e cosa è cattivo? Come formi i nuovi membri del team sui rilascio o sulla manutenzione dei servizi esistenti?
La maggior parte delle aziende, in termine di pratiche di produzione, finisce per adottare approcci da "Far West". Ogni team, attraverso tentativi ed errori, si determina autonomamente gli strumenti e le migliori pratiche. Ma questo spesso influisce non solo sul successo dei progetti, ma anche sugli ingegneri.
Il metodo di tentativi ed errori crea un ambiente in cui si cerca un colpevole e si trasferisce la responsabilità. Con questo comportamento diventa sempre più difficile imparare dagli errori e non ripeterli.
Organizzazioni di successo:
- riconoscono la necessità di linee guida per la produzione,
- studiano le migliori pratiche,
- iniziano a discutere le questioni di prontezza alla produzione nella fase di sviluppo di nuovi sistemi o componenti,
- garantiscono il rispetto delle regole di preparazione alla produzione.
La preparazione alla produzione include un processo di "review". La review può avvenire sotto forma di checklist o insieme di domande. La review può essere effettuata manualmente, automaticamente o in entrambi i modi. Invece di elenchi statici di requisiti, è possibile creare modelli di checklist, adattabili alle esigenze specifiche. In questo modo, gli ingegneri possono avere un modo per ereditare conoscenze e una flessibilità adeguata quando necessario.
Quando controllare il servizio per la prontezza alla produzione?
È utile eseguire il controllo della prontezza alla produzione non solo immediatamente prima del rilascio, ma anche quando si trasferisce a un'altra squadra di gestione o a un nuovo dipendente.
Fai il controllo quando:
- Lanci un nuovo servizio in produzione.
- Trasferisci la gestione di un servizio in produzione a un altro team, come SRE.
- Trasferisci la gestione di un servizio in produzione a nuovi dipendenti.
- Organizzi il supporto tecnico.
Checklist di verifica della prontezza alla produzione
Qualche tempo fa, come esempio, ho una checklist di verifica della prontezza alla produzione. Anche se questo elenco è emerso durante il lavoro con i clienti di Google Cloud, sarà utile e applicabile anche al di fuori di Google Cloud.
Progettazione e sviluppo
- Sviluppa un processo di build riproducibile che non richieda accesso a servizi esterni e non dipenda da guasti di sistemi esterni.
- Durante la progettazione e lo sviluppo, definisci e stabilisci SLO per i tuoi servizi.
- Documenta le aspettative sulla disponibilità dei servizi esterni da cui dipendi.
- Evita i punti di errore unici rimuovendo dipendenze da una risorsa globale. Replicare la risorsa o utilizzare una soluzione di riserva quando la risorsa non è disponibile (ad esempio, un valore hardcoded).
Gestione della configurazione
- Una configurazione statica, piccola e non segreta può essere trasmessa tramite parametri da riga di comando. Per tutto il resto, utilizza servizi di storage per la configurazione.
- La configurazione dinamica deve avere impostazioni di riserva in caso di indisponibilità del servizio di configurazione.
- La configurazione dell'ambiente di sviluppo non deve essere collegata alla configurazione di produzione. Altrimenti, questo potrebbe portare all'accesso da parte dell'ambiente di sviluppo ai servizi di produzione, causando problemi di riservatezza e perdita di dati.
- Documenta ciò che può essere configurato dinamicamente e descrivi il comportamento di riserva se il sistema di consegna della configurazione non è disponibile.
Gestione delle release
- Documenta dettagliatamente il processo di rilascio. Descrivi come i rilasci influiscono sugli SLO (ad esempio, un aumento temporaneo delle latenze a causa di cache miss).
- Documenta i rilasci canary.
- Sviluppa un piano per l'analisi dei rilasci canary e, se possibile, meccanismi di rollback automatico.
- Assicurati che i rollback possano utilizzare gli stessi processi del deployment.
Idoneità al monitoraggio (Observability)
- Assicurati che venga raccolto un insieme di metriche necessarie per gli SLO.
- Assicurati di poter distinguere tra dati client e dati server. Questo è importante per individuare le cause dei guasti.
- Configura avvisi per ridurre il carico di lavoro. Ad esempio, rimuovi avvisi causati da operazioni di routine.
- Se usi Stackdriver, abilita le metriche della piattaforma GCP nei tuoi dashboard. Configura avvisi per le dipendenze GCP.
- Diffondi sempre la tracciatura in ingresso. Anche se non partecipi alla tracciatura, questo consentirà ai servizi di livello inferiore di risolvere i problemi in produzione.
Protezione e sicurezza
- Assicurati che tutte le connessioni esterne siano criptate.
- Assicurati che i tuoi progetti di produzione abbiano la corretta configurazione IAM.
- Utilizza le reti per isolare i gruppi di istanze di macchine virtuali.
- Utilizza una VPN per una connessione sicura alle reti remote.
- Documenta e monitora l'accesso degli utenti ai dati. Assicurati che ogni accesso degli utenti ai dati venga controllato e registrato.
- Assicurati che i punti finali per il debug siano limitati da ACL.
- Sanitizza l'input degli utenti. Configura i limiti delle dimensioni del payload per l'input degli utenti.
- Assicurati che il tuo servizio possa bloccare selettivamente il traffico in arrivo per singoli utenti. Questo consentirà di bloccare le violazioni senza influire su altri utenti.
- Evita i punti finali esterni che avviano un gran numero di operazioni interne.
Pianificazione delle capacità
- Documenta come il tuo servizio scala. Ad esempio: numero di utenti, dimensione del payload in entrata, numero di messaggi in arrivo.
- Documenta i requisiti delle risorse per il tuo servizio. Ad esempio: numero di istanze di macchine virtuali dedicate, numero di istanze Spanner, attrezzature specializzate come GPU o TPU.
- Documenta i limiti delle risorse: tipo di risorsa, regione, ecc.
- Documenta i limiti delle quote per la creazione di nuove risorse. Ad esempio, il limite del numero di richieste all'API GCE, se utilizzi l'API per creare nuove istanze.
- Prendi in considerazione la possibilità di eseguire test di carico per analizzare le riduzioni delle prestazioni.
Ecco tutto. Ci vediamo alle lezioni!
Fonte: habr.com
