Nos dias 11 e 12 de julho, ocorrerá uma conferência em São Petersburgo , dedicada ao desenvolvimento de sistemas paralelos e distribuídos. A proposta da Hydra é reunir grandes cientistas (que geralmente só podem ser encontrados em conferências científicas internacionais) e engenheiros renomados em uma grande programação na interseção entre ciência e prática.
A Hydra é uma das nossas conferências mais importantes nos últimos anos. Ela foi precedida por uma preparação muito séria, seleção de palestrantes e apresentações. Na semana passada, sobre isso com o diretor da JUG.ru Group, Alexey Fedorov ().
Nós ) sobre três importantes participantes, fundadores da teoria dos sistemas distribuídos — Leslie Lamport, Maurice Herlihy e Michael Scott. É hora de falarmos mais detalhadamente sobre toda a programação!

Motivação
Se você trabalha com programação, certamente lida com concorrência e computação distribuída. Especialistas nas áreas pertinentes trabalham com isso diretamente, mas a distribuição nos observa em toda parte: em qualquer computador multi-core ou serviço distribuído, encontrará algo que realiza cálculos em paralelo.
Existem muitas conferências que exploram aspectos diferentes da programação aplicada. Do outro lado do espectro, temos escolas científicas especiais que, no formato de palestras, exploram enormes volumes de teorias complexas. Por exemplo, paralelamente à Hydra, em São Petersburgo, está ocorrendo . Na conferência Hydra, procuramos reunir tanto a prática rigorosa quanto a ciência, e tudo o que está na interseção delas.
Pense bem: vivemos em uma época surpreendente, onde podemos encontrar ao vivo os fundadores da ciência e engenharia com as quais trabalhamos. Físicos não encontrarão Newton ou Einstein — isso já passou. Mas ao nosso lado ainda vivem aqueles que criaram as bases da teoria dos sistemas distribuídos, inventaram linguagens de programação populares e trouxeram tudo isso à vida em protótipos funcionais. Essas pessoas não abandonaram seu trabalho no meio do caminho, estão atualmente lidando com questões relevantes em universidades e empresas de renome mundial, e são as maiores fontes de conhecimento e experiência hoje.
Por outro lado, a possibilidade de encontrá-los geralmente permanece puramente teórica: poucos de nós podem monitorar constantemente eventos públicos em alguma universidade de Rochester para depois correr para os EUA e voltar a tempo para a aula com Michael Scott. Visitar todos os participantes da Hydra custaria uma pequena fortuna, sem contar a enorme quantidade de tempo desperdiçado (embora isso pareça uma missão interessante).
Por outro lado, temos vários engenheiros de ponta que estão trabalhando ativamente em problemas relevantes de sistemas distribuídos e eles com certeza têm muito a compartilhar. Mas aqui está o problema — eles trabalham, e o tempo deles é precioso. Sim, se você trabalha na Microsoft, Google ou JetBrains, a probabilidade de encontrar um dos conhecidos palestrantes em um evento interno aumenta drasticamente, mas, na verdade — não acontece todo dia.
Assim, a conferência Hydra desempenha uma função importante que a maioria de nós não consegue realizar sozinha — reúne em um só lugar e ao mesmo tempo pessoas cujas ideias ou cujo contato pode mudar a sua vida. Admito que nem todos precisam de sistemas distribuídos, ou de algumas coisas fundamentais complexas. Você pode programar CRUDs em PHP durante toda a vida e ser perfeitamente feliz. Mas para quem precisa — esta é a sua chance.
Desde o primeiro anúncio da conferência Hydra no Habr, já se passou bastante tempo. Durante esse período, um enorme trabalho foi realizado — e aqui estamos, com uma lista de quase todas as palestras. Nada de algoritmos de thread única mornos, apenas pura dureza distribuída! Vamos parar com as palavras genéricas e ver o que temos agora em mãos.
Palestras principais
As palestras principais começam e encerram os dias da conferência. Normalmente, o objetivo da palestra de abertura é definir o espírito e a direção da conferência. A palestra de encerramento resume tudo e explica como devemos viver com o conhecimento e as habilidades adquiridas durante os dias da conferência. O começo e o fim: o que será mais lembrado e, de fato, tem uma importância maior.
Cliff Click —
Cliff é uma lenda no mundo Java. No final dos anos 90, para sua tese de doutorado, ele escreveu um trabalho intitulado , que após algum tempo se tornou a base para o HotSpot JVM Server Compiler. Dois anos depois, ele já trabalhava na Sun Microsystems com a JVM e mostrava ao mundo que o JIT tinha razão de existir. Toda essa história de que Java é um dos ambientes de execução mais rápidos da atualidade com as otimizações mais inteligentes e rápidas começou exatamente com Cliff Click. No início, acreditava-se que se algo estava disponível para um compilador estático, não havia nem motivo para tentar jitá-lo. Graças ao trabalho de Cliff e sua equipe, todas as novas linguagens começaram a ser criadas com a ideia de JIT-compilação por padrão. Com certeza, foi um trabalho que não poderia ser realizado por uma única pessoa, mas Cliff desempenhou um papel muito importante nisso.
Na palestra de abertura, Cliff falará sobre outro de seus projetos — , uma plataforma em memória para aprendizado de máquina distribuído e escalável para aplicações industriais. Mais especificamente — sobre o armazenamento distribuído de pares "chave-valor" dentro dele. Este é um armazenamento muito rápido com uma série de propriedades interessantes (a lista completa está em ), que permitem a utilização de soluções semelhantes na matemática do streaming de grandes dados.
Outra apresentação com a qual Cliff irá contribuir — . Outra parte de sua biografia — dez anos , onde ele atualizou e melhorou muitas coisas no hardware e na pilha tecnológica da Azul: compiladores JIT, ambiente de execução, modelo de threads, tratamento de erros, manipulação de pilhas, interrupções de hardware, carregamento de classes e assim por diante — bem, você entendeu.
A parte mais interessante começou quando eles fizeram hardware para grandes empresas — um supercomputador para executar Java. Foi uma coisa bastante inovadora, feita especialmente para Java, que tem requisitos especiais — barreiras de memória para leitura para coleta de lixo de baixa pausa, arrays com verificação de limites, chamadas virtuais... Uma das tecnologias mais impressionantes — memória transacional de hardware. Todo o L1 de cada um dos 864 núcleos podia participar de uma gravação transacional, o que é especialmente importante para lidar com bloqueios em Java (blocos synchronized podem operar em paralelo, até que haja um verdadeiro conflito de memória). Mas a solução bela se chocou com a dura realidade — e nesta palestra Cliff irá explicar por que HTM e STM não se adequam muito bem às necessidades práticas de computação multithread.
Michael Scott —
— professor de Ciência da Computação na Universidade de Rochester, que está ligado ao seu destino , e em sua universidade natal, Wisconsin–Madison, foi reitor durante cinco anos. Ele realiza pesquisas na área de programação paralela e distribuída, bem como na design de linguagens, treinando estudantes nessa área.
O mundo inteiro conhece Michael por seu livro didático , cuja última edição foi publicada relativamente recentemente — em 2015. Seu trabalho recebeu como um dos mais renomados na área de computação distribuída e na biblioteca online da Universidade de Rochester. Você também pode conhecê-lo como o autor do famoso algoritmo de Michael-Scott em .
No mundo Java, a situação é especial: junto com Doug Lea, ele desenvolveu aqueles algoritmos não bloqueantes e filas síncronas, que são a base das bibliotecas Java. Isso é o que abordará a apresentação principal «Dual data structures» — a implementação dessas estruturas no Java SE 6 permitiu melhorar a performance em 10 vezes java.util.concurrent.ThreadPoolExecutor. Se você já está curioso sobre o que são essas «Dual data structures», existe um .
Maurice Herlihy —
— detentor de dois prêmios Dijkstra. O primeiro — por seu trabalho em (Universidade Brown), e o segundo, mais recente — (Universidade Virginia Tech). O Prêmio Dijkstra é concedido por trabalhos cuja importância e impacto foram notáveis por pelo menos dez anos, e é evidente que Maurice é um dos especialistas mais reconhecidos na área. Atualmente, ele é professor na Universidade Brown e possui muitos feitos que dariam um parágrafo extenso.
Na apresentação principal de encerramento, Maurice falará sobre a teoria e a prática de sistemas distribuídos em blockchain do ponto de vista dos clássicos da computação distribuída e como isso simplifica muitos problemas relacionados. Este é um discurso estritamente sobre o tema da conferência — nada sobre o hype da mineração, mas sim sobre como nosso conhecimento pode ser incrivelmente eficiente e pertinente em várias tarefas.
Em julho de 2017, Maurice já esteve na Rússia para a escola SPTDC, participou de um meetup JUG.ru, e a gravação pode ser vista no YouTube:

