Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Comportamento di ripetizione
Importante
Il comportamento descritto in questa pagina richiede l'attivazione finché non diventa il comportamento predefinito. Imposta AWS_NEW_RETRIES_2026=true nel tuo ambiente. Senza questa impostazione, l'SDK utilizza un comportamento dei tentativi precedente al 2026, che differisce nei tempi di backoff, nei costi delle quote dei tentativi e nelle impostazioni predefinite specifiche del servizio. Per i dettagli,
Quando una richiesta ad an Servizio AWS fallisce a causa di un errore temporaneo o di una limitazione, l'SDK può riprovare automaticamente la richiesta. Questa pagina spiega come configurare i tentativi e come funzionano internamente.
-
Configurazione dei tentativi: scegli una modalità di riprova, imposta il numero massimo di tentativi e comprendi la precedenza della configurazione.
-
Come funzionano i tentativi: flusso dei tentativi, classificazione degli errori, formula di backoff, meccanica delle quote di riprova e comportamento specifico del servizio.
Configurazione dei tentativi
Sei tu a controllare la strategia di ripetizione utilizzata dall'SDK e il numero di tentativi.
Scelta di una modalità di riprova
La modalità di riprova determina il comportamento dell'SDK quando una richiesta fallisce. Sono disponibili tre modalità: standard, adattiva e legacy.
| Standard | Adattiva | Legacy | |
|---|---|---|---|
| Riprova la quota | Sì | Sì | Varia in base all'SDK |
| Può ritardare la richiesta iniziale | No | Sì | No |
| Error-type-specific arretramento | Sì | Sì | Varia in base all'SDK |
| Standardizzato tra gli SDK | Sì | Sì | No |
| Raccomandazione | Impostazione predefinita per tutti i carichi di lavoro | Single-resource, con limitazioni elevate, tollerante alla latenza | Solo compatibilità con le versioni precedenti |
Modalità standard (impostazione predefinita)
La modalità standard riprova le richieste non riuscite utilizzando un backoff esponenziale con jitter. Utilizza ritardi più brevi per gli errori transitori (come i timeout di rete) e ritardi più lunghi per gli errori di limitazione (ad esempio). ThrottlingException
La modalità standard include una quota di tentativi, un bucket di token che detrae i token per ogni tentativo e li reintegra quando le richieste hanno esito positivo. Quando i token disponibili sono esauriti, l'SDK restituisce l'errore senza riprovare, in modo che l'applicazione fallisca rapidamente invece di attendere tentativi che difficilmente avranno esito positivo. Ciò consente inoltre di risolvere più rapidamente le interruzioni del servizio riducendo il traffico dei tentativi di ripetizione. Durante il normale funzionamento, la quota rimane piena e non ha alcun effetto. La quota di tentativi non ritarda o blocca mai la richiesta iniziale. Sono interessati solo i tentativi. Per informazioni dettagliate, vedi Riprova la quota (token bucket).
Usa la modalità standard a meno che tu non abbia un motivo specifico per scegliere un'altra modalità.
Modalità adattiva
La modalità adattiva include tutto ciò che è in modalità standard, oltre a un limitatore di velocità lato client. Il limitatore di velocità tiene traccia delle risposte di limitazione e regola la frequenza con cui l'SDK invia le richieste. A differenza della modalità standard, la modalità adattiva può ritardare o bloccare la richiesta iniziale, non solo i tentativi, quando viene rilevata una limitazione.
Il limitatore di velocità funziona per istanza del client SDK. Tutte le richieste di un client condividono lo stesso limite di velocità, indipendentemente dall'operazione o dalla risorsa API a cui sono destinate.
Quando usare la modalità adattiva:
-
Il tuo cliente si rivolge a una singola risorsa (ad esempio, una tabella DynamoDB) e ti aspetti risposte di limitazione frequenti. Questo è comune nei flussi di lavoro automatizzati, nei processori batch o nei carichi di lavoro AI che richiedono una singola operazione API ad alto volume.
-
Vuoi che l'SDK rallenti automaticamente quando il servizio segnala una limitazione.
Quando non usare la modalità adattiva:
-
Il cliente invia richieste a più risorse o serve più tenant. La limitazione di una risorsa fa sì che il limitatore di velocità rallenti tutte le richieste provenienti da quel client, comprese le richieste alle risorse non interessate.
-
È necessaria una latenza prevedibile sulla richiesta iniziale.
La modalità adattiva non è consigliata come impostazione predefinita generale.
Modalità Legacy
La modalità legacy è il comportamento di ripetizione utilizzato da ciascun SDK prima dell'introduzione della modalità standard. Non include una quota di tentativi standardizzata. Alcuni SDK (come Java) avevano le proprie implementazioni della quota di tentativi in modalità legacy, ma il comportamento non è coerente tra gli SDK. Senza una quota standardizzata, un cliente continua a riprovare a pieno ritmo durante le interruzioni del servizio. Ciò blocca i thread e le connessioni in caso di richieste che non hanno esito positivo, aggiungendo al contempo un carico che può ritardare il ripristino del servizio.
La modalità legacy varia a seconda degli SDK. Il numero di tentativi, i tempi di backoff, i set di errori rieseguibili e il comportamento di limitazione variano a seconda delle lingue. Il codice che dipende dal comportamento dei tentativi precedenti può comportarsi diversamente quando viene spostato tra gli SDK.
Disponibile in: Java, Python, Ruby, PHP, C++, CLI
Non disponibile in: .NET, Go, Kotlin, Rust, Swift, JavaScript
La modalità Legacy esiste per la compatibilità con le versioni precedenti. Se attualmente utilizzi la modalità legacy, passa alla modalità standard.
Riprova le impostazioni
Le seguenti impostazioni controllano il comportamento dei tentativi. È possibile impostarle tramite variabili di ambiente, il file di configurazione condiviso (~/.aws/config) o la configurazione del client in codice.
| Impostazione | Cosa controlla | Variabile di ambiente | Chiave del file di configurazione | Predefinita |
|---|---|---|---|---|
| Riprova in modalità | Quale strategia di riprova utilizzare | AWS_RETRY_MODE |
retry_mode |
standard |
| Numero massimo di tentativi | Tentativi totali inclusa la richiesta iniziale | AWS_MAX_ATTEMPTS |
max_attempts |
3(vedi note) |
Un valore massimo di tentativi pari a 3 indica che l'SDK effettua una richiesta iniziale e fino a due tentativi. Imposta il numero massimo di tentativi per 1 disabilitare completamente i tentativi.
Nota
Per impostazione predefinita, i client DynamoDB e DynamoDB Streams impostano il numero massimo di tentativi. 4 Questi servizi utilizzano un ritardo di backoff di base più breve (25 ms anziché 50 ms) per adattarsi al loro profilo di bassa latenza. Il tentativo aggiuntivo mantiene il backoff massimo dell'ultimo tentativo paragonabile a quello di altri servizi. Puoi sovrascriverlo con le stesse impostazioni mostrate nella tabella precedente.
Precedenza di configurazione
Quando si specifica la stessa impostazione in più posizioni, l'SDK risolve il valore utilizzando la seguente precedenza, dalla più alta alla più bassa:
-
Configurazione esplicita del client nel codice. Un valore impostato direttamente sul client SDK o sul relativo oggetto di configurazione.
-
Variabile di ambiente. Ad esempio
AWS_RETRY_MODEoAWS_MAX_ATTEMPTS. -
File di configurazione condiviso.
retry_modemax_attemptsDigitare o~/.aws/config. -
SDK predefinito. L'impostazione predefinita incorporata.
Segue la precedenza di configurazione standard dell'AWS SDK. Un valore impostato a un livello superiore sovrascrive sempre un valore impostato a un livello inferiore. Ad esempio, se si imposta AWS_RETRY_MODE=adaptive come variabile di ambiente e retry_mode=standard si attiva~/.aws/config, l'SDK utilizza la modalità adattiva.
Language-specific configurazione
Le impostazioni cross-SDK descritte in questa pagina (retry_modeemax_attempts) funzionano in tutti gli SDK. Tuttavia, l'API per la configurazione dei tentativi nel codice varia in base alla lingua. Consulta la guida per sviluppatori del tuo SDK per le opzioni di configurazione specifiche della lingua, ad esempio strategie di backoff personalizzate, ulteriori errori rieseguibili e ottimizzazione delle quote dei tentativi.
Come funzionano i tentativi
Questa sezione descrive come gli AWS SDK gestiscono le richieste non riuscite: quali errori innescano i nuovi tentativi, quanto tempo l'SDK attende tra un tentativo e l'altro e quando interrompe il ritentativo.
Cosa succede quando una richiesta fallisce
Quando si effettua una chiamata API tramite un AWS SDK, l'SDK segue questa sequenza:
-
Modalità adattivaSolo modalità adattiva: l'SDK controlla il limitatore di velocità sul lato client. Se viene rilevata una limitazione, l'SDK può ritardare o bloccare la richiesta prima di inviarla.
-
L'SDK invia la richiesta all'endpoint. Servizio AWS
-
Se il servizio restituisce una risposta positiva, l'SDK restituisce il risultato nel codice.
-
Se la richiesta ha esito negativo, l'SDK classifica l'errore come transitorio, limitato o non ripetibile. Consulta Quali errori vengono ripetuti.
-
Se l'errore non è ripetibile, l'SDK restituisce immediatamente l'errore nel codice. Non viene tentato alcun nuovo tentativo.
-
Se l'errore può essere riprovato, l'SDK verifica se ha raggiunto il numero massimo di tentativi. In tal caso, restituisce l'errore nel codice.
-
L'SDK controlla il. Riprova la quota (token bucket) Se il budget del token è esaurito, l'SDK non riprova e restituisce l'errore nel codice. Eccezione: perLong-polling operazioni, l'SDK applica comunque un ritardo di backoff prima di restituire l'errore.
-
L'SDK calcola un ritardo di backoff in base al tipo di errore e al numero del tentativo di nuovo tentativo. Consulta Quanto dura l'SDK.
-
L'SDK attende il ritardo calcolato, quindi invia nuovamente la richiesta dal passaggio 2.
L'SDK ripete questo ciclo finché la richiesta non ha esito positivo, viene raggiunto il numero massimo di tentativi, la quota di tentativi è esaurita o si verifica un errore non riutilizzabile. L'intero processo è automatico. La tua applicazione vede una risposta positiva o un errore finale.
Quali errori vengono ripetuti
L'SDK classifica ogni richiesta non riuscita in una delle tre categorie: transitoria, limitata o non riutilizzabile. Questa classificazione determina se l'SDK riprova la richiesta e quanto tempo attende prima di riprovare.
La classificazione si basa sul codice di errore e sul codice di stato HTTP nella risposta del servizio. Ad esempio, un HTTP 400 con il codice di errore RequestTimeout viene classificato come transitorio e ritentato. Un HTTP 400 with ValidationException è classificato come non ripetibile e viene restituito immediatamente.
Classificazione degli errori
Gli errori transitori vengono ritentati con un breve ritardo di base (50 ms):
| Codice di errore |
|---|
RequestTimeout |
RequestTimeoutException |
InternalError |
IDPCommunicationError |
| I/O Errore (ripristino della connessione, errore di risoluzione DNS, timeout del socket) |
| (qualsiasi HTTP 500, 502, 503 o 504 senza un codice di errore riconosciuto) |
Gli errori di limitazione vengono ritentati con un ritardo di base maggiore (1.000 ms):
| Codice di errore |
|---|
Throttling |
ThrottlingException |
ThrottledException |
RequestThrottledException |
TooManyRequestsException |
ProvisionedThroughputExceededException |
TransactionInProgressException |
LimitExceededException |
PriorRequestNotComplete |
RequestThrottled |
EC2ThrottledException |
RequestLimitExceeded |
SlowDown |
BandwidthLimitExceeded |
Non-retryable gli errori (comeAccessDeniedException,ValidationException,ResourceNotFoundException) vengono restituiti immediatamente al codice.
Nota
Un HTTP 5XX con un codice di errore di limitazione è classificato come errore di limitazione, non transitorio, anche se gli errori 5XX sono normalmente transitori. L'SDK corrisponde prima al codice di errore, quindi ritorna al codice di stato HTTP.
Gli errori di limitazione indicano che il servizio ha rifiutato attivamente la tua richiesta a causa dei limiti di velocità, quindi l'SDK attende più a lungo prima di riprovare per dare al servizio il tempo di recuperare la capacità. Consulta i ritardi specificiQuanto dura l'SDK.
Quanto dura l'SDK
L'SDK utilizza il backoff esponenziale con jitter completo. In media, ogni nuovo tentativo attende più a lungo del precedente, con la randomizzazione per distribuire le richieste provenienti da più client.
Ritardi di base per tipo di errore
Il ritardo di base dipende dal fatto che l'errore sia transitorio o limitativo:
| Tipi di errore | Ritardo base | Rationale |
|---|---|---|
| Transitorio (senza limitazione) | 50 ms | Gli errori transitori si risolvono in genere in pochi millisecondi. Un breve ritardo di base consente un ripristino rapido. |
| Throttling | 1.000 ms | Il servizio ha una velocità limitata per la richiesta. Un ritardo di base più lungo consente di recuperare la capacità. |
Formula di backoff
L'SDK calcola ogni ritardo tra i tentativi utilizzando questa formula:
delay = random(0, 1) × min(20,000 ms, base_delay × 2^retry)
Dove:
-
random(0, 1)restituisce un valore distribuito uniformemente tra 0 e 1 -
base_delayè 50 ms per gli errori transitori o 1.000 ms per gli errori di limitazione -
retryparte da 0 per il primo tentativo (il secondo tentativo complessivo di richiesta)
Il limite massimo di backoff è di 20 secondi. Nessun ritardo individuale supera i 20 secondi indipendentemente dal numero di tentativi effettuati.
Esempi funzionanti
Esempio 1: errore transitorio, massimo 3 tentativi
| Fase | Cosa succede | Ritardo |
|---|---|---|
| Tentativo 1 | Richiesta iniziale. Il servizio restituisce HTTP 503. | (nessuno) |
| Tentativo 2 | L'SDK attende in modo casuale (0, 50 ms). Il tentativo non riesce con 503. | 0-50 ms (media ~25 ms) |
| Tentativo 3 | L'SDK attende in modo casuale (0, 100 ms). Il tentativo ha esito positivo. | 0—100 ms (media ~50 ms) |
La latenza totale aggiunta è in media di circa 75 ms in entrambi i tentativi.
Esempio 2: errore di limitazione, massimo 3 tentativi
| Fase | Cosa succede | Ritardo |
|---|---|---|
| Tentativo 1 | Richiesta iniziale. Il servizio restituisce 429Throttling. |
(nessuno) |
| Tentativo 2 | L'SDK attende in modo casuale (0,1000 ms). Riprova restituisce 429. | 0-1.000 ms (media ~500 ms) |
| Tentativo 3 | L'SDK attende in modo casuale (0, 2.000 ms). Il tentativo ha esito positivo. | 0—2.000 ms (media ~1.000 ms) |
La latenza totale aggiunta è in media di circa 1.500 ms in entrambi i tentativi.
Esempio 3: errore transitorio, raggiungimento del limite di backoff
Con un ritardo base di 50 ms, il ritardo calcolato prima del limite sarebbe:
| Tentativo di nuovo | Ritardo massimo calcolato | Dopo 20 s cap |
|---|---|---|
| 1 | 50 ms | 50 ms |
| 2 | 100 ms | 100 ms |
| 5 | 800 ms | 800 ms |
| 9 | 12.800 ms | 12.800 ms |
| 10 | 25.600 ms | 20.000 ms |
Il limite entra in vigore al decimo tentativo (11° tentativo) per gli errori transitori. Per gli errori di limitazione con una base di 1.000 ms, il limite ha effetto al sesto tentativo.
Nota
Con l'impostazione predefinita di un massimo di 3 tentativi (1 richiesta iniziale + 2 tentativi), il limite massimo di backoff non viene mai raggiunto. Questa tabella illustra cosa succede se si aumenta max_attempts ben oltre il valore predefinito.
Perché il jitter è importante
Il moltiplicatore casuale si chiama full jitter. In caso contrario, tutti i client che riscontrano un errore contemporaneamente riproverebbero contemporaneamente, generando una raffica di traffico di tentativi (il problema del «thundering herd»). Il full jitter diffonde i tentativi in modo uniforme su tutta la finestra di backoff, in modo che il servizio riceva un flusso costante di richieste anziché picchi sincronizzati.
Ad esempio, supponiamo che 1.000 clienti ricevano tutti un 503 nello stesso momento. Il full jitter distribuisce i primi tentativi in modo uniforme su una finestra di 50 ms invece di avere tutti i 1.000 tentativi esattamente a 50 ms.
Server-directed tempistica dei nuovi tentativi
Alcune Servizi AWS includono un'x-amz-retry-afterintestazione nelle risposte di errore. Il valore dell'intestazione è un ritardo in millisecondi. Quando è presente questa intestazione, l'SDK utilizza il ritardo specificato dal server, limitato a un minimo del ritardo di backoff calcolato e a un massimo del ritardo di backoff calcolato più 5.000 ms. Poiché il backoff calcolato è a sua volta limitato a 20 secondi, il ritardo massimo effettivo diretto dal server è di 25 secondi. L'SDK non applica il jitter a questo valore, perché ci si aspetta che il servizio lo faccia. Ciò consente al servizio di comunicare esattamente quando prevede di avere capacità disponibile.
Riprova la quota (token bucket)
L'SDK mantiene un budget interno per i token che tiene traccia del rapporto tra richieste riuscite e fallimenti. Quando i guasti sono diffusi, il budget si esaurisce e l'SDK restituisce direttamente gli errori. L'applicazione fallisce rapidamente invece di attendere tentativi che difficilmente avranno esito positivo. Ciò riduce anche il traffico dei tentativi di ripetizione, aiutando a risolvere più rapidamente le interruzioni del servizio.
Come funziona la quota di tentativi
Il budget dei token inizia al completo. Ogni tentativo di nuovo tentativo detrae i token. Quando un nuovo tentativo ha esito positivo, l'SDK ripristina i token utilizzati da quel nuovo tentativo. Quando una richiesta ha esito positivo al primo tentativo (non sono necessari nuovi tentativi), l'SDK ripristina 1 token. Quando il budget raggiunge lo zero, l'SDK smette di riprovare e restituisce gli errori direttamente nel codice.
| Parametro | Valore |
|---|---|
| Capacità di bilancio | 500 gettoni |
| Costo per tentativo temporaneo (senza limitazione) | 14 gettoni |
| Costo per ogni nuovo tentativo di limitazione | 5 gettoni |
| Token ripristinati in caso di successo dopo un nuovo tentativo | Importo consumato dall'ultimo tentativo (14 o 5) |
| Gettoni ripristinati in caso di successo senza un nuovo tentativo | 1 gettone |
Il costo più elevato per i tentativi transitori riflette il loro diverso schema di errore. Gli errori transitori come 500s e gli errori di connessione spesso indicano un problema a livello di servizio. In queste situazioni, è improbabile che un nuovo tentativo abbia successo. Aumenta la latenza delle chiamate, limita le risorse del cliente e può ritardare il ripristino per tutti. Gli errori di limitazione indicano che il servizio ha bisogno di più tempo prima che la richiesta possa avere successo. L'SDK attende più a lungo tra un tentativo e l'altro per aumentare le probabilità di successo.
Quando viene eseguito il nuovo tentativo del blocco delle quote
La quota di tentativi tiene traccia dei token in ogni momento, ma blocca i tentativi solo quando il budget è esaurito. Durante il normale funzionamento, quasi tutte le richieste vengono soddisfatte e il budget rimane pieno. La quota non ha effetti osservabili sui nuovi tentativi.
Un nuovo tentativo riuscito ripristina solo il costo dei token (14 o 5 token), non il costo dei precedenti tentativi falliti nella stessa richiesta. Ad esempio, se il primo tentativo fallisce e il secondo va a buon fine, il budget perde 14 token netti. Il budget si esaurisce più rapidamente quando i tentativi esauriscono tutti i tentativi senza successo, ma si riduce anche gradualmente quando le richieste richiedono più tentativi prima di riuscire.
Con l'impostazione predefinita di un massimo di 3 tentativi, la quota inizia a diminuire quando più del 22% circa delle richieste comporta errori transitori prolungati o più del 32% circa in caso di errori di limitazione. Al di sotto di queste percentuali, le richieste riuscite rigenerano il budget più rapidamente di quanto i tentativi falliti lo esauriscano.
Il saldo iniziale del budget, pari a 500 token, fornisce un buffer in grado di assorbire brevi sequenze di errori. Un breve picco di errori, anche grave, non blocca i nuovi tentativi a meno che non persista abbastanza a lungo da esaurire il buffer.
Implicazioni pratiche
-
Bassi tassi di fallimento: la quota non ha effetto. Il budget rimane pari o prossimo alla capacità.
-
In caso di interruzione del servizio: se un'alta percentuale delle tue richieste fallisce per un periodo prolungato, la quota si esaurisce e il cliente riceve immediatamente gli errori invece di attendere nuovi tentativi. Ciò riduce la latenza sul lato client, libera thread e connessioni e aiuta il servizio a riprendersi più rapidamente.
-
Ripristino: quando il servizio viene ripristinato e le richieste ricominciano ad avere successo, i tentativi andati a buon fine ripristinano l'intero costo dei token e i tentativi riusciti al primo tentativo ripristinano 1 token. Il budget viene riempito gradualmente e i tentativi riprendono automaticamente.
-
Ambito: il budget del token è in genere limitato a una singola istanza del client SDK. L'ambito esatto può variare in base all'SDK. Non è condiviso tra processi o host.
Service-specific comportamento
DynamoDB
I client DynamoDB utilizzano impostazioni predefinite ottimizzate per il profilo a bassa latenza di DynamoDB:
| Impostazione | Impostazione predefinita generale | Impostazione predefinita di DynamoDB |
|---|---|---|
| Ritardo base transitorio (senza limitazione) | 50 ms | 25 ms |
| Ritardo base di limitazione | 1.000 ms | 1.000 ms |
| Numero massimo di tentativi | 3 | 4 |
Queste impostazioni predefinite si applicano sia ad Amazon DynamoDB che a DynamoDB Streams.
Long-polling operazioni
Alcune AWS operazioni utilizzano polling lunghi. Possono tenere aperta una connessione in attesa dell'arrivo del lavoro. Queste operazioni ricevono un trattamento speciale di riprova:
-
SQS.ReceiveMessage -
SFN.GetActivityTask -
SWF.PollForActivityTask -
SWF.PollForDecisionTask
Comportamento speciale: quando la quota di tentativi è esaurita e i tentativi vengono bloccati (passaggio 7Cosa succede quando una richiesta fallisce), l'SDK applica comunque un ritardo di backoff prima di restituire l'errore al codice.
Questo è importante perché le operazioni di polling prolungato vengono in genere eseguite in un ciclo ristretto. Il codice chiamaReceiveMessage, elabora tutti i messaggi, quindi richiama ReceiveMessage immediatamente di nuovo. Senza il backoff forzato, un budget di token esaurito farebbe sì che l'SDK restituisca errori senza ritardi. Il ciclo di polling invierebbe quindi immediatamente la richiesta successiva, aumentando l'utilizzo della CPU del client e generando traffico aggiuntivo. Il ritardo di backoff forzato interrompe questo ciclo, mantenendo gestibili l'utilizzo delle risorse del cliente e la frequenza di polling durante gli errori.
Supporto di AWS SDK e strumenti
La tabella seguente elenca la disponibilità del comportamento di ripetizione aggiornato in ogni SDK. Per SDK-specific informazioni dettagliate, tra cui la versione minima, le impostazioni predefinite relative al periodo precedente e successivo e gli esempi di codice, consulta il problema di tracciamento. GitHub
| SDK | Supportata | GitHub problema di tracciamento |
|---|---|---|
| SDK per Java 2.x | Sì | Problema di tracciamento |
| SDK per Python (Boto3) | Sì | Problema di tracciamento |
| SDK per .NET 4.x | Sì | Problema di tracciamento |
| Strumenti per PowerShell V5 | Sì | Problema di tracciamento |
| SDK per 3.x JavaScript | Sì | Problema di tracciamento |
| SDK per PHP 3.x | Sì | Problema di tracciamento |
| SDK per Kotlin | Sì | Problema di tracciamento |
| SDK per Rust | Sì | Problema di tracciamento |
| SDK per Swift | Vedi problema di tracciamento | Problema di tracciamento |
| SDK per Ruby 3.x | Vedi problema di tracciamento | Problema di tracciamento |
| SDK per Go V2 (1.x) | Vedi problema di tracciamento | Problema di tracciamento |
| SDK per C++ | Vedi problema di tracciamento | Problema di tracciamento |
| AWS CLI v2 | Vedi problema di tracciamento | Problema di tracciamento |