19 cabeças de hidra. Ótima visão geral do programa

Uma conferência acontecerá de 11 a 12 de julho em São Petersburgo Hydra, dedicado ao desenvolvimento de sistemas paralelos e distribuídos. O truque do Hydra é que ele une cientistas legais (que normalmente só podem ser encontrados em conferências científicas estrangeiras) e engenheiros famosos em atividade em um grande programa na intersecção da ciência e da prática.

Hydra é uma das nossas conferências mais importantes dos últimos anos. Foi precedido de uma preparação muito séria, seleção de palestrantes e relatórios. Semana passada sobre isso entrevista habro saiu com o diretor do Grupo JUG.ru, Alexey Fedorov (23derevo).

Nós já disse cerca de três participantes importantes, os fundadores da teoria dos sistemas distribuídos - Leslie Lamport, Maurice Herlihy e Michael Scott. É hora de falar mais detalhadamente sobre todo o programa!

19 cabeças de hidra. Ótima visão geral do programa

Motivação

Se você está envolvido com programação, então, de uma forma ou de outra, você está lidando com multithreading e computação distribuída. Especialistas nas áreas relevantes trabalham com eles diretamente, mas implicitamente, a distribuição está nos olhando de todos os lugares: em qualquer computador multi-core ou serviço distribuído há algo que realiza cálculos em paralelo.

Existem muitas conferências que cobrem vários aspectos da programação de aplicativos. Do outro lado do espectro, temos escolas científicas especializadas que revelam grandes quantidades de teoria complexa em formato de palestra. Por exemplo, paralelamente à Hydra em São Petersburgo, existe Escola SPTDC. Na conferência Hydra, tentamos reunir práticas severas, ciência e tudo o que existe em sua interseção.

Pense nisso: vivemos uma época incrível em que você pode conhecer pessoalmente os fundadores da área de ciência e engenharia que estudamos. Os físicos não encontrarão Newton nem Einstein - o trem partiu. Mas ao nosso lado ainda vivem aqueles que criaram as bases da teoria dos sistemas distribuídos, inventaram linguagens de programação populares e, pela primeira vez, incorporaram tudo isso em protótipos funcionais. Estas pessoas não abandonaram os seus empregos a meio caminho, estão neste momento a trabalhar em questões urgentes em universidades e empresas de renome mundial, e são hoje as maiores fontes de conhecimento e experiência.

Por outro lado, a oportunidade de conhecê-los geralmente permanece puramente teórica: poucos de nós conseguem monitorar constantemente eventos públicos em alguma Universidade de Rochester e depois correr para os EUA e voltar para uma palestra com Michael Scott. Visitar todos os membros da Hydra custaria uma pequena fortuna, sem contar o abismo de tempo perdido (embora pareça uma missão interessante).

Por outro lado, temos muitos engenheiros de ponta trabalhando em problemas urgentes em sistemas distribuídos no momento e eles definitivamente têm muito a contar. Mas aqui está o problema - eles работают, e seu tempo é valioso. Sim, se você é funcionário da Microsoft, Google ou JetBrains, a probabilidade de encontrar um dos palestrantes famosos em um evento interno aumenta bastante, mas em geral não, isso não acontece todos os dias.

Desta forma, a Conferência Hydra realiza uma tarefa importante que a maioria de nós não consegue realizar sozinhos - num só lugar e ao mesmo tempo, reúne pessoas cujas ideias ou interações com quem podem mudar a sua vida. Admito que nem todo mundo precisa de sistemas distribuídos ou de algumas coisas fundamentais complexas. Você pode programar CRUDs em PHP para o resto da vida e permanecer completamente feliz. Mas quem precisar, essa é sua chance.

Muito tempo se passou desde o primeiro anúncio da conferência Hydra sobre Habré. Durante esse tempo, muito trabalho foi feito – e agora temos uma lista de quase todos os relatórios. Sem algoritmos lentos de thread único, apenas puro hardcore distribuído! Vamos terminar com palavras gerais e ver o que temos em mãos agora.

Palestras

As palestras começam e terminam nos dias da conferência. Normalmente, o objetivo de uma palestra de abertura é definir o espírito geral e a direção da conferência. A palestra de encerramento traça um limite e explica como podemos conviver com os conhecimentos e habilidades adquiridos durante a conferência. O começo e o fim: o que é melhor lembrado e, em geral, tem maior importância.

