Valutare la capacità fornita per un provisioning di dimensioni adeguate - Amazon DynamoDB

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à.

Valutare la capacità fornita per un provisioning di dimensioni adeguate

In questa sezione viene fornita una panoramica su come valutare se il provisioning è di dimensioni appropriate per le tabelle DynamoDB. Man mano che il carico di lavoro si evolve, è necessario modificare le procedure operative in modo appropriato, soprattutto quando la tabella DynamoDB è configurata in modalità assegnata e si corre il rischio di provisioning eccessivo o insufficiente delle tabelle.

Le procedure descritte di seguito richiedono informazioni statistiche che devono essere acquisite dalle tabelle DynamoDB che supportano l'applicazione di produzione. Per comprendere il comportamento dell'applicazione, è necessario definire un periodo di tempo sufficientemente significativo per acquisire la stagionalità dei dati dall'applicazione. Ad esempio, se l'applicazione mostra pattern settimanali, l'utilizzo di un periodo di tre settimane dovrebbe fornire spazio sufficiente per analizzare le esigenze di velocità di trasmissione effettiva dell'applicazione.

Se non sai da dove iniziare, utilizza almeno un mese di utilizzo dei dati per i calcoli seguenti.

Durante la valutazione della capacità, le tabelle DynamoDB possono configurare le unità di capacità di lettura (RCU) e le unità di capacità di scrittura (WCU) in modo indipendente. Se nelle tabelle sono configurati degli indici secondari globali (GSI), sarà necessario specificare la velocità di trasmissione effettiva che consumeranno, che sarà anche indipendente dalle RCU e dalle WCU della tabella di base.

Nota

Gli indici secondari locali (LSI) utilizzano la capacità della tabella di base.

Come recuperare le metriche di consumo nelle tabelle DynamoDB

Per valutare la tabella e la capacità del GSI, monitora le seguenti CloudWatch metriche e seleziona la dimensione appropriata per recuperare le informazioni della tabella o del GSI:

unità di capacità in lettura Unità di capacità in scrittura

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

È possibile eseguire questa operazione tramite o il. AWS CLI AWS Management Console

AWS CLI

Prima di recuperare le metriche di consumo della tabella, dovremo iniziare acquisendo alcuni punti dati storici utilizzando l'API. CloudWatch

Inizia creando due file: write-calc.json e read-calc.json. Questi file rappresenteranno i calcoli per una tabella o un GSI. Dovrai aggiornare alcuni campi, come indicato nella tabella seguente, in modo che corrispondano al tuo ambiente.

Nome campo Definizione Esempio
<table-name> Il nome della tabella che verrà analizzata SampleTable
<period> Il periodo di tempo che utilizzerai per valutare il target di utilizzo, in secondi Per un periodo di 1 ora è necessario specificare: 3600
<start-time> L'inizio dell'intervallo di valutazione, specificato nel formato ISO8601 2022-02-21T23:00:00
<end-time> La fine dell'intervallo di valutazione, specificato nel formato ISO8601 2022-02-22T06:00:00

Il file di calcolo delle scritture recupererà il numero di WCU assegnate e utilizzate nel periodo di tempo dell'intervallo di date specificato. Genererà inoltre una percentuale di utilizzo che verrà utilizzata per l'analisi. Il contenuto completo del file write-calc.json deve corrispondere a quanto segue:

