L'11-12 luglio si terrà a San Pietroburgo una conferenza , dedicata allo sviluppo di sistemi paralleli e distribuiti. Il punto di forza di Hydra è che riunisce grandi scienziati (che di solito si trovano solo a conferenze scientifiche internazionali) e ingegneri pratici riconosciuti, in un grande programma all'incrocio tra scienza e pratica.
Hydra è una delle nostre conferenze più importanti degli ultimi anni. È stata preceduta da una preparazione molto seria, con la selezione di relatori e relazioni. La scorsa settimana a riguardo con il direttore dell'azienda JUG.ru Group, Aleksej Fedorov ().
Noi di tre importanti partecipanti, fondatori della teoria dei sistemi distribuiti — Leslie Lamport, Maurice Herlihy e Michael Scott. È giunto il momento di parlare più in dettaglio dell'intero programma!

Motivazione
Se ti occupi di programmazione, in un modo o nell'altro hai a che fare con la programmazione concorrente e i calcoli distribuiti. Gli specialisti nei settori pertinenti lavorano direttamente con questi problemi, ma la distribuzione ci osserva da ogni angolo: in ogni computer multicore o servizio distribuito c'è qualcosa che esegue calcoli in parallelo.
Ci sono molte conferenze che rivelano determinati aspetti della programmazione applicata. Dall'altra parte dello spettro ci sono le scuole scientifiche speciali, che in formato di lezioni illustrano enormi volumi di teoria complessa. Ad esempio, parallelamente a Hydra a Pietroburgo si tiene . Alla conferenza Hydra abbiamo cercato di riunire insieme la rigida pratica, la scienza e tutto ciò che si colloca al loro incrocio.
Riflettiamo su questo: viviamo in un'epoca straordinaria, in cui possiamo incontrare di persona i fondatori di quell'area di scienza e ingegneria di cui ci occupiamo. I fisici non incontreranno né Newton né Einstein — il treno è partito. Ma accanto a noi vivono ancora coloro che hanno creato le basi della teoria dei sistemi distribuiti, hanno inventato linguaggi di programmazione popolari, e hanno per la prima volta realizzato tutto questo in prototipi funzionanti. Queste persone non hanno abbandonato il loro lavoro a metà strada, si occupano attualmente di problemi rilevanti in università e aziende di fama mondiale, e sono le più grandi fonti di conoscenza e esperienza oggi.
D'altra parte, la possibilità di incontrarli rimane generalmente puramente teorica: pochi di noi possono monitorare costantemente gli eventi pubblici in qualche università di Rochester, per poi volare negli Stati Uniti e tornare indietro per una lezione con Michael Scott. Visitare tutti i partecipanti a Hydra costerebbe una piccola fortuna, senza contare l'abisso di tempo sprecato (anche se questo suona come una quest interessante).
D'altra parte, abbiamo molti ingegneri di alto livello che attualmente stanno lavorando su problemi attuali dei sistemi distribuiti, e hanno sicuramente qualcosa da raccontare. Ma qui c'è il problema: sono collabora, e il loro tempo è prezioso. Sì, se sei un dipendente di Microsoft, Google o JetBrains, la probabilità di incontrare uno degli speaker noti in un evento interno aumenta bruscamente, mentre in generale — no, non capita tutti i giorni.
Pertanto, la conferenza Hydra svolge un compito importante che la maggior parte di noi non può fare da sola: riunisce in un luogo e in un tempo le persone, le cui idee o interazioni possono cambiare la tua vita. Ammetto che non tutti hanno bisogno di sistemi distribuiti, o di alcune cose fondamentali complesse. Si può programmare CRUD in PHP per tutta la vita e rimanere abbastanza felici. Ma per chi ne ha bisogno — questa è la tua occasione.
Dalla prima annuncio della conferenza Hydra su Habrè è passato già parecchio tempo. In questo tempo, è stato fatto un enorme lavoro — ecco, abbiamo una lista quasi completa di tutte le presentazioni. Niente algoritmi a thread singolo poco entusiasti, solo puro hardcore distribuito! Terminiamo con le chiacchiere generali e vediamo cosa abbiamo ora a disposizione.
Keynotes
I keynotes iniziano e concludono i giorni della conferenza. Di solito, il significato del keynote di apertura è di stabilire lo spirito generale e la direzione della conferenza. Il keynote di chiusura tira le somme e spiega come vivere con le conoscenze e abilità acquisite durante le giornate di conferenza. Inizio e fine: ciò che rimarrà impresso meglio, e in generale, ha un'importanza maggiore.
Cliff Click —
Cliff è una leggenda nel mondo Java. Alla fine degli anni '90, per la sua tesi di dottorato, ha scritto un lavoro intitolato , che nel tempo è diventata la base per il HotSpot JVM Server Compiler. Dopo due anni, lavorava già in Sun Microsystems sulla JVM e ha dimostrato al mondo intero che il JIT ha diritto di esistere. Tutta questa storia di come Java sia uno dei runtime moderni più veloci con le ottimizzazioni più intelligenti e rapide nasce proprio da Cliff Click. All'inizio si pensava che, se qualcosa fosse accessibile a un compilatore statico, non valesse nemmeno la pena tentare di jitare. Grazie al lavoro di Cliff e del suo team, tutti i nuovi linguaggi hanno iniziato a essere creati con l'idea di JIT compilation per impostazione predefinita. Certamente, non è stato il lavoro di una sola persona, ma Cliff ha avuto un ruolo molto importante in esso.
Nella keynote di apertura, Cliff parlerà del suo altro progetto — , una piattaforma in-memory per il machine learning distribuito e scalabile per applicazioni industriali. Più precisamente — di uno storage distribuito per coppie "chiave-valore" al suo interno. Questo è uno storage molto veloce con una miriade di proprietà interessanti (l'elenco preciso è in ), che consentono di utilizzare tali soluzioni nella matematica dello streaming dei big data.
Un altro intervento che Cliff presenterà sarà — . Un altro capitolo della sua biografia — dieci anni , dove ha aggiornato e migliorato molte cose nell'hardware e nel stack tecnologico di Azul: compilatori JIT, runtime, modello dei thread, gestione degli errori, gestione dello stack, interruzioni hardware, caricamento delle classi e così via — insomma, avete capito.
La parte più interessante è iniziata quando hanno creato hardware per le grandi aziende — un supercomputer per eseguire Java. Era una cosa piuttosto innovativa, appositamente progettata per Java, che ha requisiti speciali — barriere di memoria per la lettura per Garbage Collection a bassa latenza, array con controllo dei confini, chiamate virtuali… Una delle tecnologie più cool è stata la memoria transazionale hardware. Tutto l'L1 di ciascuno dei 864 core poteva essere coinvolto nella scrittura transazionale, il che è particolarmente importante per lavorare con i blocchi in Java (i blocchi synchronized possono lavorare in parallelo, finché non c'è un vero conflitto di memoria). Ma la bella idea si è scontrata con la dura realtà — e in questa presentazione Cliff spiegherà perché l'HTM e l'STM non sono molto adatti per le esigenze pratiche del calcolo multithreading.
Michael Scott —
— professore di Computer Science all'Università di Rochester, a cui il destino lo ha legato , e nella sua università, Wisconsin–Madison, è stato decano per cinque anni. Si dedica alla ricerca nel campo della programmazione parallela e distribuita e alla progettazione di linguaggi, e insegna questo ai suoi studenti.
Il mondo intero conosce Michael grazie al suo libro di testo , l'ultima edizione del quale è stata pubblicata relativamente di recente — nel 2015. Il suo lavoro ha ricevuto come uno dei più noti nel campo del calcolo distribuito e nella biblioteca online dell'Università di Rochester. Potreste anche conoscerlo come l'autore dell'algoritmo di Michael-Scott contenuto in .
Per quanto riguarda il mondo Java, qui il caso è speciale: insieme a Doug Lea ha sviluppato quegli algoritmi non bloccanti e le code sincronizzate su cui si basano le librerie Java. Proprio di questo tratterà il keynote «Strutture dati duali» — l'implementazione di queste strutture in Java SE 6 ha permesso di migliorare le prestazioni di 10 volte java.util.concurrent.ThreadPoolExecutor. Se siete curiosi di sapere cosa siano queste «Strutture dati duali», c'è .
Maurice Herlihy —
— vincitore di ben due premi Dijkstra. Il primo — per un lavoro su (Brown University), e il secondo, più recente — (Virginia Tech University). Il premio Dijkstra viene assegnato per lavori la cui rilevanza e impatto siano stati evidenti per almeno dieci anni, e chiaramente, Maurice è uno dei più noti esperti in questo campo. Attualmente è professore all'Università di Brown e ha molteplici successi che meriterebbero un paragrafo intero.
In questo keynote finale, Maurice parlerà della teoria e della pratica dei sistemi distribuiti basati su blockchain dal punto di vista della classica informatica distribuita e di come ciò semplifichi molti problemi correlati. Questa presentazione è esclusivamente in linea con il tema della conferenza — non è affatto riguardo al mining hype, ma piuttosto su come le nostre conoscenze possano essere sorprendentemente efficaci e pertinenti per una varietà di problemi.
Nel luglio 2017, Maurice è già venuto in Russia per la scuola SPTDC, ha partecipato al meetup JUG.ru, e la registrazione può essere vista su YouTube:

