Cosa significa il nuovo annuncio "S3 Aumento del tasso di richiesta"


12

Il 17 luglio 2018 c'è stato un annuncio AWS ufficiale che spiegava che non è più necessario randomizzare i primi caratteri di ogni chiave oggetto S3 per ottenere le massime prestazioni: https://aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-annuncia-aumento-richiesta-rate-prestazioni /

Amazon S3 annuncia un aumento del tasso di richieste

Pubblicato il: 17 luglio 2018

Amazon S3 ora offre prestazioni migliorate per supportare almeno 3.500 richieste al secondo per aggiungere dati e 5.500 richieste al secondo per recuperare i dati, il che può far risparmiare tempo di elaborazione significativo senza costi aggiuntivi. Ogni prefisso S3 può supportare queste percentuali di richiesta, rendendo semplice aumentare significativamente le prestazioni.

Le applicazioni in esecuzione su Amazon S3 oggi godranno di questo miglioramento delle prestazioni senza modifiche e i clienti che sviluppano nuove applicazioni su S3 non devono effettuare personalizzazioni delle applicazioni per raggiungere queste prestazioni. Il supporto di Amazon S3 per richieste parallele significa che puoi scalare le tue prestazioni S3 in base al fattore del tuo cluster di calcolo, senza apportare personalizzazioni alla tua applicazione. Scala delle prestazioni per prefisso, in modo da poter utilizzare tutti i prefissi necessari in parallelo per ottenere il throughput richiesto. Non ci sono limiti al numero di prefissi.

Questo aumento delle prestazioni della frequenza di richiesta S3 rimuove qualsiasi guida precedente per randomizzare i prefissi degli oggetti per ottenere prestazioni più veloci. Ciò significa che ora è possibile utilizzare modelli di denominazione logici o sequenziali nella denominazione di oggetti S3 senza implicazioni sulle prestazioni. Questo miglioramento è ora disponibile in tutte le regioni AWS. Per ulteriori informazioni, visita la Guida per gli sviluppatori di Amazon S3.

È fantastico, ma è anche confuso. Dice che ogni prefisso S3 può supportare questi tassi di richiesta, rendendo semplice aumentare significativamente le prestazioni

Ma poiché prefissi e delimitatori sono solo argomenti per l' GET Bucket (List Objects)API quando si elenca il contenuto dei bucket, come può avere senso parlare delle prestazioni di recupero degli oggetti "per prefisso". Ogni chiamata a GET Bucket (List Objects)può scegliere qualunque prefisso e delimitatore desideri, quindi i prefissi non sono un'entità predefinita.

Ad esempio, se il mio bucket ha questi oggetti:

a1/b-2
a1/c-3

Quindi potrei scegliere di utilizzare "/" o "-" come delimitatore ogni volta che elenco il contenuto del bucket, quindi potrei considerare i miei prefissi come

a1/ 

o

a1/b-
a1/c-

Ma poiché l' GET ObjectAPI utilizza l'intera chiave, il concetto di un prefisso o delimitatore particolare non esiste per il recupero degli oggetti. Quindi posso aspettarmi 5.500 req / sec su a1/o in alternativa 5.500 req / sec su a1/b-e 5.500 on a1/c-?

Qualcuno può quindi spiegare cosa si intende per annuncio quando suggerisce un determinato livello di prestazioni (ad es. +5.500 richieste al secondo per recuperare i dati) per "ogni prefisso s3"?


Penso di avere una spiegazione per questo, ma sto cercando di vedere se riesco a trovare qualche conferma. Ho il sospetto che abbia a che fare con l'algoritmo di suddivisione della partizione dell'indice, che è automatico e basato sul carico del traffico ... e lessicale piuttosto che basato sull'hash.
Michael - sqlbot,

Risposte:


9

Ciò che viene effettivamente indicato qui come prefisso sembra essere una semplificazione eccessiva che si riferisce in realtà a ciascuna partizione dell'indice bucket. L'indice è lessicale, quindi le suddivisioni si verificano in base ai caratteri iniziali nella chiave dell'oggetto. Quindi, viene indicato come prefisso .

S3 gestisce le partizioni di indice in modo automatico e trasparente, quindi la definizione precisa di un "prefisso" qui è in realtà un po 'imprecisa: è "qualunque cosa S3 decida sia necessaria per supportare il carico di lavoro del bucket." S3 divide le partizioni di indice in risposta al carico di lavoro, quindi due oggetti che potrebbero avere lo stesso "prefisso" oggi potrebbero avere prefissi diversi domani, tutti eseguiti in background.

In questo momento, a1 / a -... e a1 / b -... e a1 / c -... possono essere tutti un singolo prefisso. Ma getta abbastanza traffico al bucket e S3 potrebbe decidere di dividere la partizione, in modo che domani a1 / a- e a1 / b- possano trovarsi in un prefisso, mentre a1 / c- potrebbe trovarsi nel proprio prefisso. (Cioè, le chiavi <a1 / c- sono in una partizione, mentre le chiavi> = a1 / c- sono ora in una partizione diversa).

Dove e quando e in particolare quale soglia attiva il comportamento diviso non è documentato, ma sembra essere correlato solo al numero di richieste e non al numero o alla dimensione degli oggetti. In precedenza, queste partizioni erano limitate a poche centinaia di richieste al secondo ciascuna, e questo è stato notevolmente aumentato.


1
Molto interessante e credibile. Tuttavia, poiché i prefissi sono dinamici in base al carico, questo sicuramente rende insignificante assegnare qualsiasi misura di prestazione specifica "per prefisso". Se i prefissi del bucket vengono modificati in modo dinamico, non esiste una misura delle prestazioni affidabile. O forse potrei dedurre che i prefissi dovrebbero in teoria cambiare dinamicamente fino a quando non posso aspettarmi 5.500 req / sec per oggetto S3?
John Rees,

1
La misura delle prestazioni è ancora utile perché il ridimensionamento della benna tende solo ad andare in una direzione: in alto, non in basso. L'apparente assurdità del ridimensionamento a un singolo oggetto per partizione sembra in gran parte scomparire quando ti rendi conto di quanti soldi AWS farebbe se pagassi 5k + req / s per oggetto.
Michael - sqlbot

1
Sì, ero un po 'pedante con il singolo oggetto per partizione. :-) Tuttavia, più seriamente, immagino che ciò significhi che se il mio bucket di oggetti 10000 contiene solo 10 oggetti popolari, si spera che S3 alla fine ripartizionerà fino a quando ognuno dei 10 potrebbe ottenere 5k reqs / sec ciascuno mentre gli altri languiscono in un paio di grandi partizioni. Plausibile?
John Rees,

2
Ho piena fiducia che S3 si adatterà al carico di lavoro, sì. La guida ufficiale per il traffico intenso sul lato della richiesta è, come prima, l'uso di CloudFront insieme a S3, poiché CloudFront è distribuito a livello gobale e memorizzerà nella cache gli oggetti nei bordi più vicini agli spettatori che li richiedono. Il prezzo è tale che l'aggiunta di CloudFront a S3 spesso non ha sostanzialmente alcun impatto sul costo complessivo (poiché S3 non addebita alcuna larghezza di banda quando la richiesta arriva da CloudFront per far fronte a una mancanza di cache).
Michael - sqlbot

Grazie Michael. Davvero buone risposte attente molto apprezzate.
John Rees,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.