W dniach 11-12 lipca w Petersburgu odbędzie się konferencja Hydrapoświęcony rozwojowi systemów równoległych i rozproszonych. Rzecz w Hydrze polega na tym, że łączy najlepszych naukowców (których zwykle można spotkać tylko na zagranicznych konferencjach naukowych) i znanych inżynierów-praktyków w jeden wielki program na przecięciu nauki i praktyki.
Hydra to jedna z naszych najważniejszych konferencji ostatnich lat. Poprzedziły go bardzo poważne przygotowania, dobór prelegentów i sprawozdania. o tym w zeszłym tygodniu wyszedł habrowywiad z dyrektorem Grupy JUG.ru Aleksiejem Fiodorowem (23derew).
My już powiedziałem o trzech ważnych uczestnikach, twórcach teorii systemów rozproszonych – Leslie Lamport, Maurice Herlihy i Michaelu Scottie. Czas porozmawiać o całym programie!
Motywacja
Jeśli programujesz, to w ten czy inny sposób masz do czynienia z przetwarzaniem wielowątkowym i rozproszonym. Specjaliści w odpowiednich dziedzinach współpracują z nimi bezpośrednio, ale pośrednio, dystrybucja patrzy na nas zewsząd: w każdym wielordzeniowym komputerze lub usłudze rozproszonej jest coś, co wykonuje obliczenia równolegle.
Istnieje wiele konferencji poświęconych pewnym aspektom programowania aplikacji. Po drugiej stronie spektrum mamy specjalne szkoły naukowe, w formie wykładów, ujawniające ogromne ilości złożonej teorii. Na przykład równolegle z Hydrą w Petersburgu, szkoła SPTDC. Na konferencji Hydry staraliśmy się połączyć surową praktykę z nauką i wszystkim, co znajduje się na ich przecięciu.
Pomyśl o tym: żyjemy w niesamowitych czasach, w których możesz spotkać na żywo założycieli dziedziny nauki i inżynierii, którą się zajmujemy. Fizycy nie spotkają ani Newtona, ani Einsteina – pociąg odjechał. Ale ci, którzy stworzyli podstawy teorii systemów rozproszonych, wynaleźli popularne języki programowania i po raz pierwszy wcielili to wszystko w działające prototypy, nadal żyją obok nas. Ci ludzie nie zrezygnowali z pracy w połowie, wykonują obecnie realne zadania na renomowanych uniwersytetach i firmach i są dziś największymi źródłami wiedzy i doświadczenia.
Z drugiej strony możliwość spotkania się z nimi zwykle pozostaje czysto teoretyczna: niewielu z nas może na bieżąco monitorować wydarzenia publiczne na jakimś Uniwersytecie w Rochester, by potem pędzić do USA iz powrotem na wykład Michaela Scotta. Odwiedzenie wszystkich członków Hydry w ogóle byłoby małą fortuną, nie licząc ogromu spędzonego czasu (choć brzmi to jak ciekawa misja).
Z drugiej strony mamy wielu najlepszych inżynierów, którzy obecnie pracują nad rzeczywistymi problemami systemów rozproszonych i zdecydowanie mają coś do powiedzenia. Ale tu jest problem - oni działająa ich czas jest cenny. Tak, jeśli jesteś pracownikiem Microsoft, Google czy JetBrains, prawdopodobieństwo spotkania jednego ze znanych prelegentów na wewnętrznym wydarzeniu dramatycznie wzrasta, ale generalnie – nie, nie zdarza się to codziennie.
W ten sposób konferencja Hydra realizuje ważne zadanie, którego większość z nas nie jest w stanie wykonać samodzielnie – w jednym miejscu i czasie gromadzi ludzi, których pomysły lub komunikacja z którymi mogą zmienić Twoje życie. Przyznaję, że nie każdemu potrzebne są systemy rozproszone, jakieś złożone fundamentalne rzeczy. Możesz programować CRUDy w PHP do końca życia i być w pełni szczęśliwym. Ale kto tego potrzebuje - to twoja szansa.
Od pierwszej zapowiedzi konferencji Hydry na temat Habré minęło sporo czasu. W tym czasie wykonano wiele pracy - i teraz mamy listę prawie wszystkich raportów. Żadnych powolnych algorytmów jednowątkowych, tylko czysty rozproszony hardcore! Zakończmy słowami ogólnymi i zobaczmy, co mamy teraz pod ręką.
Keynotes
Keynotes rozpoczynają i kończą dni konferencji. Zwykle celem przemówienia otwierającego jest określenie ogólnego ducha i kierunku konferencji. Zamykająca myśl przewodnia wyznacza granicę i wyjaśnia, w jaki sposób możemy żyć z wiedzą i umiejętnościami zdobytymi podczas dni konferencji. Początek i koniec: to, co najlepiej zapamiętuje się i generalnie ma większą wartość.
Cliff to legenda w świecie Java. Pod koniec lat 90. w ramach pracy doktorskiej napisał pracę pt „Łączenie analiz, łączenie optymalizacji”, który po pewnym czasie stał się podstawą HotSpot JVM Server Compiler. Dwa lata później pracował już w Sun Microsystems nad JVM i pokazał całemu światu, że JIT ma prawo istnieć. Cała ta historia o tym, że Java jest jednym z najszybszych współczesnych środowisk wykonawczych z najmądrzejszymi i najszybszymi optymalizacjami, pochodzi od Cliff Click. Na samym początku wierzono, że jeśli coś jest dostępne statycznemu kompilatorowi, to nie można tego nawet próbować jitować. Dzięki pracy Cliffa i zespołu zaczęto tworzyć wszystkie nowe języki z myślą o domyślnej kompilacji JIT. Oczywiście nie było to dzieło jednej osoby, ale Cliff odegrał w nim bardzo ważną rolę.
W przemówieniu otwierającym Cliff opowie o swoim innym przedsięwzięciu - H20, platforma in-memory do rozproszonego i skalowalnego uczenia maszynowego do zastosowań przemysłowych. Dokładniej, o rozproszonym przechowywaniu par klucz-wartość w nim. Jest to bardzo szybka pamięć masowa z wieloma ciekawymi właściwościami (dokładna lista znajduje się w opis), które pozwalają na zastosowanie podobnych rozwiązań w matematyce strumieniowania dużych zbiorów danych.
Kolejną przemową, którą wygłosi Cliff, jest Doświadczenie sprzętowej pamięci transakcyjnej Azul. Kolejna część jego biografii - dziesięć lat pracuje w Azulu, gdzie zaktualizował i ulepszył wiele rzeczy w stosie sprzętowym i technologicznym Azul: kompilatory JIT, środowisko uruchomieniowe, model wątków, obsługę błędów, manipulację stosem, przerwania sprzętowe, ładowanie klas itd. pomysł.
Najciekawsza część zaczęła się, gdy stworzyli sprzęt dla wielkiego biznesu - superkomputer do obsługi Javy. Była to dość innowacyjna rzecz, skrojona specjalnie pod Javę, która ma specjalne wymagania - bariery pamięciowe do odczytu dla niskopauzowego wyrzucania elementów bezużytecznych, tablice ze sprawdzaniem granic, wywołania wirtualne... Jedną z najfajniejszych technologii jest sprzętowa pamięć transakcyjna. Cały L1 dowolnego z 864 rdzeni mógłby uczestniczyć w zapisie transakcyjnym, co jest szczególnie ważne przy pracy z blokadami w Javie (zsynchronizowane bloki mogą pracować równolegle, o ile nie występuje rzeczywisty konflikt pamięci). Ale piękny pomysł zderzył się z brutalną rzeczywistością — w tym raporcie Cliff opowie, dlaczego HTM i STM nie są dobrze dostosowane do praktycznych potrzeb przetwarzania wielowątkowego.
Michaela Scotta - profesor informatyki na Uniwersytecie w Rochester, z którym połączył go los już od 34 lat, a na swoim rodzinnym Uniwersytecie Wisconsin-Madison był dziekanem przez pięć lat. Zajmuje się badaniami w zakresie programowania równoległego i rozproszonego oraz projektowania języków i uczy tego studentów.
Jeśli chodzi o świat Javy, jest to szczególny przypadek: wraz z Dougiem Leą opracował te algorytmy nieblokujące i kolejki synchroniczne, na których działają biblioteki Java. O tym będzie keynote „Dual data structures” – wprowadzenie tych struktur w Javie SE 6 pozwoliło nam 10-krotnie poprawić wydajność java.util.concurrent.ThreadPoolExecutor. Jeśli jesteś zainteresowany z góry, czym są te „podwójne struktury danych”, to jest powiązana praca.
Maurice'a Herlihy'ego - Zdobywca dwóch nagród Dijkstry. Pierwsza jest do pracy „Synchronizacja bez czekania” (Brown University), a drugi, nowszy - „Pamięć transakcyjna: wsparcie architektoniczne dla struktur danych bez blokad” (Uniwersytet Techniczny Wirginii). Nagroda Dijkstry przyznawana jest pracom, których znaczenie i wpływ są zauważalne od co najmniej dziesięciu lat, a Maurice jest jednym z najsłynniejszych specjalistów w tej dziedzinie. Obecnie jest profesorem na Uniwersytecie Browna i ma na swoim koncie liczne osiągnięcia.
W tym zamykającym przemówieniu Maurice opowie o teorii i praktyce rozproszonych systemów blockchain z punktu widzenia klasyków przetwarzania rozproszonego i o tym, jak upraszcza to wiele powiązanych problemów. Ten raport dotyczy wyłącznie tematu konferencji - wcale nie o górniczym szumie, ale raczej o tym, jak nasza wiedza może być zdumiewająco efektywnie i odpowiednio wykorzystana w odniesieniu do różnych zadań.
W lipcu 2017 Maurice przyjechał już do Rosji do szkoły SPTDC, uczestniczył w spotkaniu JUG.ru, a nagranie można obejrzeć na YouTube:
Główny program
Następnie nastąpi krótkie omówienie reportaży zawartych w programie. Niektóre z raportów są opisane szczegółowo tutaj, niektóre bardziej skrótowo. Długie opisy trafiły głównie do anglojęzycznych raportów, które wymagają linków do artykułów naukowych, terminów w Wikipedii i tak dalej. Pełna lista może być zobacz na stronie konferencji. Lista na stronie będzie aktualizowana i uzupełniana.
To najbardziej niezwykła pod względem formatu część programu, bo to nawet nie reportaż, a sesja pytań i odpowiedzi. Kiedy znaczna część odbiorców jest już zaznajomiona (lub może się zaznajomić) z wszelkiego rodzaju pracami opartymi na teorii Lamporta, jego własnymi artykułami i reportażami, ważniejsze jest poświęcenie całego dostępnego czasu na komunikację bezpośrednią.
Pierwszy z tych dwóch filmów już mamy zamienił się w bzdury. Jeśli nie masz godziny czasu na obejrzenie filmu, możesz szybko przeczytać całość w formie tekstowej.
Uwaga: na YouTube jest o wiele więcej filmów z udziałem Leslie Lamport. Na przykład jest doskonały Kurs TLA+. Wersja offline całego kursu jest dostępna pod adresem strona domowa autora, a na YouTube wlał go dla wygodniejszego oglądania na urządzeniach mobilnych.
Martin Kleppmann jest badaczem na Uniwersytecie Cambridge, zajmującym się CRDT i formalną weryfikacją algorytmów. Książka Marcina „Projektowanie aplikacji intensywnie korzystających z danych”, opublikowana w 2017 roku, okazała się dużym sukcesem i trafiła na listy bestsellerów w dziedzinie przechowywania i przetwarzania danych. Kevin Scott, CTO w Microsoft kiedyś powiedziano: „Ta książka powinna być obowiązkowa dla inżynierów projektantów. To rzadki zasób, który łączy teorię i praktykę, aby pomóc programistom w projektowaniu i wdrażaniu infrastruktury danych i systemów w bardziej inteligentny sposób”. Coś podobnego powiedział twórca Kafki i CTO Confluent, Jay Kreps.
Zanim zajął się badaniami akademickimi, Martin pracował w branży i był współzałożycielem dwóch udanych start-upów:
Rapportive, dedykowany do wyświetlania profilu społecznościowego Twoich kontaktów e-mail, który LinkedIn kupił w 2012 roku;
Go Test It, zautomatyzowane narzędzie do sprawdzania witryn w wielu przeglądarkach, które RedGate kupiło w 2009 roku.
Ogólnie rzecz biorąc, chociaż Martin jest mniej znany niż nasi keynoterzy, zdążył już wnieść pewien wkład w rozwój przetwarzania rozproszonego i przemysłu.
W tym wystąpieniu Martin opowie o temacie bliższym jego badaniom akademickim. W Dokumentach Google i podobnej kanapie do współtworzenia dokumentów „współtworzenie” oznacza zadanie replikacji: każdy użytkownik ma własną replikę udostępnionego dokumentu, którą następnie modyfikuje, a wszystkie zmiany są przesyłane przez sieć do pozostałych uczestników. Zmiany w dokumentach offline skutkują tymczasową niespójnością dokumentów w odniesieniu do innych uczestników, a ponowna synchronizacja wymaga obsługi konfliktów. Tylko po to są Bezkonfliktowe replikowane typy danych (CRDT) jest w rzeczywistości dość nową rzeczą, której istota została sformułowana dopiero w 2011 roku. W tej prelekcji omówiono, co wydarzyło się od tego czasu w świecie CRDT, jakie są najnowsze osiągnięcia, ogólnie omówiono podejście do tworzenia aplikacji lokalnych oraz korzystanie z biblioteki open source Automatyczne łączenie w szczególności.
W przyszłym tygodniu opublikujemy obszerny wywiad z Martinem na temat Habré, będzie ciekawie.
Pedro pracuje w Cisco i od dziesięciu lat rozwija algorytmy równoległe, w tym mechanizmy synchronizacji, struktury danych bez blokowania i oczekiwania oraz wszystko, co można wymyślić na ten temat. Jego obecne zainteresowania badawcze i inżynieryjne koncentrują się na konstrukcjach uniwersalnych, pamięci transakcyjnej oprogramowania, pamięci trwałej i podobnych technologiach umożliwiających tworzenie poprawnych, skalowalnych i odpornych na błędy aplikacji. A także jest autorem szeroko znanego w wąskich kręgach bloga Maniacy współbieżności.
Większość aplikacji wielowątkowych działa obecnie na równoległych strukturach danych, od korzystania z kolejek komunikatów między aktorami po indeksowane struktury danych w magazynach klucz-wartość. Od wielu lat z powodzeniem działają w Javie JDK i powoli są dodawane do C++.
Najprostszym sposobem implementacji równoległej struktury danych jest implementacja szeregowa (jednowątkowa), w której metody są chronione przez muteksy. Jest to dostępne dla każdego ju, ale ma oczywiste problemy ze skalowaniem i wydajnością. Jednocześnie struktury danych wolne od blokad i oczekiwania nie tylko lepiej radzą sobie z błędami, ale także mają lepszy profil wydajności – jednak ich rozwój wymaga głębokiej wiedzy i dostosowania do konkretnego przypadku użycia. Wystarczy jeden zły wiersz kodu, aby wszystko zepsuć.
Jak sprawić, by nawet nie-ekspert potrafił zaprojektować i wdrożyć takie struktury danych? Wiadomo, że każdy algorytm sekwencyjny może być bezpieczny dla wątków przez którykolwiek z nich uniwersalny projektlub pamięć transakcyjna. Po pierwsze, mogą obniżyć próg wejścia w celu rozwiązania tego problemu. Jednak oba rozwiązania prowadzą do nieefektywnych wdrożeń. Pedro opowie o tym, jak udało im się zwiększyć wydajność tych konstrukcji i jak można je wykorzystać w ich algorytmach.
Heidi Howard jest, podobnie jak Martin, badaczem systemów rozproszonych na Uniwersytecie Cambridge. Jej specjalizacja to spójność, odporność na awarie, wydajność i rozproszony konsensus. Najbardziej znana jest z uogólnienia algorytmu Paxos, tzw Elastyczny Paxos.
Przypomnijmy, że Paxos - rodzina protokołów do rozwiązywania problemu konsensusu w sieci zawodnych komputerów, które powstały w oparciu o prace Lesliego Lamporta. W ten sposób niektórzy z naszych prelegentów pracują nad zadaniami, które zostały pierwotnie zaproponowane przez naszych innych prelegentów - i to jest wspaniałe.
Możliwość znalezienia konsensusu między wieloma hostami — w celu adresowania, wyboru lidera, blokowania lub koordynacji — jest fundamentalną kwestią we współczesnych systemach rozproszonych. Paxos jest obecnie głównym sposobem rozwiązywania problemów konsensusu i jest wokół niego wiele badań w celu rozszerzenia i optymalizacji algorytmu dla różnych praktycznych potrzeb.
W tym raporcie ponownie przyjrzymy się teoretycznym podstawom Paxos, rozluźniając początkowe wymagania i uogólniając algorytm. Przekonamy się, że Paxos jest w rzeczywistości tylko jedną z opcji spośród ogromnej gamy podejść do konsensusu i że inne punkty w spektrum są również całkiem przydatne do budowania dobrych systemów rozproszonych.
Alex jest specjalistą od baz danych i pamięci masowych, a co ważniejsze, jest osobą zatwierdzającą w Cassandra. Obecnie pracuje z O'Reilly nad książką Database Internals.
Dla systemów z ostateczna spójność (w terminologii rosyjskiej „spójność na końcu”), po upadku węzła lub podziale sieci należy rozstrzygnąć następujący dylemat: albo kontynuować spełnianie żądań, poświęcając spójność, albo odmówić ich wykonania i poświęcić dostępność. W takim systemie kworum, nakładanie się podzbiorów węzłów i zapewnienie, że przynajmniej jeden węzeł zawiera najnowszą wartość, może być dobrym rozwiązaniem brzegowym. Możliwe jest przetrwanie awarii i utraty połączenia z niektórymi węzłami, kontynuując odpowiadanie przy użyciu najnowszych wartości.
Jednak wszystko ma swoją cenę. Schemat replikacji kworum oznacza zwiększony koszt przechowywania: nadmiarowe dane należy przechowywać w wielu węzłach jednocześnie, aby zapewnić dostępność wystarczającej liczby kopii w przypadku wystąpienia problemu. Okazuje się, że nie można przechowywać wszystkich danych na wszystkich replikach. Możesz zmniejszyć obciążenie magazynu, przechowując dane tylko w części węzłów i używając specjalnych węzłów (Replika przejściowa) do obsługi scenariuszy awarii.
Dmitry jest programistą w Google i pracuje nad dynamicznymi testami C/C++ i Go — Address/Memory/ThreadSanitizer i podobnymi narzędziami dla jądra Linuksa. Wniósł do Go skalowalny harmonogram goroutine, sondę sieciową i współbieżny moduł wyrzucania elementów bezużytecznych. Jest ekspertem w dziedzinie wielowątkowości, autorem kilkunastu nowych algorytmów nieblokujących i właścicielem m.in Czarny pas Intel.
Teraz trochę o samym raporcie. Język Go ma natywną obsługę wielowątkowości w postaci goroutines (lekkie wątki) i kanałów (kolejki FIFO). Dzięki tym mechanizmom pisanie nowoczesnych aplikacji wielowątkowych jest bardzo łatwe i przyjemne dla użytkowników, a wygląda to jak magia. Jak rozumiemy, nie ma tu żadnej magii. W tym raporcie Dmitry zagłębi się w zawiłości harmonogramu Go i pokaże tajniki wdrażania tej „magii”. Najpierw przedstawi przegląd głównych elementów harmonogramu, jak to działa. Następnie przyjrzymy się bliżej niektórym aspektom, takim jak strategia parkowania/odparkowywania oraz obsługa wywołań systemowych blokowania. Na koniec Dmitry opowie trochę o możliwych ulepszeniach harmonogramu.
Dmitry pracuje w outsourcingu od prawie 9 lat, nie tracąc kontaktu z uczelnią i środowiskiem naukowym. Analiza big data w Odnoklassnikach była dla niego wyjątkową szansą na połączenie szkolenia teoretycznego i podstaw naukowych z rozwojem prawdziwych, pożądanych produktów.
Analiza grafów rozproszonych była i pozostaje trudnym zadaniem: gdy konieczne staje się uzyskanie informacji o połączeniach sąsiedniego wierzchołka, dane często muszą być przesyłane między maszynami, co prowadzi do wydłużenia czasu wykonania i obciążenia sieci infrastruktura. W tej prelekcji zobaczymy, jak można uzyskać znaczne przyspieszenie przetwarzania danych przy użyciu probabilistycznych struktur danych lub faktów, takich jak symetria wykresu przyjaźni w sieci społecznościowej. Wszystko to jest zilustrowane przykładami kodu Apache Spark.
Denis - deweloper Kosmos DB, ekspert w zakresie walidacji modeli spójności, algorytmów konsensusu i transakcji rozproszonych. Teraz pracuje w Microsoft, a wcześniej zajmował się systemami rozproszonymi w Amazon i Yandex.
W tym raporcie zapoznamy się z wynalezionymi w ciągu ostatnich kilku lat protokołami transakcji rozproszonych, które można zaimplementować po stronie klienta na dowolnym magazynie danych obsługującym aktualizację warunkową (porównaj i ustaw). Najważniejsze jest to, że życie nie kończy się na dwufazowym zatwierdzeniu, transakcje można dodawać na wierzchu dowolnych baz danych - na poziomie aplikacji, ale różne protokoły (2PC, Percolator, RAMP) mają różne kompromisy i nie są nam dane za darmo.
Aleksiej (Zasław) jest naszym wieloletnim prelegentem i członkiem komitetów programowych innych konferencji. Praktykujący trener w EPAM Systems, od 2012 roku zaprzyjaźniony z Hadoop/Spark i innymi bigdatami.
W tej prelekcji Alexey opowie o problemach adaptacji klasycznych algorytmów uczenia maszynowego do wykonywania rozproszonego w oparciu o swoje doświadczenia z Apache Spark ML, Apache Mahout, Apache Flink ML oraz doświadczenie w tworzeniu Apache Ignite ML. Alexey opowie również o implementacji rozproszonych algorytmów ML w tych frameworkach.
I na koniec dwa raporty z Yandex o Yandex Database.
Vladislav jest programistą w Yandex w grupie platform rozproszonych. Baza danych Yandex to skalowalny poziomo, rozproszony geograficznie, odporny na błędy system DBMS, który może wytrzymać awarie dysków, serwerów, szaf i centrów danych bez uszczerbku dla spójności. W celu zapewnienia odporności na awarie stosowany jest autorski algorytm rozproszonego konsensusu oraz szereg rozwiązań technicznych, które szczegółowo omówiono w raporcie. Raport może zainteresować zarówno programistów DBMS, jak i twórców rozwiązań aplikacyjnych opartych na DBMS.
Semyon jest programistą w grupie platform rozproszonych w Yandex, pracującym nad możliwością wielodostępnego korzystania z instalacji YDB.
Baza danych Yandex jest przeznaczona do obsługi zapytań OLTP i spełnia wymagania ACID dla systemu transakcyjnego. W raporcie rozważymy algorytm planowania transakcji leżący u podstaw systemu transakcyjnego YDB. Przeanalizujmy, które podmioty uczestniczą w transakcjach, kto nadaje transakcjom globalny porządek, w jaki sposób osiąga się atomowość transakcji, niezawodność i ścisły poziom izolacji. Na przykładzie zwykłego zadania rozważmy realizację transakcji przy użyciu dwufazowego zatwierdzania i transakcji deterministycznych. Omówmy ich różnice.
Co dalej?
Program konferencji wciąż wypełniają nowe doniesienia. W szczególności oczekujemy raportu od Nikita Kowal (ndkowal) z JetBrains i Oleg Anastasjew (umysł) z Odnoklassnik. Nikita pracuje nad algorytmami dla współprogramów w zespole Kotlina, a Oleg rozwija architekturę i rozwiązania dla systemów o dużym obciążeniu na platformie Odnoklassniki. Dodatkowo jest jeszcze 1 warunkowo wolne miejsce, na które czekają kandydaci, nad którymi obecnie pracuje rada programowa.
Konferencja Hydra odbędzie się w dniach 11-12 lipca w Sankt Petersburgu. Bilety mogą być kup na oficjalnej stronie. Zwróć uwagę na dostępność biletów online - jeśli z jakiegoś powodu nie możesz dostać się do Petersburga na żywo w tych dniach.