Clique no penhasco O algoritmo K/V distribuído H2O

19 cabeças de hidra. Ótima visão geral do programa Cliff é uma lenda no mundo Java. No final dos anos 90, para sua tese de doutorado, escreveu um artigo intitulado "Combinando análises, combinando otimizações", que algum tempo depois se tornou a base do HotSpot JVM Server Compiler. Dois anos depois, ele já trabalhava na Sun Microsystems na JVM e mostrou ao mundo inteiro que o JIT tem o direito de existir. Toda essa história sobre como Java é um dos tempos de execução modernos mais rápidos, com as otimizações mais inteligentes e rápidas, veio de Cliff Click. No início, acreditava-se que se algo fosse acessível a um compilador estático, você nem precisaria tentar fazer o jit. Graças ao trabalho de Cliff e equipe, todas as novas linguagens começaram a ser criadas com a ideia de compilação JIT por padrão. Claro, este não era um trabalho individual, mas Cliff desempenhou um papel muito importante nele.

Na palestra de abertura, Cliff falará sobre seu outro empreendimento - H20, uma plataforma in-memory para aprendizado de máquina distribuído e escalonável para aplicações industriais. Ou, mais precisamente, sobre o armazenamento distribuído de pares de valores-chave dentro dele. Este é um armazenamento muito rápido com muitas propriedades interessantes (a lista exata está em descrição), que permitem o uso de soluções semelhantes na matemática do streaming de big data.

Outro relatório que Cliff dará é - A experiência da memória transacional de hardware Azul. Outra parte de sua biografia – dez anos trabalhar na Azul, onde ele atualizou e melhorou muitas coisas na pilha de hardware e tecnologia da Azul: compiladores JIT, tempo de execução, modelo de thread, tratamento de erros, manipulação de pilha, interrupções de hardware, carregamento de classe e assim por diante - bem, você obtém o ideia.

A parte mais interessante começou quando eles criaram hardware para uma grande empresa – um supercomputador para rodar Java. Foi algo bastante inovador, feito sob medida especificamente para Java, que possui requisitos especiais - barreiras de memória de leitura para coleta de lixo de baixa pausa, matrizes com verificação de limites, chamadas virtuais... Uma das tecnologias mais legais é a memória transacional de hardware. Todo o L1 de qualquer um dos 864 núcleos poderia participar da escrita transacional, o que é especialmente importante para trabalhar com bloqueios em Java (blocos sincronizados podem funcionar em paralelo, desde que não haja conflito real de memória). Mas a bela ideia foi esmagada pela dura realidade - e nesta palestra Cliff lhe dirá por que HTM e STM não são muito adequados para as necessidades práticas da computação multithread.

Michael Scott- Estruturas de dados duplas

19 cabeças de hidra. Ótima visão geral do programa Michael Scott - Professor de Ciência da Computação na Universidade de Rochester, com quem o destino o conectou já tem 34 anos, e em sua cidade natal, a Universidade de Wisconsin-Madison, ele foi reitor por cinco anos. Ele pesquisa e ensina aos alunos sobre programação paralela e distribuída e design de linguagem.

O mundo inteiro conhece Michael graças ao livro "Pragmática da Linguagem de Programação", cuja última edição foi publicada há relativamente pouco tempo - em 2015. O trabalho dele "Algoritmos para sincronização escalável em multiprocessadores de memória compartilhada" recebido Prêmio Dijkstra como um dos mais famosos no campo da computação distribuída e mentindo abertamente na Biblioteca Online da Universidade de Rochester. Você também pode conhecê-lo como o autor do algoritmo Michael-Scott de "Algoritmos de fila simultânea simples, rápidos e práticos, sem bloqueio e bloqueio".

Quanto ao mundo Java, este é um caso especial: junto com Doug Lea, ele desenvolveu os algoritmos sem bloqueio e as filas síncronas nas quais funcionam as bibliotecas Java. É exatamente disso que tratará a palestra “Estruturas de dados duplas” - a introdução dessas estruturas no Java SE 6 melhorou o desempenho em 10 vezes java.util.concurrent.ThreadPoolExecutor. Se você está se perguntando antecipadamente o que são essas “estruturas de dados duplas”, então há informações sobre isso Trabalho relatado.

