Dostępny rozproszony system obliczeniowy Apache Storm 2.0

zobaczyłem światło znacząca wersja rozproszonego systemu przetwarzania zdarzeń Burza Apache 2.0, wyróżniający się przejściem na nową architekturę zaimplementowaną w Javie zamiast wcześniej używanego języka Clojure.

Projekt umożliwia zorganizowanie gwarantowanej obsługi różnych zdarzeń w czasie rzeczywistym. Na przykład Storm można wykorzystać do analizy strumieni danych w czasie rzeczywistym, wykonywania zadań uczenia maszynowego, organizowania ciągłego przetwarzania, wdrażania RPC, ETL itp. System obsługuje klastrowanie, tworzenie konfiguracji odpornych na uszkodzenia, gwarantowany tryb przetwarzania danych i charakteryzuje się wysoką wydajnością, wystarczającą do przetworzenia ponad miliona żądań na sekundę w jednym węźle klastra.

Obsługiwana jest integracja z różnymi systemami przetwarzania kolejek i technologiami baz danych. Architektura Storm polega na odbieraniu i przetwarzaniu nieustrukturyzowanych, stale aktualizowanych strumieni danych przy użyciu dowolnych, złożonych procesorów z możliwością podziału pomiędzy różnymi etapami obliczeń. Projekt został przekazany społeczności Apache po przejęciu przez Twittera firmy BackType, która pierwotnie opracowała framework. W praktyce Storm został wykorzystany w BackType do analizy odzwierciedlenia wydarzeń w mikroblogach, porównując na bieżąco nowe tweety i użyte w nich linki (m.in. oceniano, w jaki sposób linki zewnętrzne lub ogłoszenia publikowane na Twitterze są retransmitowane przez innych uczestników ).

Funkcjonalność Storm porównywana jest z platformą Hadoop, z tą kluczową różnicą, że dane nie są przechowywane w magazynie, lecz pobierane zewnętrznie i przetwarzane w czasie rzeczywistym. Storm nie ma wbudowanej warstwy przechowywania i zapytanie analityczne zaczyna być stosowane do przychodzących danych, aż do jego anulowania (podczas gdy Hadoop wykorzystuje zadania MapReduce o ograniczonym czasie trwania, Storm wykorzystuje ideę ciągłego uruchamiania „topologii”). Wykonanie procedur obsługi można rozłożyć na kilka serwerów - Storm automatycznie paralelizuje pracę z wątkami w różnych węzłach klastra.

System został pierwotnie napisany w Clojure i działa wewnątrz maszyny wirtualnej JVM. Fundacja Apache podjęła inicjatywę migracji Storma do nowego jądra napisanego w Javie, czego rezultaty przedstawiono w wydaniu Apache Storm 2.0. Wszystkie podstawowe komponenty platformy zostały napisane w języku Java. Obsługa pisania programów obsługi w Clojure została zachowana, ale jest teraz oferowana w formie powiązań. Storm 2.0.0 wymaga Java 8. Model przetwarzania wielowątkowego został całkowicie przeprojektowany, umożliwiając osiągnąć zauważalny wzrost wydajności (w przypadku niektórych topologii opóźnienia zostały zmniejszone o 50-80%).

Dostępny rozproszony system obliczeniowy Apache Storm 2.0

Nowa wersja oferuje także nowy interfejs API Streams, który umożliwia definiowanie procedur obsługi za pomocą operacji w stylu programowania funkcjonalnego. Nowe API zostało zaimplementowane w oparciu o standardowe API bazowe i wspiera automatyczne łączenie operacji w celu optymalizacji ich przetwarzania. Interfejs API Windows do operacji na oknach dodał obsługę zapisywania i przywracania stanu w zapleczu.

Wsparcie w zakresie uwzględnienia dodatkowych zasobów przy podejmowaniu decyzji nie tylko
Procesor i pamięć, takie jak ustawienia sieci i procesora graficznego. Wprowadzono wiele usprawnień zapewniających integrację z platformą Kafka. System kontroli dostępu został rozszerzony o możliwość tworzenia grup administratorów i delegowania tokenów. Dodano ulepszenia związane z obsługą SQL i metryk. W interfejsie administratora pojawiły się nowe polecenia służące do debugowania stanu klastra.

Obszary zastosowań Storm:

  • Przetwarzanie strumieni nowych danych lub aktualizacji baz danych w czasie rzeczywistym;
  • Ciągłe przetwarzanie danych: Storm może uruchamiać ciągłe zapytania i przetwarzać ciągłe strumienie, dostarczając wyniki przetwarzania do klienta w czasie rzeczywistym.
  • Rozproszone zdalne wywoływanie procedur (RPC): Storm może służyć do równoległego wykonywania zapytań wymagających dużej ilości zasobów. Zadanie („topologia”) w Storm to funkcja rozproszona pomiędzy węzłami, która czeka na przybycie komunikatów wymagających przetworzenia. Po odebraniu komunikatu funkcja przetwarza go w kontekście lokalnym i zwraca wynik. Przykładem użycia rozproszonego RPC byłoby równoległe przetwarzanie zapytań lub wykonywanie operacji na dużym zestawie zbiorów.

Funkcje burzy:

  • Prosty model programowania, który znacznie upraszcza przetwarzanie danych w czasie rzeczywistym;
  • Wsparcie dla dowolnych języków programowania. Dostępne są moduły dla Java, Ruby i Python, adaptacja dla innych języków jest łatwa dzięki bardzo prostemu protokołowi komunikacyjnemu, który do obsługi wymaga około 100 linii kodu;
  • Tolerancja błędów: aby uruchomić zadanie przetwarzania danych, musisz wygenerować plik jar z kodem. Storm niezależnie rozprowadzi ten plik jar pomiędzy węzłami klastra, połączy powiązane z nim procedury obsługi i zorganizuje monitorowanie. Po zakończeniu zadania kod zostanie automatycznie wyłączony na wszystkich węzłach;
  • Skalowalność pozioma. Wszystkie obliczenia wykonywane są w trybie równoległym, w miarę wzrostu obciążenia wystarczy po prostu podłączyć nowe węzły do ​​klastra;
  • Niezawodność. Storm dba o to, aby każda przychodząca wiadomość została w pełni przetworzona przynajmniej raz. Wiadomość zostanie przetworzona tylko raz, jeśli przy przejściu przez wszystkie procedury obsługi nie będzie błędów; w przypadku wystąpienia problemów, zostaną powtórzone nieudane próby przetwarzania.
  • Prędkość. Kod Storma został napisany z myślą o wysokiej wydajności i wykorzystuje system do szybkiego asynchronicznego przesyłania wiadomości ZeroMQ.

Źródło: opennet.ru

Dodaj komentarz