Co oznacza nowa informacja „S3 Improved Request Rate Performance”?

12

17 lipca 2018 r. Pojawiło się oficjalne ogłoszenie AWS wyjaśniające, że nie ma już potrzeby losowania pierwszych znaków każdego klucza obiektu S3 w celu osiągnięcia maksymalnej wydajności: https://aws.amazon.com/about-aws/whats-new / 2018/07 / amazon-s3-annovers-wzrosły-żądanie-szybkość-wydajność /

Amazon S3 ogłasza wzrost wydajności wskaźnika żądań

Wysłany: 17 lipca 2018 r

Amazon S3 zapewnia teraz zwiększoną wydajność w zakresie obsługi co najmniej 3500 żądań na sekundę w celu dodania danych i 5500 żądań na sekundę w celu pobrania danych, co może zaoszczędzić znaczny czas przetwarzania bez dodatkowych opłat. Każdy prefiks S3 może obsługiwać te prędkości żądań, co znacznie zwiększa wydajność.

Aplikacje działające dzisiaj na Amazon S3 będą cieszyć się poprawą wydajności bez żadnych zmian, a klienci budujący nowe aplikacje na S3 nie muszą dokonywać żadnych modyfikacji aplikacji, aby osiągnąć tę wydajność. Obsługa Amazon S3 dla równoległych żądań oznacza, że ​​możesz skalować wydajność S3 ze względu na klaster obliczeniowy, bez dokonywania jakichkolwiek dostosowań w swojej aplikacji. Skale wydajności dla każdego prefiksu, dzięki czemu można użyć tyle prefiksów, ile potrzebujesz równolegle, aby osiągnąć wymaganą przepustowość. Nie ma ograniczeń co do liczby prefiksów.

Ten wzrost wydajności wskaźnika żądań S3 usuwa wszelkie wcześniejsze wytyczne w celu losowego przydzielania prefiksów obiektów w celu osiągnięcia szybszej wydajności. Oznacza to, że możesz teraz używać logicznych lub sekwencyjnych wzorców nazewnictwa w nazewnictwie obiektów S3 bez wpływu na wydajność. To ulepszenie jest teraz dostępne we wszystkich regionach AWS. Aby uzyskać więcej informacji, odwiedź Amazon S3 Developer Guide.

To świetnie, ale jest też mylące. Mówi, że każdy prefiks S3 może obsługiwać te stawki żądań, co znacznie zwiększa wydajność

Ponieważ jednak prefiksy i ograniczniki są tylko argumentami GET Bucket (List Objects)interfejsu API podczas wyświetlania zawartości segmentów, w jaki sposób można mówić o wydajności pobierania obiektów „na prefiks”. Każde wywołanie GET Bucket (List Objects)może wybrać dowolny prefiks i ogranicznik, jakie chce, więc prefiksy nie są predefiniowanym bytem.

Na przykład, jeśli moje wiadro ma te obiekty:

a1/b-2
a1/c-3

Następnie mogę użyć „/” lub „-” jako mojego ogranicznika za każdym razem, gdy wymieniam zawartość segmentu, więc mogę rozważyć moje prefiksy jako

a1/ 

lub

a1/b-
a1/c-

Ponieważ jednak GET Objectinterfejs API używa całego klucza, pojęcie konkretnego prefiksu lub separatora nie istnieje w przypadku pobierania obiektów. Więc czy mogę spodziewać się 5,500 req / sek włączony a1/lub alternatywnie 5,500 req / sek włączony a1/b-i 5,500 włączony a1/c-?

Więc czy ktoś może wyjaśnić, co rozumie się przez ogłoszenie, które sugeruje określony poziom wydajności (np. +5,500 żądań na sekundę w celu pobrania danych) dla „każdego prefiksu s3”?

John Rees
źródło
Wydaje mi się, że mam na to wytłumaczenie, ale szukam potwierdzenia. Podejrzewam, że ma to związek z algorytmem podziału partycji indeksu, który jest automatyczny i oparty na obciążeniu ruchem ... i raczej oparty na leksykach niż na haszowaniu.
Michael - sqlbot

Odpowiedzi:

9

To, co faktycznie nazywa się tutaj przedrostkiem, wydaje się nadmiernym uproszczeniem, które naprawdę odnosi się do każdej partycji indeksu segmentu. Indeks jest leksykalny, więc podziały występują na podstawie wiodących znaków w kluczu obiektu. Dlatego jest nazywany prefiksem .

S3 zarządza partycjami indeksowymi automatycznie i przejrzyście, więc dokładna definicja „przedrostka” tutaj jest w rzeczywistości nieco nieprecyzyjna: „wszystko, co zdecyduje S3, jest potrzebne do obsługi obciążenia wiadra”. S3 dzieli partycje indeksu w odpowiedzi na obciążenie, więc dwa obiekty, które dziś mogą mieć ten sam „prefiks”, jutro mogą mieć różne prefiksy, wszystkie wykonane w tle.

W tej chwili wszystkie a1 / a -... i a1 / b -... i a1 / c -... mogą być pojedynczymi prefiksami. Ale rzucaj wystarczającą ilością ruchu do segmentu, a S3 może zdecydować, że partycja powinna zostać podzielona, ​​tak aby jutro a1 / a- i a1 / b- mogły mieć jeden prefiks, podczas gdy a1 / c- może mieć własny prefiks. (To znaczy, klucze <a1 / c- są na jednej partycji, podczas gdy klucze> = a1 / c- są teraz na innej partycji).

Gdzie i kiedy, a konkretnie jaki próg wyzwala zachowanie podziału, nie jest udokumentowane, ale wydaje się, że jest związane tylko z liczbą żądań, a nie z liczbą lub rozmiarem obiektów. Wcześniej partycje te były ograniczone do kilkuset żądań na sekundę, co znacznie wzrosło.

Michael - sqlbot
źródło
1
Bardzo interesujące i wiarygodne. Ponieważ jednak prefiksy są dynamiczne w zależności od obciążenia, z pewnością sprawia, że ​​przypisywanie jakiejkolwiek określonej miary wydajności „na prefiks” jest bezcelowe. Jeśli prefiksy segmentu zmieniają się dynamicznie, nie ma wiarygodnej miary wydajności. A może mógłbym wywnioskować, że przedrostki powinny teoretycznie zmieniać się dynamicznie, dopóki nie będę mógł oczekiwać 5500 req / s na Obiekt S3?
John Rees,
1
Miara wydajności jest nadal przydatna, ponieważ skalowanie segmentu ma tendencję do podążania tylko w jednym kierunku - w górę, a nie w dół. Pozorna absurdalność skalowania do jednego obiektu na partycję w dużej mierze wydaje się zanikać, gdy uświadomisz sobie, ile zarabiałby AWS, gdybyś płacił za 5k + req / s na obiekt.
Michael - sqlbot
1
Tak, byłem trochę pedantyczny z pojedynczym obiektem na partycję. :-) Jednak, bardziej poważnie, myślę, że oznacza to, że mógłbym oczekiwać, że jeśli mój koszyk na 10000 obiektów zawiera tylko 10 popularnych obiektów, to mam nadzieję, że S3 w końcu podzieli się, aż każda z 10 będzie mogła uzyskać 5k reqs na sekundę, podczas gdy inni marnieją w kilku dużych partycjach. Do przyjęcia?
John Rees,
2
Mam całkowitą pewność, że S3 dostosuje się do obciążenia, tak. Oficjalne wskazówki dla dużego ruchu po stronie żądania, podobnie jak poprzednio, używają CloudFront w połączeniu z S3, ponieważ CloudFront jest dystrybuowany w sposób gobalny i buforuje obiekty na krawędziach najbliższych widzów, którzy o nie proszą. Ceny są takie, że dodanie CloudFront do S3 często nie ma zasadniczo wpływu na całkowity koszt (ponieważ S3 nie nalicza żadnej przepustowości, gdy przychodzi z CloudFront żądanie obsługi brakującej pamięci podręcznej).
Michael - sqlbot
Dzięki Michael. Naprawdę dobre, ostrożne odpowiedzi bardzo mile widziane.
John Rees,