Maurice Herlihy Blockchains e o futuro da computação distribuída

19 cabeças de hidra. Ótima visão geral do programa Maurice Herlihy - vencedor de dois prêmios Dijkstra. A primeira é para trabalhar "Sincronização sem espera" (Brown University), e a segunda, mais recente - "Memória Transacional: Suporte Arquitetônico para Estruturas de Dados Sem Bloqueio" (Universidade Técnica da Virgínia). O Prémio Dijkstra reconhece trabalhos cujo significado e impacto são visíveis há pelo menos dez anos, e Maurice é claramente um dos mais renomados especialistas na área. Atualmente, ele trabalha como professor na Brown University e tem uma longa lista de realizações.

Nesta palestra de encerramento, Maurice falará sobre a teoria e a prática dos sistemas distribuídos blockchain do ponto de vista dos clássicos da computação distribuída e como ela simplifica muitos problemas relacionados. Este é um relatório exclusivamente sobre o tema da conferência - não sobre o hype da mineração, mas sim sobre como nosso conhecimento pode ser usado de forma surpreendentemente eficaz e apropriada em relação a uma variedade de tarefas.

Em julho de 2017, Maurice já veio à Rússia para frequentar a escola SPTDC, participou do encontro JUG.ru, e a gravação pode ser assistida no YouTube:

Programa principal

A seguir será apresentada uma breve visão geral dos relatórios incluídos no programa. Alguns dos relatórios são aqui descritos em detalhe, outros de forma mais resumida. As descrições longas iam principalmente para relatórios em inglês que exigiam links para artigos científicos, termos na Wikipédia e assim por diante. A lista completa está disponível veja no site da conferência. A lista no site será atualizada e complementada.

Leslie Lamport Q & A

19 cabeças de hidra. Ótima visão geral do programa Leslie Lamport é autora de trabalhos seminais em computação distribuída. "Látex" significa "LamportTeX". Foi ele quem primeiro, em 1979, introduziu o conceito consistência sequencial, e seu artigo "Como fazer um computador multiprocessador que execute programas multiprocessados ​​corretamente" recebeu o Prêmio Dijkstra.

Esta é a parte mais inusitada do programa em termos de formato, pois não se trata nem de um relatório, mas sim de uma sessão de perguntas e respostas. Quando uma parte significativa do público já conhece (ou pode se familiarizar) com todo tipo de trabalhos baseados na “teoria de Lamport”, seus próprios artigos e relatórios, é mais importante dedicar todo o tempo disponível à comunicação direta.

A ideia é simples - você assiste a duas reportagens no YouTube: "Programação deve ser mais do que codificação" и “Se você não estiver escrevendo um programa, não use uma linguagem de programação” e prepare pelo menos uma pergunta e Leslie responderá.

O primeiro desses dois vídeos que já virou um artigo habro. Se você não tiver uma hora para assistir ao vídeo, poderá lê-lo rapidamente em formato de texto.

Nota: Existem muitos mais vídeos de Leslie Lamport no YouTube. Por exemplo, há um grande Curso TLA+. Uma versão offline de todo este curso está disponível em página inicial do autor, e ele carregou-o no YouTube para facilitar a visualização em dispositivos móveis.

Martin Kleppmann- Sincronizando dados entre dispositivos de usuários para colaboração distribuída

19 cabeças de hidra. Ótima visão geral do programa Martin Kleppmann é pesquisador da Universidade de Cambridge e trabalha com CRDT e verificação formal de algoritmos. O livro de Martinho "Projetando aplicativos com uso intensivo de dados", publicado em 2017, teve muito sucesso e entrou nas listas dos mais vendidos na área de armazenamento e processamento de dados. Kevin Scott, CTO da Microsoft, uma vez dito: “Este livro deve ser obrigatório para engenheiros de software. Este é um recurso raro que combina teoria e prática para ajudar os desenvolvedores a serem mais inteligentes no projeto e implementação de infraestrutura e sistemas de dados.” O criador do Kafka e CTO do Confluent, Jay Kreps, disse algo semelhante.

Antes de ingressar na pesquisa acadêmica, Martin trabalhou na indústria e foi cofundador de duas start-ups de sucesso:

  • Rapportive, dedicado a exibir o perfil social dos contatos do seu email, que o LinkedIn comprou em 2012;
  • Go Test It, um serviço para testar automaticamente sites em vários navegadores, que a RedGate comprou em 2009.