Programma principale
Di seguito troverete una breve panoramica delle relazioni incluse nel programma. Alcune relazioni sono descritte in dettaglio, altre in modo più conciso. Le descrizioni più lunghe sono state assegnate principalmente ai relatori di lingua inglese, che richiedono riferimenti a lavori scientifici, termini su Wikipedia, e così via. L'elenco completo può . L'elenco sul sito verrà aggiornato e ampliato.
Leslie Lamport —
Leslie Lamport è l'autore di opere fondamentali nel calcolo distribuito. è l'acronimo di «Lamport TeX». È lui che ha introdotto per la prima volta, nel 1979, il concetto di , e il suo articolo ha ricevuto il premio Dijkstra.
Questa è la parte del programma più insolita nel formato, perché non è nemmeno una relazione, ma una sessione di domande e risposte. Quando una parte significativa del pubblico è già familiare (o può familiarizzare) con vari lavori basati sulla «teoria di Lamport», le sue stesse articoli e relazioni, è fondamentale dedicare tutto il tempo disponibile alla comunicazione diretta.
L'idea è semplice: guardate su YouTube due relazioni: e e preparate almeno una domanda, mentre Leslie risponde.
Il primo di questi due video lo abbiamo già . Se non avete un'ora di tempo per guardare il video, potete rapidamente leggere tutto questo in forma scritta.
Nota: su YouTube ci sono molte più video con Leslie Lamport. Ad esempio, c'è un ottimo . La versione offline di tutto questo corso è disponibile sulla , mentre su YouTube è stata ripubblicata per una visione più comoda sui dispositivi mobili.
Martin Kleppmann —
Martin Kleppmann è un ricercatore all'Università di Cambridge, dove lavora su CRDT e verifica formale degli algoritmi. Il libro di Martin , pubblicato nel 2017, è stato molto apprezzato ed è entrato nelle liste dei bestseller nel campo della memorizzazione e del trattamento dei dati. Kevin Scott, CTO di Microsoft, : «Questo libro dovrebbe essere obbligatorio per gli ingegneri del software. È una risorsa rara che unisce teoria e pratica, aiutando gli sviluppatori a progettare e implementare in modo più intelligente infrastrutture e sistemi di elaborazione dati». Qualcosa di simile è stato detto anche dal creatore di Kafka e CTO di Confluent, Jay Kreps.
Prima di dedicarsi alla ricerca accademica, Martin ha lavorato nell'industria ed è stato cofondatore di due startup di successo:
- Rapportive, dedicato alla visualizzazione del profilo sociale dei contatti dalla tua email, acquisito da LinkedIn nel 2012;
- Go Test It, un servizio per il controllo automatico dei siti web su diversi browser, acquisito da RedGate nel 2009.
In generale, Martin, sebbene meno conosciuto dei nostri relatori principali, ha già contribuito sia allo sviluppo del calcolo distribuito che all'industria.
In questa presentazione, Martin parlerà di un argomento più vicino alle sue ricerche accademiche. In Google Docs e software simili per la modifica collaborativa dei documenti, "modifica collaborativa" significa una task di replicazione: ogni utente ha una propria replica del documento condiviso, che poi modifica e tutte le modifiche vengono inviate in rete agli altri partecipanti. Le modifiche ai documenti in modalità offline portano a una temporanea inconsistenza del documento rispetto agli altri partecipanti, e la resincronizzazione richiede la gestione dei conflitti. Per questo esistono (CRDT), essenzialmente una cosa piuttosto nuova, la cui essenza è stata formulata solo nel 2011. In questa presentazione si discute di cosa è successo da allora nel mondo dei CRDT, quali sono gli ultimi progressi, si discute l'approccio alla creazione di applicazioni local-first in generale e l'uso della libreria open source in particolare.
La prossima settimana pubblicheremo su Habr un'intervista approfondita con Martin, sarà interessante.
Pedro Ramalhete —
Pedro lavora in Cisco e sviluppa algoritmi paralleli da circa dieci anni, inclusi meccanismi di sincronizzazione, strutture dati lock-free e wait-free e tutto ciò che puoi immaginare su questo tema. I suoi attuali interessi accademici e ingegneristici sono focalizzati su Universal Constructions, Software Transactional Memory, Persistent Memory e tecnologie simili che consentono di realizzare applicazioni corrette, scalabili e resilienti. Inoltre, è l'autore di un blog ampiamente conosciuto in ambienti ristretti .
Attualmente, la maggior parte delle applicazioni multithreading funziona su strutture dati parallele, che vanno dall'uso di code di messaggi tra attori all'indicizzazione delle strutture dati nei repository key-value. In Java JDK funzionano con successo da molti anni e anche in C++ vengono lentamente implementate.
Il modo più semplice per implementare una struttura dati parallela è una realizzazione sequenziale (monotemetica), in cui i metodi sono protetti da mutex. Questo è accessibile a qualsiasi principiante, ma presenta evidenti problemi di scalabilità e prestazioni. Allo stesso tempo, le strutture dati lock-free e wait-free non solo gestiscono meglio gli errori, ma offrono anche un profilo delle prestazioni più favorevole; tuttavia, la loro progettazione richiede una profonda esperienza e un adattamento al contesto applicativo specifico. Una riga di codice sbagliata basta per rompere tutto.
Come fare in modo che anche un non esperto possa progettare e implementare tali strutture dati? È noto che qualsiasi algoritmo sequenziale può essere reso thread-safe tramite , oppure una memoria transazionale. Entrambi possono abbassare la soglia di ingresso per risolvere questo problema. Tuttavia, entrambe le soluzioni portano generalmente a implementazioni inefficienti. Pedro parlerà di come sono riusciti a rendere queste costruzioni più efficienti e come possono essere utilizzate per i propri algoritmi.
Heidi Howard —
Heidi Howard, come Martin, è un ricercatore di sistemi distribuiti all'Università di Cambridge. La sua specializzazione è la coerenza, la tolleranza agli errori, le prestazioni e il consenso distribuito. È soprattutto conosciuta per la generalizzazione dell'algoritmo Paxos chiamata .
Ricordiamo che — una famiglia di protocolli per risolvere il problema del consenso in una rete di calcolatori inaffidabili, basata sul lavoro di Leslie Lamport. Pertanto, alcuni dei nostri relatori si occupano di problemi originariamente proposti da altri nostri relatori — ed è meraviglioso.
La possibilità di trovare un consenso tra diversi host — per indirizzamento, scelta del leader, blocco o coordinamento — è una questione fondamentale dei moderni sistemi distribuiti. Paxos è attualmente il principale metodo per risolvere i problemi di consenso e ci sono molti studi in corso per espandere e ottimizzare l'algoritmo per vari bisogni pratici.
In questa presentazione rivedremo le basi teoriche di Paxos, allentando i requisiti originali e generalizzando l'algoritmo. Vedremo che Paxos, in sostanza, è solo una delle varianti tra un ampio spettro di approcci al consenso e che anche altre aree dello spettro possono essere molto utili per costruire buoni sistemi distribuiti.
Alex Petrov —
Alex è un esperto in database e sistemi di archiviazione e, cosa importante per noi, un committente in . Attualmente sta collaborando con O’Reilly a un libro sulle Internals dei Database.
Per i sistemi con (nella terminologia russa — "consistenza nel lungo periodo"), dopo un guasto di un nodo o la divisione di una rete, è necessario affrontare il seguente dilemma: continuare a eseguire richieste, sacrificando la consistenza, o rifiutare di eseguirle e sacrificare la disponibilità. In un tale sistema, i quorum, sottoinsiemi sovrapposti di nodi che garantiscono che almeno un nodo contenga il valore più recente, possono costituire una buona soluzione di compromesso. È possibile superare guasti e perdite di connessione a determinati nodi, continuando a rispondere con i valori più recenti.
Tuttavia, ogni cosa ha il suo prezzo. Uno schema di replicazione a quorum comporta un costo di archiviazione aumentato: è necessario conservare dati ridondanti su più nodi contemporaneamente per garantire un numero sufficiente di copie disponibili al momento del problema. Si scopre che non è necessario memorizzare tutti i dati su tutte le repliche. È possibile ridurre il carico dell'archiviazione mantenendo i dati solo su alcuni nodi e utilizzando nodi speciali (Replica Transitoria) per scenari di gestione dei guasti.
Durante la presentazione esamineremo , uno schema di replicazione utilizzato in e , e l'implementazione di questo concetto in Apache Cassandra sotto i nomi di .
Dmitry V'yukov —
Dmitry è uno sviluppatore presso Google, che lavora su test dinamici in C/C++ e Go - Address/Memory/ThreadSanitizer e su strumenti simili per il kernel di Linux. Ha contribuito a Go con uno scheduler scalabile per goroutine, un poller di rete e un garbage collector parallelo. È un esperto di multithreading, autore di una dozzina di nuovi algoritmi non bloccanti ed è in possesso Intel.
Ora un po' sulla presentazione. Il linguaggio Go ha un supporto nativo per il multithreading in forma di goroutine (thread leggeri) e canali (code FIFO). Grazie a questi meccanismi, per gli utenti è molto facile e piacevole scrivere moderne applicazioni multithread, e sembra quasi magia. Come sappiamo, di magia qui non c'è nulla. In questa presentazione, Dmitry approfondirà le sottigliezze del funzionamento dello scheduler di Go e svelerà i segreti dell'implementazione di questa "magia". Inizialmente, fornirà una panoramica dei componenti principali dello scheduler e spiegherà come funziona. Successivamente, ci addentreremo in aspetti specifici come la strategia di parcheggio/sosta e la gestione delle chiamate di sistema bloccanti. Infine, Dmitry parlerà brevemente di possibili miglioramenti nello scheduler.
Dmitry Bugaychenko è
Dmitry ha lavorato per quasi 9 anni nell'outsourcing, mantenendo i contatti con l'università e il mondo accademico. L'analisi dei big data in Odnoklassniki è stata per lui un'opportunità unica per combinare la preparazione teorica e la base scientifica con lo sviluppo di prodotti reali e richiesti.
L'analisi distribuita dei grafi è stata e rimane una sfida complessa: quando è necessario ottenere informazioni sui legami di un nodo vicino, i dati spesso devono essere trasferiti tra macchine, il che porta a un aumento del tempo di esecuzione e del carico sulla rete. In questa presentazione vedremo come possiamo ottenere un significativo acceleramento dell'elaborazione, utilizzando strutture di dati probabilistiche o fatti come la simmetria del grafo di amicizia in una rete sociale. Tutto ciò sarà illustrato con esempi di codice su Apache Spark.
Denis Ryscov è
Denis è uno sviluppatore , esperto nel campo della verifica dei modelli di coerenza, negli algoritmi di consenso e nelle transazioni distribuite. Attualmente lavora in Microsoft, e in precedenza si è occupato di sistemi distribuiti in Amazon e Yandex.
In questa presentazione ci familiarizzeremo con i protocolli di transazioni distribuite sviluppati negli ultimi anni, che possono essere implementati sul lato client sopra qualsiasi archiviazione dati che supporti l'aggiornamento condizionale (compare and set). Il punto è che la vita non finisce con il commit a due fasi, si possono aggiungere transazioni sopra qualsiasi database — a livello di applicazione, ma diversi protocolli (2PC, Percolator, RAMP) hanno differenti trade-off e non sono gratuiti.
Aleksey Zinovyev —
Aleksey () — è nostro oratore di lunga data e membro dei comitati di programma di altre conferenze. Allenatore pratico presso EPAM Systems, ha familiarità con Hadoop/Spark e altre tecnologie Big Data dal 2012.
In questa presentazione, Aleksey parlerà dei problemi di adattamento degli algoritmi classici di apprendimento automatico per essere eseguiti in modalità distribuita, basandosi sulla sua esperienza con Apache Spark ML, Apache Mahout, Apache Flink ML e sull'esperienza nella creazione di Apache Ignite ML. Aleksey discuterà anche dell'implementazione di algoritmi ML distribuiti in questi framework.
E per finire — due presentazioni da Yandex su Yandex Database.
Vladislav Kuznetsov —
Vladislav è uno sviluppatore presso Yandex nel gruppo della piattaforma distribuita. Yandex Database è un DBMS geograficamente distribuito e scalabile orizzontalmente, in grado di tollerare guasti di dischi, server, rack e data center senza compromettere la coerenza. Per garantire l'affidabilità viene utilizzato un algoritmo proprietario per raggiungere il consenso distribuito, così come una serie di soluzioni tecniche che vengono analizzate nel dettaglio nella presentazione. La presentazione può essere interessante sia per gli sviluppatori di DBMS che per quelli di soluzioni applicative basate su DBMS.
Semyon Checherinda —
Semyon è uno sviluppatore nel gruppo della piattaforma distribuita di Yandex, lavora sulla possibilità di utilizzo multi-tenant dell'installazione YDB.
Il Database di Yandex è progettato per richieste OLTP e soddisfa i requisiti ACID per i sistemi transazionali. Nel rapporto esamineremo l'algoritmo di pianificazione delle transazioni che sta alla base del sistema transazionale YDB. Analizzeremo quali entità partecipano alle transazioni, chi stabilisce l'ordine globale delle transazioni, come viene raggiunta l'atomicità delle transazioni, l'affidabilità e il livello di isolamento rigoroso. Utilizzando un compito comune, esamineremo le implementazioni delle transazioni attraverso l'uso del commit a due fasi e delle transazioni deterministiche. Discuteremo le loro differenze.
Cosa succede dopo?
Il programma della conferenza continua a essere arricchito con nuove relazioni. In particolare, ci aspettiamo un intervento da Nikita Koval () di JetBrains e Oleg Anastasiev () della compagnia Odnoklassniki. Nikita si occupa di algoritmi per coroutine nel team di Kotlin, mentre Oleg sviluppa architetture e soluzioni per sistemi ad alta intensità di carico sulla piattaforma di Odnoklassniki. Inoltre, c'è ancora 1 slot condizionatamente vuoto, con cui il comitato programmatico sta attualmente lavorando sui candidati.
La conferenza Hydra si svolgerà l'11-12 luglio a San Pietroburgo. I biglietti possono essere . Si segnala la disponibilità di biglietti online, nel caso in cui per qualche motivo non possiate raggiungere San Pietroburgo di persona in quei giorni.
Ci vediamo su Hydra!
Fonte: habr.com