Programa principal
A seguir, uma breve visão geral das palestras que fazem parte do programa. Algumas palestras estão descritas detalhadamente, enquanto outras — de forma mais concisa. As descrições mais longas ficaram, principalmente, para as palestras em inglês, que requerem referências a trabalhos científicos, termos na Wikipédia, e assim por diante. A lista completa pode . A lista no site será atualizada e complementada.
Leslie Lamport —
Leslie Lamport é autor de obras fundamentais em computação distribuída. significa «Lamport TeX». Foi ele quem, pela primeira vez em 1979, introduziu o conceito , e seu artigo recebeu o prêmio Dijkstra.
Esta é a parte mais incomum do programa, pois não se trata nem mesmo de uma palestra, mas de uma sessão de perguntas e respostas. Quando uma parte significativa da audiência já está familiarizada (ou pode se familiarizar) com os vários trabalhos baseados na "teoria de Lamport", seus próprios artigos e palestras, é crucial gastar todo o tempo disponível em comunicação direta.
A ideia é simples — você assiste a dois vídeos no YouTube: e e prepara pelo menos uma pergunta, enquanto Leslie responde.
Já transformamos o primeiro desses dois vídeos em um artigo para o hub Nota: No YouTube há muito mais vídeos com Leslie Lamport. Por exemplo, há um excelente
. A versão off-line de todo esse curso está na página inicial do autor Martin Kleppmann —
Sincronizando dados entre dispositivos dos usuários para colaboração distribuída
«Designing Data-Intensive Applications» disse uma vez : «Este livro deve ser obrigatório para engenheiros de desenvolvimento. É um recurso raro que une teoria e prática, ajudando os desenvolvedores a projetar e implementar de forma mais inteligente a infraestrutura e os sistemas de processamento de dados». Algo semelhante foi dito pelo criador do Kafka e CTO da Confluent, Jay Kreps.
Antes de se dedicar à pesquisa acadêmica, Martin trabalhou na indústria e co-fundou duas startups de sucesso:
- Rapportive, que se dedicava a exibir o perfil social de contatos a partir do seu e-mail, foi adquirida pelo LinkedIn em 2012;
- Go Test It, um serviço para teste automático de websites em diferentes navegadores, que foi adquirido pela RedGate em 2009.
Em geral, Martin, embora menos conhecido que nossos palestrantes principais, já conseguiu contribuir para o desenvolvimento da computação distribuída e da indústria.
Nesta palestra, Martin falará sobre um tema mais próximo de suas pesquisas acadêmicas. No Google Docs e em softwares semelhantes para edição colaborativa de documentos, 'edição colaborativa' se refere à tarefa de replicação: cada usuário possui sua própria réplica do documento compartilhado, que depois é modificada, e todas as alterações são disseminadas pela rede para os outros participantes. Mudanças em documentos offline levam a uma inconsistência temporária do documento em relação aos outros participantes, e a re-sincronização requer tratamento de conflitos. É justamente para isso que existem (CRDT), que é, em essência, uma coisa relativamente nova, cuja essência foi formulada apenas em 2011. Esta palestra discute o que aconteceu desde então no mundo dos CRDT, quais são as conquistas mais recentes, o enfoque na criação de aplicativos com prioridade para o local e o uso da biblioteca de código aberto em particular.
Na próxima semana, publicaremos uma grande entrevista com Martin no Habr, será interessante.
Pedro Ramalhete —
Pedro trabalha na Cisco e desenvolve algoritmos paralelos há cerca de dez anos, incluindo mecanismos de sincronização, estruturas de dados sem bloqueio e sem espera, e tudo que você pode imaginar sobre o tema. Seus interesses acadêmicos e de engenharia atuais estão focados em Construções Universais, Memória Transacional de Software, Memória Persistente e tecnologias semelhantes que permitem a implementação de aplicações corretas, escaláveis e tolerantes a falhas. Além disso, ele é autor de um blog amplamente conhecido em círculos restritos .
Nas estruturas de dados paralelas, a maioria das aplicações multithread atualmente opera, desde o uso de filas de mensagens entre atores até estruturas de dados indexadas em armazenamentos de chave-valor. No Java JDK, elas funcionam com sucesso há muitos anos, e no C++ estão sendo incorporadas gradualmente.
A maneira mais simples de implementar uma estrutura de dados paralela é por meio de uma implementação sequencial (monothread), onde os métodos são protegidos por mutexes. Isso está ao alcance de qualquer iniciante, mas apresenta problemas evidentes de escalabilidade e desempenho. Ao mesmo tempo, estruturas de dados lock-free e wait-free não apenas lidam melhor com erros, mas também têm um perfil de desempenho mais favorável — no entanto, o desenvolvimento delas requer uma profunda especialização e adaptação ao uso específico. Uma única linha de código incorreta pode quebrar tudo.
Como garantir que mesmo um não especialista consiga projetar e implementar essas estruturas de dados? Sabe-se que qualquer algoritmo sequencial pode ser tornado seguro para threads através de , ou memória transacional. Ambos podem reduzir a barreira de entrada para resolver essa tarefa. Contudo, as duas soluções geralmente levam a implementações ineficazes. Pedro falará sobre como conseguiram tornar essas construções mais eficientes e como podem ser utilizadas em seus algoritmos.
Heidi Howard —
Heidi Howard — assim como Martin, é pesquisadora em sistemas distribuídos na Universidade de Cambridge. Sua especialização abrange consistência, tolerância a falhas, desempenho e consenso distribuído. Ela é mais conhecida por generalizar o algoritmo Paxos chamado .
Lembramos que — uma família de protocolos para resolver o problema de consenso em redes de computadores não confiáveis, baseando-se no trabalho de Leslie Lamport. Assim, alguns de nossos palestrantes estão trabalhando em problemas inicialmente propostos por outros de nossos palestrantes — e isso é maravilhoso.
A capacidade de encontrar consenso entre vários hosts — para endereçamento, escolha de líder, bloqueio ou coordenação — é uma questão fundamental dos sistemas distribuídos modernos. Atualmente, o Paxos é o principal método para resolver problemas de consenso, e muitas pesquisas são realizadas em torno dele para expandir e otimizar o algoritmo para diferentes necessidades práticas.
Neste artigo, revisaremos a base teórica do Paxos, suavizando os requisitos iniciais e generalizando o algoritmo. Veremos que o Paxos é, na verdade, apenas uma das opções em um vasto espectro de abordagens para o consenso, e que outros pontos do espectro também são bastante úteis para construir bons sistemas distribuídos.
Alex Petrov —
Alex é especialista em bancos de dados e sistemas de armazenamento, e o que é mais importante para nós — comitente em . Juntamente com a O'Reilly, ele está trabalhando atualmente no livro Database Internals.
Para sistemas com (em terminologia de língua russa — "consistência em última instância"), após a falha de um nó ou separação de rede, é necessário resolver o seguinte dilema: continuar processando requisições, sacrificando a consistência, ou recusar seu processamento e sacrificar a disponibilidade. Em tal sistema, quoruns, subconjuntos sobrepostos de nós que garantem que pelo menos um nó conterá o valor mais recente, podem se tornar uma boa solução de limite. É possível suportar falhas e perda de conexão com certos nós, continuando a responder com os valores mais recentes.
No entanto, tudo tem seu preço. O esquema de replicação baseado em quorum implica um aumento nos custos de armazenamento: é necessário manter dados redundantes em vários nós simultaneamente para garantir uma quantidade suficiente de cópias disponíveis no momento em que o problema ocorrer. Descobre-se que não é necessário armazenar todos os dados em todas as réplicas. É possível reduzir a carga no armazenamento, mantendo dados apenas em parte dos nós e utilizando nós especiais (Replica Transitória) para cenários de tratamento de falhas.
Ao longo do artigo, examinaremos , um esquema de replicação utilizado em e , e a implementação deste conceito no Apache Cassandra sob os nomes de .
Dmitry Vyukov —
Dmitri é um desenvolvedor no Google, trabalhando com testes dinâmicos em C/C++ e Go — Address/Memory/ThreadSanitizer, e em ferramentas semelhantes para o núcleo do Linux. Contribuiu para o Go com um planejador escalável de goroutines, um poller de rede e um coletor de lixo paralelo. É especialista em multithreading, autor de uma dúzia de novos algoritmos não bloqueantes e detentor. Intel.
Agora um pouco sobre a palestra. A linguagem Go possui suporte nativo para multithreading na forma de goroutines (threads leves) e canais (filas FIFO). Graças a esses mecanismos, é muito fácil e agradável para os usuários escrever aplicativos multithread modernos, e isso parece mágica. Como sabemos, não há mágica aqui. Nesta palestra, Dmitri se aprofundará nas nuances do funcionamento do planejador do Go e mostrará os segredos da implementação dessa "mágica". Primeiro, ele dará uma visão geral dos principais componentes do planejador e explicará como funciona. Em seguida, nos familiarizaremos mais com aspectos individuais, como estratégias de estacionamento/desestacionamento e o tratamento de chamadas de sistema bloqueantes. Por fim, Dmitri falará um pouco sobre possíveis melhorias no planejador.
Dmitri Bugaychenko —
Dmitri trabalhou quase 9 anos em outsourcing, mantendo contato com a universidade e o meio acadêmico. A análise de grandes dados na Odnoklassniki proporcionou a ele uma oportunidade única de unir formação teórica e base científica com o desenvolvimento de produtos reais e demandados.
A análise distribuída de grafos tem sido e continua sendo um desafio complexo: quando há necessidade de obter informações sobre as relações de um vértice vizinho, os dados frequentemente precisam ser transferidos entre máquinas, o que leva ao aumento do tempo de execução e à carga na infraestrutura de rede. Nesta palestra, veremos como é possível obter um aumento significativo na eficiência do processamento, utilizando estruturas de dados probabilísticas ou fatos como a simetria do grafo de amizade em redes sociais. Tudo isso é ilustrado com exemplos de código em Apache Spark.
Denis Ryscov —
Denis é um desenvolvedor , especialista em verificação de modelos de consistência, em algoritmos de consenso e em transações distribuídas. Atualmente, trabalha na Microsoft, tendo antes atuado em sistemas distribuídos na Amazon e no Yandex.
Nesta apresentação, vamos explorar os protocolos de transações distribuídas desenvolvidos nos últimos anos, que podem ser implementados no lado do cliente sobre qualquer armazenamento de dados que suporte atualização condicional (compare and set). O ponto é que a vida não termina com o commit de duas fases; transações podem ser adicionadas sobre quaisquer bancos de dados — no nível do aplicativo, mas diferentes protocolos (2PC, Percolator, RAMP) têm diferentes trade-offs e não são proporcionados gratuitamente.
Aleksei Zinovyev —
Aleksei () — nosso antigo palestrante e membro de comitês de programa em outras conferências. Treinador ativo na EPAM Systems, e trabalha com Hadoop/Spark e outras tecnologias de big data desde 2012.
Nesta apresentação, Aleksei discutirá 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 com Apache Spark ML, Apache Mahout, Apache Flink ML e na criação do Apache Ignite ML. Aleksei também falará sobre a implementação de algoritmos de ML distribuídos nesses frameworks.
E para concluir — duas palestras da Yandex sobre o Yandex Database.
Vladislav Kuznetsov —
Vladislav é desenvolvedor no Yandex no grupo de plataforma distribuída. O Yandex Database é um SGBD geograficamente distribuído e escalável horizontalmente, resistente a falhas de discos, servidores, racks e datacenters sem violar a consistência. Para garantir a resistência a falhas, é aplicado um algoritmo próprio para alcançar consenso distribuído, além de várias soluções técnicas que são detalhadas na apresentação. Esta apresentação pode ser interessante tanto para desenvolvedores de SGBDs quanto para desenvolvedores de soluções aplicacionais baseadas em SGBDs.
Semyon Checherynda —
Semyon é desenvolvedor no grupo de plataforma distribuída no Yandex, e trabalha na possibilidade de uso multi-inquilino da instalação do YDB.
O Yandex Database é projetado para consultas OLTP e atende aos requisitos ACID de sistemas transacionais. Este relatório abordará o algoritmo de planejamento de transações que está na base do sistema de transações YDB. Analisaremos quais entidades estão envolvidas nas transações, quem atribui a ordem global às transações, como a atomicidade, confiabilidade e um nível rigoroso de isolamento são alcançados. Por meio de um exemplo comum, discutiremos implementações de transações utilizando commit em duas fases e transações determinísticas. Abordaremos suas diferenças.
E agora?
O programa da conferência continua a ser preenchido com novas apresentações. Especificamente, aguardamos uma apresentação de Nikita Koval () da JetBrains e Oleg Anastasyev () da empresa Odnoklassniki. Nikita trabalha com algoritmos para corrotinas na equipe Kotlin, enquanto Oleg desenvolve a arquitetura e soluções para sistemas de alta carga na plataforma da Odnoklassniki. Além disso, há mais 1 slot condicionalmente vazio, com candidatos com os quais o comitê programador está trabalhando agora.
A conferência Hydra ocorrerá nos dias 11 e 12 de julho em São Petersburgo. Os ingressos podem ser . Ressaltamos a disponibilidade de ingressos online — caso você, por algum motivo, não possa chegar a São Petersburgo pessoalmente nesses dias.
Nos encontramos na Hydra!
Fonte: habr.com