Em geral, Martin, embora menos famoso que os nossos palestrantes, já conseguiu dar alguma contribuição para o desenvolvimento da computação distribuída e para a indústria.

Nesta palestra, Martin falará sobre um tema mais próximo de sua pesquisa acadêmica. No Google Docs e em sofás de coedição de documentos semelhantes, "edição colaborativa" refere-se a uma tarefa de replicação: cada usuário tem sua própria réplica do documento compartilhado, que ele então modifica, e todas as alterações são enviadas pela rede para o restante do documento. participantes. Alterações em documentos off-line levam à inconsistência temporária do documento em relação a outros participantes e a ressincronização requer tratamento de conflitos. É exatamente para isso que eles existem Tipos de dados replicados sem conflitos (CRDT), na verdade, é algo bastante novo, cuja essência foi formulada apenas em 2011. Esta palestra discute o que aconteceu desde então no mundo do CRDT, quais são os avanços mais recentes, a abordagem para a criação de aplicações locais em geral e o uso de uma biblioteca de código aberto Mesclagem automática em particular.

Na próxima semana publicaremos uma longa entrevista com Martin no Habré, será interessante.

Pedro Ramalhete- Estruturas de dados sem espera e transações sem espera

19 cabeças de hidra. Ótima visão geral do programa Pedro trabalha na Cisco e vem desenvolvendo algoritmos paralelos há cerca de dez anos, incluindo mecanismos de sincronização, estruturas de dados sem bloqueio e sem espera e tudo que você possa imaginar sobre esse assunto. Seus atuais interesses de pesquisa e engenharia concentram-se em Construções Universais, Memória Transacional de Software, Memória Persistente e tecnologias similares que permitem aplicações corretas, escaláveis ​​e tolerantes a falhas. Ele também é autor de um blog amplamente conhecido em círculos restritos Anormais de simultaneidade.

A maioria dos aplicativos multithread agora são executados em estruturas de dados paralelas, desde o uso de filas de mensagens entre atores até estruturas de dados indexadas em armazenamentos de valores-chave. Eles têm trabalhado com sucesso no Java JDK por muitos anos e estão sendo lentamente adicionados ao C++.

A maneira mais simples de implementar uma estrutura de dados paralela é uma implementação sequencial (threaded único) na qual os métodos são protegidos por mutexes. Isso está acessível para qualquer junho, mas apresenta problemas óbvios de dimensionamento e desempenho. Ao mesmo tempo, estruturas de dados sem bloqueio e sem espera não só lidam melhor com erros, mas também têm um melhor perfil de desempenho - no entanto, o seu desenvolvimento requer profundo conhecimento e adaptação a uma aplicação específica. Uma linha de código errada é suficiente para quebrar tudo.

Como podemos fazer com que mesmo um leigo possa projetar e implementar tais estruturas de dados? É sabido que qualquer algoritmo sequencial pode se tornar thread-safe usando qualquer desenho universalou memória transacional. Por um lado, podem diminuir a barreira à entrada na resolução deste problema. No entanto, ambas as soluções normalmente levam a uma implementação ineficaz. Pedro falará sobre como eles conseguiram tornar esses projetos mais eficientes e como você pode usá-los em seus algoritmos.

Heidi Howard Libertando o consenso distribuído

19 cabeças de hidra. Ótima visão geral do programa Heidi Howard é, assim como Martin, pesquisadora de sistemas distribuídos na Universidade de Cambridge. Suas especialidades são consistência, tolerância a falhas, desempenho e consenso distribuído. Ela é mais conhecida por sua generalização do algoritmo Paxos chamado Paxos Flexíveis.

Lembre-se que Paxos é uma família de protocolos para resolver o problema de consenso em uma rede de computadores não confiáveis, baseada no trabalho de Leslie Lamport. Assim, alguns dos nossos oradores estão a trabalhar em problemas que foram originalmente propostos pelos nossos outros oradores - e isso é maravilhoso.

A capacidade de encontrar consenso entre vários hosts – para endereçamento, eleição de líderes, bloqueio ou coordenação – é uma questão fundamental nos sistemas distribuídos modernos. Paxos é agora a principal forma de resolver problemas de consenso, e há muitas pesquisas em andamento em torno dele para expandir e otimizar o algoritmo para diversas necessidades práticas.

