{"id":8127,"date":"2025-10-29T10:04:14","date_gmt":"2025-10-29T09:04:14","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=8127"},"modified":"2025-10-29T11:44:40","modified_gmt":"2025-10-29T10:44:40","slug":"nightmare-infrastructure-episode-4-nessun-limite-al-peggio","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/nightmare-infrastructure-episode-4-nessun-limite-al-peggio\/","title":{"rendered":"Nightmare infrastructure – episodio 4: nessun limite al peggio."},"content":{"rendered":"\n
\n
\n

“Sai, penso che questa cosa del Natale non sia cos\u00ec complicata come sembra! Ma perch\u00e9 dovrebbero divertirsi solo loro? Dovrebbe essere di tutti! Anzi, non di tutti, ma mio! Perch\u00e9, potrei fare un albero di Natale! E non c’\u00e8 una ragione valida, non potrei avere un periodo natalizio! Scommetto che potrei anche migliorarlo! Ed \u00e8 esattamente quello che far\u00f2!”<\/p>\n\n\n\n

Jack Skellington<\/p>\n<\/blockquote>\n<\/blockquote>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

La dichiarazione di Jack Skellington esprime alla perfezione l’overconfidence di un ingegnere, la sua curiosit\u00e0 e la voglia di migliorare o reinventare un sistema, che porta spesso con risultati caotici o disastrosi. <\/p>\n\n\n\n

Cattura lo spirito che fa prendere un processo semplice per provare a migliorarlo, per scoprire troppo tardi che la complessit\u00e0 originale era nascosta, appena fuori dalla nostra vista. <\/p>\n\n\n\n

Molte tradizioni nascono senza intenzioni serie, senza pianificazione, quasi per esperimento. Questa serie di articoli \u00e8 diventata una tradizione, che ci fa preparare in anticipo e prendere l’anno, pensando a quando arriver\u00e0 di nuovo Halloween per farvi venire i brividi. <\/p>\n\n\n\n

Quindi, bando alle ciance, iniziamo il nostro viaggio negli orrori di quest’anno!<\/p>\n\n\n\n

Il container di Schr\u00f6dinger<\/h2>\n\n\n\n
\n
\n

“Quindi siamo noi nella scatola. Noi siamo il gatto. Siamo sia vivi che morti. Quindi ci sono due realt\u00e0 separate, presumibilmente finch\u00e9 la cometa non passa.” <\/p>\n\n\n\n

Coherence, 2013<\/p>\n<\/blockquote>\n<\/blockquote>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

Il gatto di Schr\u00f6dinger \u00e8 un paradosso per spiegare il principio di indeterminazione della meccanica quantistica: osservando un sistema, lo si altera, rendendo impossibile determinare il suo stato iniziale. <\/p>\n\n\n\n

Per rendere il concetto, basta immaginare che un gatto e una fiala di veleno siano messi in una scatola chiusa, isolata dall’ambiente esterno. Se si apre la scatola, si rompe la fiala, avvelenando il gatto. Allo stesso tempo, il gatto non ha cibo n\u00e9 acqua, quindi prima o poi sar\u00e0 sicuramente morto. Il paradosso \u00e8 nel fatto che, aprendo la scatola, ucciderai di sicuro il gatto, ma senza aprirla non \u00e8 possibile sapere se il gatto sia vivo o morto. <\/p>\n\n\n\n

Questo pu\u00f2 succedere anche a un container<\/em>.<\/strong><\/p>\n\n\n\n

Siamo stati ingaggiati per affrontare un progetto di refactoring di un’applicazione web (il classico “breaking down the monolith”) da un’istanza EC2<\/em> a container.<\/p>\n\n\n\n

Abbiamo iniziato analizzando l’applicazione facendo deploy di un ambiente di sviluppo in un account AWS Account dedicato e procedendo con una prima containerizzazione<\/em> dell’intera applicazione per vedere come interagiva con gli altri servizi esistenti. Dopodich\u00e9 ci siamo dedicati alle pipeline<\/em> di CI\/CD<\/em> e abbiamo impostato un approccio cloud-native. <\/p>\n\n\n\n

Di seguito il diagramma “noioso” dell’infrastruttura. Visto che l’applicazione era relativamente semplice, abbiamo optato per l\u2019utilizzo di  ECS Fargate per il workload.<\/p>\n\n\n\n

<\/p>\n\n\n

\n
\"\"<\/figure><\/div>\n\n\n

<\/p>\n\n\n\n

L’applicazione sembrava a posto, ma, dopo alcuni test iniziali, la mattina dopo il primo deployment, abbiamo visto un errore 502. Abbiamo pensato ad un problema temporaneo, visto che l’applicazione \u00e8 tornata a funzionare dopo qualche minuto.<\/p>\n\n\n\n

 Nel pomeriggio, abbiamo notato la stessa cosa e abbiamo quindi iniziato a investigare. Abbiamo notato che il task ECS era stato riavviato diverse volte la notte prima, anche senza traffico. Il grafico della memoria indicava chiaramente un memory l<\/em>eak. La cosa strana era che nessun utente stava facendo traffico, trattandosi di un ambiente di sviluppo. L’health check dell’Application Load Balancer era sufficiente a scatenare il memory leak. Quindi, il solo fatto di osservare il sistema lo faceva “morire”, proprio come nel paradosso di Schr\u00f6dinger. Il container era contemporaneamente running e morto: il vecchio memory leak dell’applicazione aveva trovato nuova vita nel cloud. <\/p>\n\n\n\n

La vera tragedia non era il bug in s\u00e9, ma il fatto che la nostra architettura era diventata un sistema di delivery per memory leak. Mettere in un container un’applicazione fallata non \u00e8 modernizzazione; \u00e8 solo un modo per accelerarne il malfunzionamento.<\/p>\n\n\n\n

Grazie, Mehmed<\/a>, per l’idea e per il titolo!<\/p>\n\n\n\n

Il filo di Arianna<\/h2>\n\n\n\n
\n

“Arianna sussurra: \u201cLa tana del Minotauro \u00e8 nel cuore stesso del labirinto. Il suono del suo respiro ti mostrer\u00e0 in che direzione andare. Ecco una spada, e qui c’\u00e8 un gomitolo di filo, col quale, dopo aver ucciso il mostro, potrai ritrovare la via del ritorno.\u201d <\/p>\n\n\n\n

Il Mito di Teseo e il Minotauro<\/p>\n<\/blockquote>\n\n\n\n

<\/p>\n\n\n\n