La conférence Hydra se tiendra du 11 au 12 juillet à Saint-Pétersbourg, consacrée au développement de systèmes parallèles et distribués. La caractéristique d'Hydra est de combiner des scientifiques sympas (que l'on ne trouve généralement que lors de conférences scientifiques étrangères) et des ingénieurs praticiens célèbres, en un seul programme à l'intersection de la science et de la pratique.
Hydra est l'une de nos conférences les plus importantes de ces dernières années. Elle a été précédée d'une préparation très sérieuse, de la sélection des intervenants et des rapports. La semaine dernière , un entretien avec le directeur de la société JUG.ru Group, Alexei Fedorov ( 23derevo ), a été rendu public à ce sujet.
Nous avons déjà parlé de trois participants importants, les fondateurs de la théorie des systèmes distribués - Leslie Lamport, Maurice Herlichi et Michael Scott. Il est temps de parler davantage de l'ensemble du programme!

La motivation
Si vous programmez, vous avez en quelque sorte affaire à l'informatique multithread et distribuée. Les experts dans les domaines concernés travaillent directement avec eux, mais implicitement, la distribution nous regarde de partout: dans tout ordinateur multicœur ou service distribué, il y a quelque chose qui effectue des calculs en parallèle.
Il existe de nombreuses conférences qui révèlent divers aspects de la programmation appliquée. De l'autre côté du spectre, nous avons des écoles scientifiques spéciales qui, sous la forme de conférences, révèlent d'énormes volumes de théorie complexe. Par exemple, l' école SPTDC fonctionne en parallèle avec Hydra à Saint-Pétersbourg. Chez Hydra, nous avons essayé de réunir la pratique dure, la science et tout à leur jonction.
Pensez-y: nous vivons à une époque incroyable où vous pouvez rencontrer les fondateurs du domaine de la science et de l'ingénierie dans lequel nous sommes engagés. Les physiciens ne rencontreront ni Newton ni Einstein - le train est parti. Mais il y a encore des gens qui vivent près de nous qui ont créé les fondements de la théorie des systèmes distribués, qui ont inventé des langages de programmation populaires et qui ont pour la première fois incarné tout cela dans des prototypes fonctionnels. Ces personnes n'ont pas abandonné leur travail à mi-chemin, elles sont actuellement engagées dans des tâches urgentes dans des universités et des entreprises de renommée mondiale, et sont les plus grandes sources de connaissances et d'expérience à ce jour.
D'un autre côté, l'occasion de les rencontrer reste généralement purement théorique: peu d'entre nous peuvent surveiller en permanence les événements publics dans une université de Rochester, puis se précipiter aux États-Unis et revenir à une conférence à Michael Scott. Visiter tous les participants d'Hydra en général serait dans un petit état, sans compter l'abîme du temps passé (bien que cela ressemble à une quête intéressante).
D'un autre côté, nous avons beaucoup d'ingénieurs de haut niveau qui travaillent actuellement sur des problèmes urgents de systèmes distribués, et ils ont certainement quelque chose à dire. Mais voici le problème - ils travaillent et leur temps est cher. Oui, si vous êtes un employé de Microsoft, Google ou JetBrains, la probabilité de rencontrer l'un des conférenciers bien connus lors d'un événement interne augmente considérablement, mais en général - non, pas tous les jours, cela se produit.
Ainsi, la conférence Hydra remplit une tâche importante que la plupart d'entre nous ne pouvons pas faire nous-mêmes - en un seul endroit et en même temps rassemble des personnes dont les idées ou la communication avec qui peuvent changer votre vie. J'admets que tout le monde n'a pas besoin de systèmes distribués, de choses fondamentales complexes. Vous pouvez programmer des CRUD en PHP pour le reste de votre vie et rester complètement heureux. Mais qui en a besoin, c'est votre chance.
Beaucoup de temps s'est écoulé depuis la première annonce de la conférence Hydra sur Habré. Pendant ce temps, beaucoup de travail a été fait - et maintenant, nous avons une liste de presque tous les rapports. Aucun algorithme monotrame lent, juste du hardcore purement distribué! Terminons avec des mots généraux et voyons ce que nous avons sous la main maintenant.
Keynotes
Les keynotes commencent et terminent les jours de la conférence. Habituellement, le sens du discours d'ouverture est de définir l'esprit général et la direction de la conférence. Le discours de clôture trace une ligne et explique comment vivre avec les connaissances et les compétences acquises pendant les jours de la conférence. Début et fin: ce dont on se souviendra le mieux, et en général, est de plus en plus important.
Cliff est une légende du monde Java. À la fin des années 90, pour la thèse de doctorat, il a écrit un ouvrage intitulé Combining Analyzes, Combining Optimizations , qui est devenu après un certain temps la base du HotSpot JVM Server Compiler. Deux ans plus tard, il a déjà travaillé chez Sun Microsystems sur la JVM et a montré au monde que JIT a le droit d'exister. Toute l'histoire que Java est l'un des runtimes modernes les plus rapides avec les optimisations les plus intelligentes et les plus rapides est venue de Cliff Click. Au tout début, on pensait que si quelque chose est disponible pour le compilateur statique, vous ne pouvez même pas essayer de jit. Grâce au travail de Cliff et de l'équipe, tous les nouveaux langages ont commencé à être créés avec l'idée d'une compilation JIT par défaut. Bien sûr, ce n'était pas un travail pour une seule personne, mais Cliff y a joué un rôle très important.
Dans le discours d'ouverture, Cliff parlera de son autre projet - le H20 , une plate-forme en mémoire pour l'apprentissage automatique distribué et évolutif pour les applications industrielles. Ou plutôt sur le stockage distribué des paires clé-valeur à l'intérieur. Il s'agit d'un référentiel très rapide avec de nombreuses propriétés intéressantes (la liste exacte se trouve dans la description ) qui vous permet d'utiliser des solutions similaires dans les mathématiques du streaming Big Data.
Une autre conférence que Cliff donnera sera l' expérience de la mémoire transactionnelle matérielle Azul . Une autre partie de sa biographie est dix ans de travail à Azul , où il a mis à jour et amélioré beaucoup de choses dans le matériel et la pile technologique Azul: compilateurs JIT, runtime, modèle de thread, gestion des erreurs, travail de pile, interruptions matérielles, chargement de classe, etc., etc. des choses comme ça - eh bien, vous obtenez le point.
La partie la plus intéressante a commencé quand ils ont fabriqué du matériel pour les grandes entreprises - un superordinateur pour exécuter Java. C'était une chose plutôt innovante, aiguisée spécifiquement pour Java, qui a des exigences particulières - des barrières de mémoire à la lecture pour la collecte des ordures ménagères, des tableaux avec vérification des frontières, des appels virtuels ... L'une des technologies les plus cool est la mémoire transactionnelle basée sur le matériel. Tous les L1 de l'un des 864 cœurs pourraient participer à l'écriture transactionnelle, ce qui est particulièrement important pour travailler avec des verrous en Java (les blocs synchronisés peuvent fonctionner en parallèle, tant qu'il n'y a pas de véritable conflit de mémoire). Mais une belle idée s'est écrasée dans une dure réalité - et dans ce rapport, Cliff expliquera pourquoi HTM et STM ne sont pas très adaptés aux besoins pratiques de l'informatique multithread.
Michael Scott est professeur d'informatique à l'Université de Rochester, avec qui le destin l' avait déjà lié depuis 34 ans , et à l'université d'origine du Wisconsin - Madison, il a été doyen pendant cinq ans. Il est engagé dans la recherche dans le domaine de la programmation parallèle et distribuée et de la conception de langage et enseigne cela aux étudiants.
Le monde entier connaît Michael grâce au manuel «Programming Language Pragmatics» , dont la dernière édition a été publiée relativement récemment - en 2015. Son travail , Algorithms for scalable synchronization on shared-memory multiprocessors, a reçu le prix Dijkstra comme l'un des plus célèbres dans le domaine de l'informatique distribuée et réside ouvertement dans la bibliothèque en ligne de l'Université de Rochester. Vous pouvez également le connaître en tant qu'auteur du même algorithme Michael-Scott de "Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms" .
Quant au monde Java, c'est un cas particulier: avec Doug Lea, il a développé ces algorithmes non bloquants et ces files d'attente synchrones qui exécutent les bibliothèques Java. C'est exactement ce que sera la keynote sur les structures de données doubles - l'introduction de ces structures dans Java SE 6 a permis 10 fois d'améliorer les performances de java.util.concurrent.ThreadPoolExecutor
. Si vous êtes intéressé à l'avance par ces «structures de données doubles», il y a un travail correspondant à ce sujet.
Maurice Herlichi est lauréat de deux prix Dijkstra. Le premier concerne la synchronisation sans attente (Brown University) et le second, plus récent, est Transactional Memory: Architectural Support for Lock-Free Data Structures (Virginia Tech University). Le prix Dijkstra est décerné pour des œuvres dont l'importance et l'influence sont notables depuis au moins dix ans, et, évidemment, Maurice est l'un des spécialistes les plus célèbres du domaine. Il travaille actuellement en tant que professeur à l'Université Brown et a de nombreuses réalisations pour un paragraphe entier.
Lors de cette allocution de clôture, Maurice parlera de la théorie et de la pratique des systèmes distribués blockchain en termes de classiques de l'informatique distribuée et comment cela simplifie de nombreux problèmes connexes. Ce rapport est exclusivement sur le thème de la conférence - pas du tout sur le battage médiatique, mais plutôt sur la façon dont nos connaissances peuvent être incroyablement efficaces et appropriées pour s'appliquer à une variété de tâches.
En juillet 2017, Maurice est venu en Russie à l'école SPTDC, a participé au rallye JUG.ru, et l'enregistrement peut être visionné sur YouTube:
Programme principal
Vient ensuite un bref examen des rapports inclus dans le programme. Certains des rapports sont décrits en détail ici, et certains sont plus courts. De longues descriptions ont été obtenues principalement dans des rapports en anglais nécessitant des liens vers des articles scientifiques, des termes sur Wikipédia, etc. La liste complète peut être consultée sur le site Web de la conférence . La liste sur le site sera mise à jour et complétée.
Leslie Lampport est l'auteur de travaux fondamentaux en informatique distribuée. LaTeX signifie Lamport TeX. C'est la première fois qu'il introduit le concept de cohérence cohérente en 1979, et son article «Comment faire un ordinateur multiprocesseur qui exécute correctement des programmes multiprocessus» a remporté le prix Dijkstra.
Il s'agit de la partie la plus inhabituelle du programme en termes de format, car ce n'est même pas un rapport, mais une session de questions / réponses. Lorsqu'une partie importante du public connaît déjà (ou peut se familiariser) avec toutes sortes d'œuvres basées sur la «théorie de Lamport», ses propres articles et rapports, il est important de consacrer tout le temps disponible à la communication directe.
L'idée est simple - vous regardez deux rapports sur YouTube: "La programmation devrait être plus que du codage" et "Si vous n'écrivez pas un programme, n'utilisez pas de langage de programmation" et préparez au moins une question, et Leslie répond.
La première de ces deux vidéos, nous l'avons déjà transformée en habrosta . Si vous n'avez pas une heure pour regarder la vidéo, vous pouvez rapidement lire tout cela dans le texte.
Remarque: il y a beaucoup plus de vidéos de Leslie Lamport sur YouTube. Par exemple, il existe un excellent cours TLA + . La version hors ligne de l'ensemble de ce cours se trouve sur la page d'accueil de l' auteur , et sur YouTube, il l'a téléchargée pour une visualisation plus facile sur les appareils mobiles.
Martin Kleppmann est chercheur à l'Université de Cambridge, travaillant sur le CRDT et la vérification formelle des algorithmes. Le livre de Martin intitulé Designing Data-Intensive Applications , publié en 2017, s'est avéré un grand succès et a figuré sur la liste des meilleures ventes dans le domaine du stockage et du traitement des données. Kevin Scott, CTO chez Microsoft, a déclaré un jour : «Ce livre devrait être un must pour les ingénieurs de développement. "Il s'agit d'une ressource rare combinant théorie et pratique, aidant les développeurs à concevoir et à mettre en œuvre plus intelligemment l'infrastructure et les systèmes de traitement des données." Quelque chose de similaire a été dit par le créateur de Kafka et PDG Confluent, Jay Kreps.
Avant de se lancer dans la recherche universitaire, Martin a travaillé dans l'industrie et a cofondé deux startups à succès:
- Rapportive, dédié à l'affichage du profil social des contacts de votre messagerie, que LinkedIn a acheté en 2012;
- Go Test It, un service de vérification automatique de sites Web dans divers navigateurs, que RedGate a acheté en 2009.
De manière générale, Martin, bien que moins connu que nos keynoters, a déjà pu apporter une contribution au développement de l'informatique distribuée et à l'industrie.
Dans ce rapport, Martin parlera d'un sujet plus proche de ses recherches universitaires. Dans Google Docs et un canapé similaire pour la coédition de documents, la «coédition» signifie la tâche de réplication: chaque utilisateur a sa propre réplique du document commun, qu'il modifie ensuite, et toutes les modifications sont envoyées aux autres participants via le réseau. Les modifications apportées aux documents hors ligne entraînent une incohérence temporaire du document par rapport aux autres participants, et la resynchronisation nécessite une gestion des conflits. Juste pour cela, il existe en fait des types de données répliquées sans conflit (CRDT) - une chose plutôt nouvelle, dont l'essence n'a été formulée qu'en 2011. Ce rapport discute de ce qui s'est passé depuis lors dans le monde du CRDT, quelles sont les dernières réalisations, discute de l'approche pour créer des applications locales d'abord en général et de l'utilisation de la bibliothèque open source Automerge en particulier.
La semaine prochaine nous publierons sur Habré une grande interview de Martin, ce sera intéressant.
Pedro travaille chez Cisco et développe des algorithmes parallèles depuis dix ans, y compris des mécanismes de synchronisation, des structures de données sans verrouillage et sans attente et tout ce que vous pouvez imaginer sur ce sujet. Ses intérêts de recherche et d'ingénierie actuels se concentrent sur les constructions universelles, la mémoire transactionnelle logicielle, la mémoire persistante et des technologies similaires qui permettent la mise en œuvre d'applications correctes, évolutives et tolérantes aux pannes. Il est également l'auteur du blog Concurrency Freaks , largement connu dans les cercles étroits.
La plupart des applications multithread fonctionnent désormais sur des structures de données parallèles, en commençant par l'utilisation de files d'attente de messages entre les acteurs et en terminant par des structures de données indexées dans des stockages de valeurs-clés. En Java JDK, ils fonctionnent avec succès depuis de nombreuses années et en C ++, ils sont lentement ajoutés.
La manière la plus simple d'implémenter une structure de données parallèle est une implémentation séquentielle (monothread) dans laquelle les méthodes sont protégées par des mutex. Ceci est accessible à tous les mois de juin, mais présente des problèmes évidents de mise à l'échelle et de performances. Dans le même temps, les structures de données sans verrouillage et sans attente résistent non seulement mieux aux erreurs, mais ont également un profil de performance plus performant.Cependant, leur développement nécessite une expertise approfondie et une adaptation à une application spécifique. Une mauvaise ligne de code suffit pour tout casser.
Comment rendre même un non-expert capable de concevoir et de mettre en œuvre de telles structures de données? Il est connu que tout algorithme séquentiel peut être rendu thread-safe en utilisant une conception universelle ou une mémoire transactionnelle. D'une part, ils peuvent abaisser le seuil d'accès à cette tâche. Cependant, les deux solutions ont tendance à conduire à une mise en œuvre inefficace. Pedro expliquera comment ils ont réussi à rendre ces conceptions plus efficaces et comment ils peuvent être utilisés pour leurs algorithmes.
Heidi Howard est, comme Martin, chercheuse en systèmes distribués à l'Université de Cambridge. Sa spécialisation est la cohérence, la tolérance aux pannes, les performances et le consensus distribué. Elle est surtout connue pour généraliser l'algorithme Paxos appelé Flexible Paxos .
Rappelons que Paxos est une famille de protocoles pour résoudre le problème du consensus dans un réseau d'ordinateurs peu fiables, qui étaient basés sur les travaux de Leslie Lamport. Ainsi, certains de nos orateurs travaillent sur des tâches initialement proposées par nos autres orateurs - et c'est merveilleux.
La capacité à trouver un consensus entre plusieurs hôtes - pour l'adressage, la sélection des leaders, le blocage ou la coordination - est un problème fondamental dans les systèmes distribués modernes. Paxos est désormais le principal moyen de résoudre les problèmes de recherche de consensus, et de nombreuses recherches sont en cours pour l'élargir et optimiser l'algorithme pour divers besoins pratiques.
Dans ce rapport, nous réviserons la base théorique de Paxos, affaiblissant les exigences initiales et généralisant l'algorithme. Nous verrons que Paxos, en fait, n'est qu'une option parmi une vaste gamme d'approches consensuelles, et que d'autres points du spectre sont également très utiles pour construire de bons systèmes distribués.
Alex est un spécialiste des bases de données et des systèmes de stockage, et plus important pour nous, est un committer chez Cassandra . Avec O'Reilly, il travaille actuellement sur le livre Database Internals.
Pour les systèmes avec une cohérence éventuelle (dans la terminologie russe - «cohérence à long terme»), après la suppression d'un nœud ou la division du réseau, le dilemme suivant doit être résolu: soit continuer à répondre aux demandes, sacrifier la cohérence, soit refuser de les satisfaire et sacrifier la disponibilité. Dans un tel système, des quorums chevauchant des sous-ensembles de nœuds et garantissant qu'au moins un nœud contiendra la valeur la plus récente peut être une bonne solution aux limites. Vous pouvez survivre aux échecs et à la perte de connexion à certains nœuds, en continuant de répondre avec les dernières valeurs.
Cependant, tout a un prix. Un schéma de réplication de quorum signifie un coût de stockage accru: vous devez stocker des données redondantes sur plusieurs nœuds à la fois afin de garantir un nombre suffisant de copies disponibles au moment du problème. Il s'avère que vous ne pouvez pas stocker toutes les données sur toutes les répliques. Vous pouvez réduire la charge sur le stockage en conservant les données sur une partie seulement des nœuds et utiliser des nœuds spéciaux (réplique transitoire) pour les scénarios de traitement des échecs.
Au cours du rapport, nous examinerons les répliques de témoins , le schéma de réplication utilisé par Spanner et Megastore , et la mise en œuvre de ce concept dans Apache Cassandra sous les noms Transient Replication & Cheap Quorums .
Dmitry est un développeur Google travaillant sur les tests dynamiques de C / C ++ et Go - Address / Memory / ThreadSanitizer, et sur des outils similaires pour le noyau Linux. Go a un planificateur de goroutine évolutif, un poller réseau et un garbage collector parallèle. Il est expert en multithreading, auteur d'une douzaine de nouveaux algorithmes non bloquants et propriétaire de la Black Belt d' Intel.
Maintenant, parlons un peu du rapport lui-même. Go a un support natif pour le multithreading sous la forme de goroutines (fils légers) et de canaux (files d'attente FIFO). Grâce à ces mécanismes, il est très facile et agréable pour les utilisateurs d'écrire des applications multithreads modernes, et cela ressemble à de la magie. Comme nous le comprenons, il n'y a pas de magie ici. Dans ce rapport, Dmitry approfondira les subtilités du travail du programmateur Go et dévoilera les secrets de la mise en œuvre de cette «magie». Tout d'abord, il donnera un aperçu des principaux composants du planificateur, expliquera comment cela fonctionne. De plus, nous examinerons de plus près certains aspects, tels que la stratégie de stationnement / déballage et le traitement des appels du système de blocage. Enfin, Dmitry parlera un peu des améliorations possibles du planificateur.
Dmitry a travaillé dans l'externalisation pendant près de 9 ans, sans perdre le contact avec l'université et la communauté scientifique. L'analyse des mégadonnées à Odnoklassniki a été pour lui une occasion unique de combiner formation théorique et fondement scientifique avec le développement de produits réels et recherchés.
L'analyse de graphe distribué était et reste une tâche difficile: lorsqu'il devient nécessaire d'obtenir des informations sur les connexions d'un sommet voisin, les données doivent souvent être distillées entre machines, ce qui entraîne une augmentation du temps d'exécution et une charge sur l'infrastructure réseau. Dans ce rapport, nous verrons comment vous pouvez obtenir une vitesse de traitement significative en utilisant des structures de données probabilistes ou des faits comme la symétrie d'un graphique d'amitié dans un réseau social. Tout cela est illustré par des exemples de code Apache Spark.
Denis est un développeur Cosmos DB , expert dans le domaine de la vérification des modèles de cohérence, des algorithmes de consensus et des transactions distribuées. Maintenant, il travaille chez Microsoft, et avant cela, il était engagé dans des systèmes distribués sur Amazon et Yandex.
Dans ce rapport, nous nous familiariserons avec les protocoles de transaction distribués inventés au cours des dernières années, qui peuvent être mis en œuvre côté client au-dessus de tout magasin de données prenant en charge la mise à jour conditionnelle (comparer et définir). L'essentiel est que la vie ne se termine pas avec un commit en deux phases, des transactions peuvent être ajoutées au-dessus de toutes les bases de données - au niveau de l'application, mais différents protocoles (2PC, Percolator, RAMP) ont des compromis différents et ne nous sont pas donnés gratuitement.
Alexey ( zaleslaw ) est notre conférencier de longue date et membre des comités de programme lors d'autres conférences. Formateur en exercice chez EPAM Systems, il est ami avec Hadoop / Spark et d'autres grandes dates depuis 2012.
Dans ce rapport, Alexey parlera des problèmes d'adaptation des algorithmes classiques d'apprentissage automatique pour l'exécution distribuée en se basant sur son expérience de travail avec Apache Spark ML, Apache Mahout, Apache Flink ML et l'expérience de la création d'Apache Ignite ML. Alexey parlera également de l'implémentation d'algorithmes ML distribués dans ces frameworks.
Et enfin - deux rapports de Yandex sur la base de données Yandex.
Vladislav est un développeur Yandex dans un groupe de plates-formes distribuées. La base de données Yandex est un SGBD tolérant aux pannes géo-distribué évolutif horizontalement qui peut résister à la défaillance des disques, serveurs, racks et centres de données sans compromettre la cohérence. Pour garantir la tolérance aux pannes, un algorithme de consensus distribué propriétaire est utilisé, ainsi qu'un certain nombre de solutions techniques qui sont discutées en détail dans le rapport. Le rapport peut intéresser à la fois les développeurs de SGBD et les développeurs de solutions d'application basées sur les SGBD.
Semyon - un développeur dans un groupe d'une plate-forme distribuée dans Yandex, travaille sur la possibilité d'une utilisation multi-locataire de l'installation YDB.
La base de données Yandex est conçue pour les requêtes OLTP et répond aux exigences ACID pour un système de transaction. Dans le rapport, nous considérerons l'algorithme de planification des transactions sous-jacent au système de transactions YDB. Nous analyserons quelles entités participent aux transactions, qui attribue aux transactions un ordre global, comment l'atomicité des transactions, la fiabilité et un niveau d'isolement strict sont atteints. En utilisant un exemple de problème commun, nous considérons la mise en œuvre de transactions à l'aide d'un commit en deux phases et de transactions déterministes. Nous discutons de leurs différences.
Et ensuite?
Le programme de la conférence continue d'être rempli de nouveaux rapports. En particulier, nous attendons un rapport de Nikita Koval ( ndkoval ) de JetBrains et Oleg Anastasiev ( m0nstermind ) d'Odnoklassniki. Nikita est engagée dans les algorithmes pour les coroutines au sein de l'équipe Kotlin, et Oleg développe une architecture et des solutions pour les systèmes hautement chargés dans la plate-forme Odnoklassniki. De plus, il y a une autre place vide sous condition, avec des candidats pour lesquels le comité de programme travaille actuellement.
La conférence Hydra se tiendra du 11 au 12 juillet à Saint-Pétersbourg. Les billets peuvent être achetés sur le site officiel . Nous attirons l'attention sur la disponibilité des billets en ligne - si, pour une raison quelconque, vous ne pouvez pas vous rendre à Saint-Pétersbourg ces jours-ci.
Rencontrez-moi Ă Hydra!