Nesta palestra revisitaremos a base teórica do Paxos, relaxando os requisitos originais e generalizando o algoritmo. Veremos que Paxos é essencialmente apenas uma opção entre uma enorme variedade de abordagens de consenso, e que outros pontos do espectro também são muito úteis para a construção de bons sistemas distribuídos.

Alex Petrov - Reduza seus custos de armazenamento com replicação transitória e quóruns baratos

19 cabeças de hidra. Ótima visão geral do programa Alex é especialista em bancos de dados e sistemas de armazenamento e, mais importante para nós, um committer em Cassandra. Atualmente ele está trabalhando em um livro, Database Internals, com O'Reilly.

Para sistemas com consistência eventual (na terminologia russa - “consistência final”), após uma falha de nó ou uma divisão de rede, você precisa resolver o seguinte dilema: continuar a executar solicitações, sacrificando a consistência, ou recusar-se a executá-las e sacrificar a disponibilidade. Nesse sistema, quóruns, sobreposição de subconjuntos de nós e garantia de que pelo menos um nó contém o valor mais recente, podem ser uma boa solução de ponta. Você pode sobreviver a falhas e perda de conectividade com alguns nós e ainda responder com os valores mais recentes.

Porém, tudo tem seu preço. Um esquema de replicação de quorum significa maiores custos de armazenamento: dados redundantes devem ser armazenados em vários nós ao mesmo tempo para garantir que haja cópias suficientes disponíveis quando ocorrer um problema. Acontece que você não precisa armazenar todos os dados em todas as réplicas. Você pode reduzir a carga no armazenamento se armazenar dados apenas em parte dos nós e usar nós especiais (réplica transitória) para cenários de tratamento de falhas.

No decorrer do relatório consideraremos Réplicas de testemunhas, o esquema de replicação usado em chave inglesa и Megaloja, e a implementação deste conceito no Apache Cassandra chamada Replicação transitória e quóruns baratos.

Dmitri Vyukov - Goroutines expostas

19 cabeças de hidra. Ótima visão geral do programa Dmitry é um desenvolvedor do Google que trabalha em testes dinâmicos para C/C++ e Go - Address/Memory/ThreadSanitizer e ferramentas semelhantes para o kernel Linux. Contribuiu para Go com um agendador goroutine escalável, um poller de rede e um coletor de lixo paralelo. Ele é um especialista em multithreading, autor de uma dúzia de novos algoritmos sem bloqueio e proprietário de Cinto preto Intel

Agora um pouco sobre o relatório em si. A linguagem Go possui suporte nativo para multithreading na forma de goroutines (threads leves) e canais (filas FIFO). Esses mecanismos tornam muito fácil e agradável para os usuários escrever aplicativos modernos multithread, e isso parece mágica. Como entendemos, não há mágica aqui. Nesta palestra, Dmitry irá se aprofundar nos meandros do agendador Go e mostrar os segredos da implementação dessa “mágica”. Primeiro, ele dará uma visão geral dos principais componentes do agendador e explicará como ele funciona. A seguir, examinaremos mais de perto aspectos individuais, como a estratégia de estacionar/desestacionar e o tratamento de chamadas do sistema de bloqueio. Por fim, Dmitry falará um pouco sobre possíveis melhorias no agendador.

Dmitry Bugaichenko - Acelerando a análise de gráficos distribuídos com esboços probabilísticos e muito mais

19 cabeças de hidra. Ótima visão geral do programa Dmitry trabalhou em terceirização por quase 9 anos sem perder o contato com a universidade e a comunidade científica. A análise de big data em Odnoklassniki tornou-se para ele uma oportunidade única de combinar treinamento teórico e base científica com o desenvolvimento de produtos reais e sob demanda.

A análise de grafos distribuídos tem sido e continua sendo uma tarefa difícil: quando é necessário obter informações sobre as conexões de um vértice vizinho, muitas vezes os dados precisam ser transferidos entre máquinas, o que leva ao aumento do tempo de execução e da carga na infraestrutura da rede. Nesta palestra, veremos como você pode obter velocidades de processamento significativas usando estruturas de dados probabilísticas ou fatos como a simetria do gráfico de amizade em uma rede social. Tudo isso é ilustrado com exemplos de código no Apache Spark.

Denis Rystsov - Reduza seus custos de armazenamento com replicação transitória e quóruns baratos

19 cabeças de hidra. Ótima visão geral do programa Denis - desenvolvedor Cosmos DB, especialista em verificação de modelos de consistência, algoritmos de consenso e transações distribuídas. Atualmente trabalha na Microsoft e antes disso trabalhou em sistemas distribuídos na Amazon e Yandex.

Nesta palestra, daremos uma olhada nos protocolos de transação distribuída que foram inventados nos últimos anos, que podem ser implementados no lado do cliente em qualquer armazenamento de dados que suporte atualização condicional (comparar e definir). O resultado final é que a vida não termina com um commit de duas fases, as transações podem ser adicionadas em qualquer banco de dados - no nível do aplicativo, mas protocolos diferentes (2PC, Percolator, RAMP) têm compensações diferentes e não são fornecidos a nós de graça.

Alexei Zinoviev - Nem todos os algoritmos de ML chegam ao paraíso distribuído

19 cabeças de hidra. Ótima visão geral do programa Alexei (zaleslaw) é palestrante de longa data e membro de comitês de programa em outras conferências. Treinador praticante na EPAM Systems e é amigo de Hadoop/Spark e outros big data desde 2012.

Nesta palestra, Alexey falará sobre os problemas de adaptação de algoritmos clássicos de aprendizado de máquina para execução em modo distribuído com base em sua experiência de trabalho com Apache Spark ML, Apache Mahout, Apache Flink ML e a experiência de criação de Apache Ignite ML. Alexey também falará sobre a implementação de algoritmos de ML distribuídos nessas estruturas.

E, finalmente, dois relatórios do Yandex sobre o banco de dados Yandex.

Vladislav Kuznetsov - Banco de dados Yandex - como garantimos tolerância a falhas

19 cabeças de hidra. Ótima visão geral do programa Vladislav é desenvolvedor da Yandex no grupo de plataformas distribuídas. O banco de dados Yandex é um SGBD horizontalmente escalonável, distribuído geograficamente e tolerante a falhas que pode suportar falhas de discos, servidores, racks e data centers sem perder consistência. Para garantir a tolerância a falhas, é utilizado um algoritmo proprietário para alcançar o consenso distribuído, bem como uma série de soluções técnicas, que são discutidas em detalhe no relatório. O relatório pode ser de interesse tanto para desenvolvedores de SGBD quanto para desenvolvedores de soluções de aplicativos baseadas em SGBD.

Semyon Checherinda - Transações distribuídas em YDB

19 cabeças de hidra. Ótima visão geral do programa Semyon é desenvolvedor do grupo de plataformas distribuídas da Yandex, trabalhando na possibilidade de uso multilocatário da instalação YDB.

O banco de dados Yandex foi projetado para consultas OLTP e está em conformidade com os requisitos ACID para um sistema transacional. Neste relatório, consideraremos o algoritmo de escalonamento de transações subjacente ao sistema de transações YDB. Vejamos quais entidades participam das transações, quem atribui ordem global às transações, como a atomicidade, a confiabilidade e um nível estrito de isolamento das transações são alcançados. Usando um problema comum como exemplo, vejamos implementações de transações usando commits de duas fases e transações determinísticas. Vamos discutir suas diferenças.

Qual é o próximo?

O programa da conferência continua repleto de novos relatórios. Em particular, esperamos um relatório da Nikita Koval (ndkoval) da JetBrains e Oleg Anastasyev (m0nstermind) da empresa Odnoklassniki. Nikita trabalha em algoritmos para corrotinas na equipe Kotlin, e Oleg desenvolve arquitetura e soluções para sistemas de alta carga na plataforma Odnoklassniki. Além disso, há mais 1 vaga condicionalmente vazia, o comitê do programa está trabalhando com os candidatos para isso no momento.

A conferência Hydra acontecerá de 11 a 12 de julho em São Petersburgo. Os ingressos estão disponíveis compre no site oficial. Preste atenção à disponibilidade de ingressos on-line - se por algum motivo você não puder chegar a São Petersburgo atualmente.

Nos vemos na Hidra!

Fonte: habr.com

Adicionar um comentário