{ "MetricDataQueries": [ { "Id": "provisionedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ProvisionedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ConsumedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>"" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedWCU/PERIOD(consumedWCU)", "Label": "Consumed WCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedWCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<ent-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

Il file di calcolo delle letture utilizza un file simile. Questo file recupererà il numero di RCU assegnate e utilizzate durante il periodo di tempo dell'intervallo di date specificato. Il contenuto del file read-calc.json deve corrispondere a quanto segue:

{ "MetricDataQueries": [ { "Id": "provisionedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ProvisionedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/DynamoDB", "MetricName": "ConsumedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedRCU/PERIOD(consumedRCU)", "Label": "Consumed RCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedRCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<end-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

Una volta creati i file, è possibile iniziare a recuperare i dati di utilizzo.

  1. Per recuperare i dati di utilizzo delle scritture, esegui il seguente comando:

    aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
  2. Per recuperare i dati di utilizzo delle letture, esegui il seguente comando:

    aws cloudwatch get-metric-data --cli-input-json file://read-calc.json

Il risultato di entrambe le query sarà una serie di punti dati in formato JSON che verranno utilizzati per l'analisi. Il risultato dipenderà dal numero di punti dati specificati, dal periodo e dai dati specifici del carico di lavoro. Potrebbe essere simile a quanto segue:

{ "MetricDataResults": [ { "Id": "utilizationPercentage", "Label": "Utilization Percentage", "Timestamps": [ "2022-02-22T05:00:00+00:00", "2022-02-22T04:00:00+00:00", "2022-02-22T03:00:00+00:00", "2022-02-22T02:00:00+00:00", "2022-02-22T01:00:00+00:00", "2022-02-22T00:00:00+00:00", "2022-02-21T23:00:00+00:00" ], "Values": [ 91.55364583333333, 55.066631944444445, 2.6114930555555556, 24.9496875, 40.94725694444445, 25.61819444444444, 0.0 ], "StatusCode": "Complete" } ], "Messages": [] }
Nota

Se si specifica un periodo breve e un intervallo di tempo lungo, potrebbe essere necessario modificare il MaxDatapoints che, per impostazione predefinita, è impostato su 24 nello script. Ciò rappresenta un punto dati per ora e 24 al giorno.

AWS Management Console
  1. Accedi AWS Management Console e vai alla pagina del servizio. CloudWatch Seleziona un'opzione appropriata, Regione AWS se necessario.

  2. Individua la sezione Metriche nella barra di navigazione a sinistra e seleziona Tutte le metriche.

  3. Verrà aperto un pannello di controllo con due pannelli. Il pannello superiore mostrerà la grafica e il pannello inferiore mostrerà le metriche che desideri rappresentare graficamente. Scegli DynamoDB.

  4. Scegli Table Metrics. Questa sezione mostrerà le tabelle relative alla regione corrente.

  5. Usa la casella di ricerca per cercare il nome della tabella e scegli le metriche dell'operazione di scrittura: e ConsumedWriteCapacityUnits ProvisionedWriteCapacityUnits

    Nota

    Questo esempio illustra le metriche delle operazioni di scrittura, ma puoi anche utilizzare questi passaggi per visualizzare graficamente le metriche delle operazioni di lettura.

  6. Scegli la scheda Metriche grafiche (2) per modificare le formule. Per impostazione predefinita, CloudWatch seleziona la funzione statistica Media per i grafici.

    Le metriche grafiche selezionate e la media come funzione statistica predefinita.
  7. Dopo aver selezionato entrambe le metriche nel grafico (la casella di controllo a sinistra), selezionare il menu Add math (Aggiungi matematica), seguito da Common (Comune), quindi selezionare la funzione Percentage (Percentuale). Ripetere la procedura due volte.

    La prima volta selezionando la funzione Percentage (Percentuale):

    La seconda volta selezionando la funzione Percentage (Percentuale):

  8. A questo punto dovresti avere quattro metriche nel menu in basso. Lavoriamo sul calcolo ConsumedWriteCapacityUnits. Per essere coerenti, dobbiamo abbinare i nomi a quelli usati nella AWS CLI sezione. Fare clic su m1 ID e modificare questo valore in consumedWCU.

  9. Modifica della statistica da Average (Media) a Sum (Somma). Questa operazione creerà automaticamente un'altra metrica denominata ANOMALY_DETECTION_BAND. Per quanto riguarda l'ambito di questa procedura, possiamo ignorarla rimuovendo la casella di controllo su ad1 metric appena generato.

  10. Ripetere il passaggio 8 per rinominare m2 ID in provisionedWCU. Lasciare la statistica impostata su Average (Media).

  11. Selezionare l'etichetta Expression1 e aggiornare il valore a m1 e l'etichetta su Consumed WCU (WCU utilizzate).

    Nota

    Assicurati di aver selezionato solo m1 (casella di controllo a sinistra) e provisionedWCU per visualizzare correttamente i dati. Aggiorna la formula facendo clic su Details (Dettagli) e modificando la formula in consumedWCU/PERIOD(consumedWCU). Questo passaggio potrebbe anche generare un'altra metrica ANOMALY_DETECTION_BAND, ma per l'ambito di questa procedura possiamo ignorarla.

  12. Ora dovresti avere due grafici: uno che indica le WCU assegnate sulla tabella e l'altro che indica le WCU utilizzate. La forma del grafico potrebbe essere diversa da quella riportata di seguito, ma puoi usarla come riferimento:

  13. Aggiornare la formula percentuale selezionando il grafico Expression2 (e2). Rinominare le etichette e gli ID in utilizationPercentage. Rinominare la formula in modo che corrisponda a 100*(m1/provisionedWCU).

  14. Rimuovere la casella di controllo da tutte le metriche tranne utilizationPercentage per visualizzare i pattern di utilizzo. L'intervallo predefinito è impostato su 1 minuto, ma è possibile modificarlo in base alle proprie esigenze.

Ecco una vista di un periodo di tempo più lungo e di un periodo maggiore di 1 ora. Puoi vedere che ci sono alcuni intervalli in cui l'utilizzo era superiore al 100%, ma questo particolare carico di lavoro ha intervalli più lunghi con utilizzo pari a zero.

A questo punto, potresti avere risultati diversi dalle immagini di questo esempio. Tutto dipende dai dati del carico di lavoro. Gli intervalli con un utilizzo superiore al 100% sono soggetti a eventi di limitazione della larghezza di banda della rete. DynamoDB offre capacità di espansione, ma non appena viene raggiunta la capacità di espansione, qualsiasi valore superiore al 100% verrà limitato.

Come identificare le tabelle DynamoDB con un provisioning insufficiente

Per la maggior parte dei carichi di lavoro, una tabella è considerata con provisioning insufficiente quando consuma costantemente più dell'80% della capacità assegnata.

La capacità di espansione è una funzionalità di DynamoDB che consente ai clienti di utilizzare temporaneamente più RCU/WCU rispetto a quanto originariamente previsto (più della velocità di trasmissione effettiva assegnata al secondo definita nella tabella). La capacità di espansione è stata creata per assorbire improvvisi aumenti di traffico dovuti a eventi speciali o picchi di utilizzo. Questa capacità di espansione ha una durata limitata. Non appena le RCU e le WCU inutilizzate si esauriscono, se si tenta di utilizzare più capacità di quella assegnata, si verificherà una limitazione. Quando il traffico delle applicazioni si avvicina al tasso di utilizzo dell'80%, il rischio di limitazione della larghezza di banda della rete è notevolmente maggiore.

La regola del tasso di utilizzo dell'80% varia in base alla stagionalità dei dati e alla crescita del traffico. Considerare i seguenti scenari:

  • Se il traffico è rimasto stabile a un tasso di utilizzo di circa il 90% negli ultimi 12 mesi, la tabella ha la capacità corretta

  • Se il traffico delle applicazioni aumenta a un tasso dell'8% mensile in meno di 3 mesi, si arriverà al 100%

  • Se il traffico delle applicazioni aumenta a un tasso dell'5% mensile in meno di 4 mesi, si arriverà al 100%

I risultati delle query precedenti forniscono un'immagine del tasso di utilizzo. Utilizzali come guida per valutare ulteriormente altre metriche che possono aiutarti a scegliere di aumentare la capacità della tabella in base alle esigenze (ad esempio: un tasso di crescita mensile o settimanale). Collabora con il tuo team operativo per definire qual è una buona percentuale per il carico di lavoro e le tabelle.

Esistono scenari speciali in cui i dati non sono affidabili quando li analizziamo su base giornaliera o settimanale. Ad esempio, con le applicazioni stagionali che presentano picchi di utilizzo durante l'orario di lavoro (ma poi scendono quasi a zero al di fuori dell'orario di lavoro), è possibile trarre vantaggio dalla pianificazione della scalabilità automatica in cui si specificano le ore del giorno (e i giorni della settimana) per aumentare la capacità fornita e quando ridurla. Invece di puntare a una maggiore capacità in modo da coprire le ore di punta, puoi anche trarre vantaggio dalle configurazioni di scalabilità automatica delle tabelle di DynamoDB se la stagionalità è meno pronunciata.

Nota

Quando crei una configurazione del dimensionamento automatico di DynamoDB per la tabella di base, ricordati di includere un'altra configurazione per tutti i GSI associati alla tabella.

Come identificare le tabelle DynamoDB con provisioning eccessivo

I risultati delle query ottenuti dagli script precedenti forniscono i dati necessari per eseguire alcune analisi iniziali. Se il set di dati presenta valori di utilizzo inferiori al 20% per diversi intervalli, è possibile che la tabella presenti un provisioning eccessivo. Per definire ulteriormente se è necessario ridurre il numero di WCU e RCU, è necessario riesaminare le altre letture negli intervalli.

Quando le tabelle contengono diversi intervalli di utilizzo ridotti, puoi davvero trarre vantaggio dall'utilizzo di politiche di auto scaling, pianificando la scalabilità automatica o semplicemente configurando le politiche di auto scaling predefinite per la tabella basate sull'utilizzo.

Se hai un carico di lavoro con un basso utilizzo e un rapporto accelerazione elevato (Max (ThrottleEvents) /Min (ThrottleEvents) nell'intervallo), ciò potrebbe accadere quando hai un carico di lavoro molto intenso in cui il traffico aumenta molto durante alcuni giorni (o ore), ma in generale il traffico è costantemente basso. In questi scenari potrebbe essere utile utilizzare la scalabilità automatica pianificata.