Negli ultimi tempi sto affrontando tematiche relative a DevOps, container e infrastrutture resilienti. E sono sempre più convinto di un pensiero un po’ contro corrente nell’immaginario degli architetti software.
Spesso, per ottenere soluzioni in grado di resistere ai guasti, si realizzano architetture complicatissime. Configurazione e manutenzione di storage e application cluster sono aspetti che hanno impatto sul grado di affidabilità.
La configurazione e il test di sistemi complessi sono attività difficili. Nella mia esperienza di valutazione e revisione di architetture applicative mi è capitato spesso di notare che alla base della scarsa affidabilità di un sistema sono proprio le configurazioni sbagliate delle componenti utilizzate per proteggere dal fallimento.
Mantenere il sistema più semplice possibile, quindi, è un obiettivo da perseguire nella progettazione del software e delle infrastrutture. In certi casi conviene mettere in conto fallimenti, purché accadano di rado. Ripristinare un sistema più semplice è un’attività che avviene in tempi rapidi.
Dunque, quale può essere una strategia vincente? Non cercare di evitare tutti i possibili disastri, ma fare in modo di essere sicuri di poter gestire le conseguenze in modo semplice. Soprattutto quando questo semplifica molto il sistema che stiamo realizzando.