La lunga interruzione di Cloudflare si è rivelata essere il risultato di un'errata gestione degli errori.

L'azienda Cloudflare ha pubblicato un'analisi di uno dei più grandi incidenti nella sua infrastruttura, a causa del quale ieri gran parte della rete di distribuzione dei contenuti è rimasta non operativa per oltre 3 ore. Il malfunzionamento è avvenuto dopo una modifica nella struttura del database, ospitato su ClickHouse, che ha causato un raddoppio della dimensione del file contenente i parametri per il sistema di mitigazione dei bot. Sono state create tabelle duplicate nel database, mentre la query SQL per generare il file estraeva semplicemente tutti i dati da tutte le tabelle in base alla chiave, senza filtrare i duplicati. SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;

La lunga interruzione di Cloudflare si è rivelata essere il risultato di un'errata gestione degli errori.

Il file creato è stato distribuito a tutti i nodi del cluster che gestiscono le richieste in ingresso. Nel gestore che utilizza questo file per controllare le richieste da bot, i parametri indicati nel file sono stati mantenuti in memoria e, per proteggere da un eccessivo consumo di memoria, è stato previsto un limite sulla dimensione massima del file. In condizioni normali, la dimensione effettiva del file era significativamente inferiore al limite impostato, ma dopo la duplicazione delle tabelle ha superato il limite.

Il problema si è rivelato essere che, invece di gestire correttamente il superamento del limite e continuare a utilizzare la versione precedente del file informando il sistema di monitoraggio su una situazione anomala, nel gestore si verificava un arresto anomalo che bloccava il passaggio del traffico. L'errore è stato causato dall'uso nel codice Rust del metodo unwrap() con il tipo Result.

La lunga interruzione di Cloudflare si è rivelata essere il risultato di un'errata gestione degli errori.

Quando il valore di Result ha lo stato "Ok", il metodo unwrap() restituisce l'oggetto associato a questo stato, ma se il risultato non è riuscito, la chiamata porta a un arresto anomalo (si attiva il macro "panic!"). Di solito, unwrap() viene utilizzato durante il debugging o nella scrittura di codice di test e non è raccomandato per l'uso nei progetti in produzione.

La lunga interruzione di Cloudflare si è rivelata essere il risultato di un'errata gestione degli errori.
La lunga interruzione di Cloudflare si è rivelata essere il risultato di un'errata gestione degli errori.


Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster