19 cabeças da hidra. Grande visão geral do programa

Nos dias 11 e 12 de julho, ocorrerá uma conferência em São Petersburgo Hydra, 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 saiu uma entrevista no Habrahabr com o diretor da JUG.ru Group, Alexey Fedorov (23derevo).

Nós já comentamos ) 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!

19 cabeças da hidra. Grande visão geral do programa

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 a escola SPTDC. 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 — O algoritmo H2O K/V distribuído

19 cabeças da hidra. Grande visão geral do programa Cliff é uma lenda no mundo Java. No final dos anos 90, para sua tese de doutorado, ele escreveu um trabalho intitulado «Combining Analyses, Combining Optimizations», 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 — H20, 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 descrição), 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 — A experiência de memória transacional de hardware da Azul. Outra parte de sua biografia — dez anos de trabalho na Azul, 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 — Estruturas de dados duais

19 cabeças da hidra. Grande visão geral do programa Michael Scott — professor de Ciência da Computação na Universidade de Rochester, que está ligado ao seu destino há 34 anos, 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 «Programming Language Pragmatics», cuja última edição foi publicada relativamente recentemente — em 2015. Seu trabalho «Algorithms for scalable synchronization on shared-memory multiprocessors» recebeu recebeu o prêmio Dijkstra como um dos mais renomados na área de computação distribuída e está disponível na biblioteca online da Universidade de Rochester. Você também pode conhecê-lo como o autor do famoso algoritmo de Michael-Scott em «Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms».

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 trabalho correspondente.

Maurice Herlihy — Blockchains and the future of distributed computing

19 cabeças da hidra. Grande visão geral do programa Maurice Hérlihy — detentor de dois prêmios Dijkstra. O primeiro — por seu trabalho em «Wait-Free Synchronization» (Universidade Brown), e o segundo, mais recente — «Transactional Memory: Architectural Support for Lock-Free Data Structures» (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:

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

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 ser vista no site da conferência. A lista no site será atualizada e complementada.

Leslie Lamport — Perguntas e Respostas

19 cabeças da hidra. Grande visão geral do programa Leslie Lamport é autor de obras fundamentais em computação distribuída. «LaTeX» significa «Lamport TeX». Foi ele quem, pela primeira vez em 1979, introduziu o conceito consistência sequencial, e seu artigo "How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs" 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: «A Programação Deve Ser Mais Que Codificação» e «Se Você Não Está Escrevendo um Programa, Não Use Uma Linguagem de Programação» e prepara pelo menos uma pergunta, enquanto Leslie responde.

Já transformamos o primeiro desses dois vídeos em um artigo para o hub . Se você não tem uma hora para assistir ao vídeo, pode rapidamente ler tudo isso em forma de texto.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 curso sobre TLA+página inicial do autor , e no YouTube ele disponibilizou para uma visualização mais conveniente em dispositivos móveis.Martin Kleppmann —

Sincronizando dados entre dispositivos dos usuários para colaboração distribuída Martin Kleppmann é pesquisador na Universidade de Cambridge, trabalhando em CRDT e verificação formal de algoritmos. O livro de Martin

19 cabeças da hidra. Grande visão geral do programa «Designing Data-Intensive Applications» , publicado em 2017, foi muito sucessoso e entrou nas listas de bestsellers na área de armazenamento e processamento de dados. Kevin Scott, CTO na Microsoft,disse uma vez : «Este livro deve ser obrigatório para engenheiros desenvolvedores. É um recurso raro que une teoria e prática, ajudando desenvolvedores a projetar e implementar de forma mais inteligente a infraestrutura e os sistemas de processamento de dados». Algo semelhante foi dito também pelo criador do Kafka e CTO da Confluent, Jay Kreps.: «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 Tipos de Dados Replicados Sem Conflito (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 Automerge em particular.

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

Pedro Ramalhete — Estruturas de Dados Sem Espera e Transações Sem Espera

19 cabeças da hidra. Grande visão geral do programa 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 Concurrency Freaks.

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 uma construção universal, 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 — Liberando consenso distribuído

19 cabeças da hidra. Grande visão geral do programa 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 Paxos Flexível.

Lembramos que Paxos — 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 — Reduza seus custos de armazenamento com Replicação Transitória e Quorum Barato

19 cabeças da hidra. Grande visão geral do programa Alex é especialista em bancos de dados e sistemas de armazenamento, e o que é mais importante para nós — comitente em Cassandra. Juntamente com a O'Reilly, ele está trabalhando atualmente no livro Database Internals.

Para sistemas com consistência eventual (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 Réplicas Testemunhas, um esquema de replicação utilizado em Spanner e Megastore, e a implementação deste conceito no Apache Cassandra sob os nomes de Replicação Transitória & Quoruns Baratos.

Dmitry Vyukov — Goroutines expostas

19 cabeças da hidra. Grande visão geral do programa 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. Cinturão Preto 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 — Acelerando a análise distribuída de grafos com esboços probabilísticos e não só

19 cabeças da hidra. Grande visão geral do programa 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 — Reduza seus custos de armazenamento com Replicação Transitória e Quorum Barato

19 cabeças da hidra. Grande visão geral do programa Denis é um desenvolvedor Cosmos DB, 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 — Nem todos os algoritmos de ML chegam ao paraíso distribuído

19 cabeças da hidra. Grande visão geral do programa Aleksei (zaleslaw) — 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 — Yandex Database — como garantimos a resistência a falhas

19 cabeças da hidra. Grande visão geral do programa 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 — Transações distribuídas no YDB

19 cabeças da hidra. Grande visão geral do programa 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 (ndkoval) da JetBrains e Oleg Anastasyev (m0nstermind) 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 para compra no site oficial. 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

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster