Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

W Skyeng używamy Amazon Redshift, włączając skalowanie równoległe, dlatego ten artykuł Stefana Gromolla, założyciela dotgo.com, wydał nam się interesujący dla intermix.io. Po tłumaczeniu trochę naszego doświadczenia od inżyniera danych Daniyara Belkhodżajewa.

Architektura Amazonki Redshift umożliwia skalowanie poprzez dodawanie nowych węzłów do klastra. Konieczność obsługi szczytowej liczby żądań może prowadzić do nadmiernej alokacji węzłów. Skalowanie współbieżności, w przeciwieństwie do dodawania nowych węzłów, zwiększa moc obliczeniową w miarę potrzeb.

Skalowanie równoległe Amazon Redshift zapewnia klastrom Redshift dodatkową pojemność w celu obsługi szczytowych wolumenów żądań. Działa poprzez przenoszenie żądań do nowych „równoległych” klastrów w tle. Żądania są kierowane w oparciu o konfigurację i reguły WLM.

Ceny skalowania równoległego opierają się na modelu kredytowym z warstwą bezpłatną. W przypadku powyższych bezpłatnych kredytów płatność opiera się na czasie przetwarzania żądań przez klaster skalowania równoległego.

Autor przetestował skalowanie równoległe na jednym z klastrów wewnętrznych. W tym poście opowie o wynikach testu i poda wskazówki, jak zacząć.

Wymagania klastra

Aby móc korzystać ze skalowania równoległego, klaster Amazon Redshift musi spełniać następujące wymagania:

- platforma: EC2-VPC;
— typ węzła: dc2.8xlarge, ds2.8xlarge, dc2.large lub ds2.xlarge;
— liczba węzłów: od 2 do 32 (klastry z jednym węzłem nie są obsługiwane).

Akceptowalne typy żądań

Skalowanie równoległe nie jest odpowiednie dla wszystkich typów zapytań. W pierwszej wersji przetwarza tylko żądania odczytu, które spełniają trzy warunki:

— zapytania SELECT są tylko do odczytu (choć planowanych jest więcej typów);
— zapytanie nie odwołuje się do tabeli w stylu sortowania INTERLEAVED;
- Zapytanie nie używa Amazon Redshift Spectrum do odwoływania się do tabel zewnętrznych.

Aby żądanie mogło zostać skierowane do klastra skalowania równoległego, żądanie musi zostać umieszczone w kolejce. Dodatkowo zapytania kwalifikujące się do kolejki SQA (przyspieszenie krótkich zapytań), nie będzie działać w klastrach o skali równoległej.

Kolejki i SQA wymagają odpowiedniej konfiguracji Zarządzanie obciążeniem przesunięciem ku czerwieni (WLM). Zalecamy najpierw optymalizację WLM - zmniejszy to potrzebę równoległego skalowania. A to o tyle ważne, że skalowanie równoległe jest bezpłatne tylko przez określoną liczbę godzin. AWS twierdzi, że skalowanie równoległe będzie bezpłatne dla 97% klientów, co prowadzi nas do kwestii cen.

Koszt skalowania równoległego

AWS oferuje model kredytowy do skalowania równoległego. Każdy aktywny klaster Amazonka Przesunięcie ku czerwieni Gromadzi kredyty co godzinę, aż do jednej godziny bezpłatnych kredytów równoległego skalowania dziennie.

Płacisz tylko wtedy, gdy wykorzystanie klastrów skalowania równoległego przekracza liczbę otrzymanych kredytów.

Koszt jest obliczany według stawki za sekundę na żądanie dla klastra równoległego używanego powyżej stawki bezpłatnej. Opłata jest naliczana tylko za czas trwania żądań, przy czym minimalna opłata wynosi jedną minutę za każdą aktywację klastra skalowania równoległego. Stawka za sekundę na żądanie obliczana jest w oparciu o ogólne zasady cenowe Amazonka Przesunięcie ku czerwieni, czyli zależy to od typu węzła i liczby węzłów w klastrze.

Uruchamianie skalowania równoległego

Dla każdej kolejki WLM wyzwalane jest skalowanie równoległe. Przejdź do konsoli AWS Redshift i wybierz Zarządzanie obciążeniem z lewego menu nawigacyjnego. Z poniższego menu rozwijanego wybierz grupę parametrów WLM klastra.

Obok każdej kolejki zobaczysz nową kolumnę o nazwie „Tryb skalowania współbieżności”. Wartość domyślna to „Wyłączone”. Kliknij „Edytuj”, aby zmienić ustawienia dla każdej kolejki.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Konfiguracja

Skalowanie równoległe polega na przekazywaniu odpowiednich żądań do nowych dedykowanych klastrów. Nowe klastry mają ten sam rozmiar (typ i liczbę węzłów) co klaster główny.

Domyślna liczba klastrów używanych do skalowania równoległego to jeden (1), z możliwością skonfigurowania maksymalnie dziesięciu (10) klastrów.
Całkowitą liczbę klastrów do skalowania równoległego można ustawić za pomocą parametru max_concurrency_scaling_clusters. Zwiększenie wartości tego parametru zapewnia dodatkowe redundantne klastry.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Monitorowanie

W konsoli AWS Redshift dostępnych jest kilka dodatkowych wykresów. Wykres Maksymalna liczba skonfigurowanych klastrów skalowania współbieżności przedstawia wartość max_concurrency_scaling_clusters w czasie.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Liczba aktywnych klastrów skalujących wyświetlana jest w interfejsie użytkownika w sekcji „Aktywność skalowania współbieżności”:

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

W zakładce Zapytania znajduje się kolumna wskazująca, czy zapytanie zostało wykonane w klastrze głównym, czy w klastrze skalowanym równolegle:

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Niezależnie od tego, czy dane zapytanie zostało wykonane w klastrze głównym, czy poprzez klaster ze skalowaniem równoległym, jest ono przechowywane w pliku stl_query.concurrency_scaling_status.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Wartość 1 wskazuje, że zapytanie zostało wykonane w klastrze o skali równoległej, natomiast pozostałe wartości wskazują, że zostało wykonane w klastrze podstawowym.

Przykład:

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Informacje o skalowaniu współbieżności są również przechowywane w niektórych innych tabelach i widokach, takich jak SVCS_CONCURRENCY_SCALING_USAGE. Ponadto istnieje wiele tabel katalogowych przechowujących informacje o skalowaniu równoległym.

wyniki

Autorzy rozpoczęli skalowanie równoległe dla jednej kolejki w klastrze wewnętrznym około godziny 18:30:00 GMT w dniu 29.03.2019 r. Zmieniono parametr max_concurrency_scaling_clusters na 3 około godziny 20:30:00 w dniu 29.03.2019 r.

Aby zasymulować kolejkę żądań, zmniejszyliśmy liczbę miejsc dla tej kolejki z 15 do 5.

Poniżej znajduje się wykres panelu intermix.io pokazujący liczbę uruchomionych i oczekujących w kolejce żądań po zmniejszeniu liczby slotów.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Widzimy, że wydłużył się czas oczekiwania na wnioski w kolejce, przy czym maksymalny czas wynosi ponad 5 minut.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Oto odpowiednia informacja z konsoli AWS o tym, co wydarzyło się w tym czasie:

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Redshift uruchomił trzy (3) równoległe klastry skalujące zgodnie z konfiguracją. Wygląda na to, że te klastry nie były w pełni wykorzystywane, mimo że wiele żądań w naszym klastrze znajdowało się w kolejce.

Wykres użycia koreluje z wykresem aktywności skalowania:

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

Po kilku godzinach autorzy sprawdzili kolejkę i wyglądało na to, że działało 6 żądań przy skalowaniu równoległym. Przetestowaliśmy także losowo dwa żądania za pośrednictwem interfejsu użytkownika. Nie sprawdzaliśmy, jak wykorzystać te wartości, gdy jednocześnie aktywnych jest kilka równoległych klastrów.

Przewodnik po skalowaniu równoległym Amazon Redshift i wyniki testów

odkrycia

Skalowanie równoległe może skrócić czas spędzany przez żądania w kolejce podczas szczytowego obciążenia.

Na podstawie wyników podstawowego testu okazało się, że sytuacja z żądaniami załadunku uległa częściowej poprawie. Jednak samo skalowanie równoległe nie rozwiązało wszystkich problemów związanych ze współbieżnością.

Wynika to z ograniczeń dotyczących typów zapytań, które mogą korzystać ze skalowania równoległego. Na przykład autorzy mają wiele tabel z przeplatanymi kluczami sortowania, a większość naszej pracy zajmuje pisanie.

Chociaż skalowanie równoległe nie jest uniwersalnym rozwiązaniem do konfiguracji WLM, korzystanie z tej funkcji jest proste i jednoznaczne.

Dlatego autor zaleca użycie go w kolejkach WLM. Zacznij od jednego klastra równoległego i monitoruj obciążenie szczytowe za pomocą konsoli, aby określić, czy nowe klastry są w pełni wykorzystywane.

W miarę dodawania przez AWS obsługi dodatkowych typów zapytań i tabel skalowanie równoległe powinno stopniowo stawać się coraz bardziej wydajne.

Komentarz Daniyara Belkhodżajewa, inżyniera danych Skyeng

W Skyeng również od razu zauważyliśmy pojawiającą się możliwość skalowania równoległego.
Funkcjonalność jest bardzo atrakcyjna, zwłaszcza biorąc pod uwagę, że AWS szacuje, że większość użytkowników nie będzie musiała nawet za nią dodatkowo płacić.

Tak się złożyło, że w połowie kwietnia otrzymaliśmy niezwykłą falę zapytań do gromady Redshift. W tym okresie często uciekaliśmy się do Skalowania Współbieżności, czasami dodatkowy klaster pracował 24 godziny na dobę bez przerwy.

Umożliwiło to, jeśli nie całkowite rozwiązanie problemu kolejek, to przynajmniej sprawienie, że sytuacja będzie akceptowalna.

Nasze obserwacje w dużej mierze pokrywają się z wrażeniami chłopaków z intermix.io.

Zauważyliśmy również, że choć w kolejce znajdowały się żądania, to nie wszystkie żądania były od razu przekazywane do klastra równoległego. Najwyraźniej dzieje się tak, ponieważ uruchomienie klastra równoległego nadal wymaga czasu. Dzięki temu podczas krótkotrwałych szczytowych obciążeń nadal mamy małe kolejki, a odpowiadające im alarmy mają czas na wyzwolenie.

Po pozbyciu się w kwietniu nietypowych obciążeń, zgodnie z oczekiwaniami AWS, weszliśmy w tryb okazjonalnego użytkowania - w ramach darmowej normy.
Możesz śledzić koszty skalowania równoległego w Eksploratorze kosztów AWS. Musisz wybrać Usługa - Redshift, Typ użycia - CS, na przykład USW2-CS:dc2.large.

Więcej o cenach możesz przeczytać w języku rosyjskim tutaj.

Źródło: www.habr.com

Dodaj komentarz