Olá, cidadãos de Habrovsk! Neste post, queremos compartilhar nossas impressões da conferência para desenvolvedores de Java do
Joker 2018 , qual do que ouvimos foi a mais memorável.
Esperamos que isso ajude você a navegar pelo vídeo da conferência quando ele aparecer em domínio público. Enquanto isso, adicionamos links para apresentações sempre que possível.

1º dia
Não se afaste da complexidade, corra - Venkat Subramaniam
Ágil é a capacidade de se adaptar às mudanças. O uso eficaz do Agile é impedido por nossa própria complexidade de sistema criada.
O relatório da Venkat contém uma lista de questões que complicam o sistema do palestrante e conselhos gerais sobre desenvolvimento de software. É improvável que este relatório seja uma revelação, mas mesmo coisas óbvias precisam ser conhecidas; às vezes é útil atualizá-las na memória e no uso.
Como tornamos os sistemas complexos:
- Peças móveis
Faça uma configuração desnecessária, crie componentes não utilizados, crie muitas camadas etc. - Código ilegível
"Este código funciona, mas parece que não deveria." Difícil ler o código leva à invisibilidade das alterações. Mudanças opacas geram bugs e interferem na compreensão do que está acontecendo com o objeto. - Muitas dependências
As dependências tornam-se rapidamente incompatíveis, quanto mais existem, mais difícil é gerenciá-las. - Paixão imprudente por introduzir novas tecnologias
Tente responder suas perguntas:
- Qual o preço da introdução de uma nova tecnologia?
- Quão fácil será abandonar a tecnologia selecionada?
- Uma biblioteca ou estrutura? Você usa a biblioteca e a estrutura "envolve". É muito mais fácil recusar uma biblioteca do que uma estrutura. Portanto, a decisão de usar a estrutura precisa ser tomada com mais cuidado. Se será fácil retornar à abordagem antiga e se pudermos provar isso, precisamos adotá-la. Não faça o download do que realmente não precisa.
- Desenvolvimento orientado a currículo. - Dificuldade aleatória
Por exemplo, multithreading de baixo nível. Se você resolveu o problema com o conjunto de encadeamentos, agora você tem o conjunto de problemas.
Cascatas de transação ou como construir uma arquitetura de microsserviço transacional - Harald Wendel ( apresentação )
Harald contou como o projeto resolveu o problema de organizar transações distribuídas, removendo as transações e substituindo-as pela State Machine. Para manter a consistência entre os microsserviços, eles devem implementar o suporte a condições, incluindo deficiências, e responder às suas mudanças. O projeto usa o Kafka para se comunicar entre os serviços.
De fato, o relatório tem uma idéia - abandonar as transações ao mudar para um sistema distribuído.
Como a operação anterior da transação funciona:
- Ainda é transacional, mas apenas uma operação comercial (condicionalmente uma) é confirmada no banco de dados. Outros na transação salvam um banco de dados para o Kafka.
- Além disso, como parte da transação, obtemos uma nova transação comercial do Estado. Este é um estado independente totalmente correto.
- Um manipulador especial lê a base: pesquisa ou confirmação do gancho na entidade, se o manipulador estiver no mesmo local que a entidade. Em seguida, envia uma mensagem para Kafka.
- Os assinantes do Kafka processam mensagens. Aqui, o mecanismo de garantia de entrega padrão é útil para nós. As mensagens estão em Kafka na hora certa e um dia serão processadas pelo serviço.
- Durante o processamento, os assinantes podem confirmar seus bancos de dados e alterar seu estado. Nesse caso, os serviços trocam de estado.
- Transação de negócios de reversão no. E há três opções para lidar com problemas:
- Até o final, aguarde o processamento correto da mensagem do Kafka.
- Se ocorrer um erro (e o número necessário de repetições), o estado "errado" correspondente será convertido.
- Envie uma mensagem para Kafka para ser processada pelo iniciador da transação comercial (e outros participantes), a fim de executar etapas para reverter suas transações locais.
Memória de processo Java nas prateleiras - Andrey Panguin
O relatório de Andrey pode ser usado como referência e instruções sobre problemas de depuração com vazamento de memória nativa pelo exemplo de memória não heap.
O relatório é útil para entender quem e o que consome memória. Andrei mostra ferramentas para analisar a memória, incluindo o AsyncProfiler, que está embutido no Idea: "O próximo IntelliJ IDEA 2018.3 integra um perfilador de amostragem de baixo overhead que pode criar perfil de JVM e código nativo - perfil de Async".
Recomendamos que todos os assistam e executem seus módulos e microsserviços nas mesmas etapas.
Correspondência de padrões e seus amigos imaginários - Tagir Valeev
Tagir fala sobre as possibilidades das linguagens de programação: o que, como, quando e com que muletas podem aparecer em Java, que problemas os desenvolvedores e a comunidade da linguagem precisam resolver para isso. Há pouca aplicabilidade prática óbvia, mas pode ser útil a longo prazo.
Aventuras do senor Holmes e Junior Watson no mundo do desenvolvimento de software [Joker Edition] - Evgeny Borisov e Baruch Sadogursky ( apresentação )
O resumo do relatório já era intrigante. Holmes e Watson prometeram resolver vários quebra-cabeças do desenvolvimento diário: ferramentas, bibliotecas e estruturas que perplexam os desenvolvedores comuns em sua rotina diária.
Observamos os pontos mais úteis da história:
- No Spring 5, você pode adicionar compartimentos e outros itens de primavera em um arquivo groovy externo. I.e. não há necessidade de reconstruir, basta reiniciar, por exemplo, para adicionar o BeanPostProcessor.
- Você precisa se lembrar do nome do feijão. Por exemplo, você não pode criar um bean ConversionService, porque isso já está no intestino da primavera.
- Você precisa se lembrar dos padrões. Por exemplo, multipartes é permitido apenas para postagem, e o Spring está assistindo.
- Precisa ler a documentação. Vamos explicar usando o exemplo de um útero. AllArgsConstructor inclui a anotação java.beans.ConstructorProperties para o construtor. Além disso, se não houver anotação, Jacson usa o construtor e getters padrão, porque nomes de parâmetros do construtor não são salvos após a compilação. Se houver uma anotação, os nomes dos parâmetros serão indicados nela (de acordo com a convenção do java beans) e Jacson usará o construtor .. A anotação do Lombok SneakyThrows altera as exceções marcadas para as exceções não verificadas.
- O relatório também levantou uma questão interessante: "Precisamos de exceções verificadas em princípio?" Nós pensamos.
Dia 2
Hardcore reativo: como criar seu editor <?> - Oleg Dokuka
Podemos dizer que esta é uma introdução à programação reativa: o relatório descreve conceitos e abstrações básicas. Oleg mostra toda a evolução do nosso raciocínio, o que nos leva a implementar o Publisher a partir da biblioteca padrão do Reactive Streams. Aconselhamos que você procure para entender de onde as pernas crescem.
Aprendizado de máquina em Java do nada à produção em uma hora - Derek Ferguson ( apresentação )
Você pode ouvi-lo se estudar o Machine Learning. Embora não esteja muito claro para quem o relatório foi destinado. Se as pessoas entendem, então para elas não é mais interessante. Se eles não entenderem, esse relatório não será resolvido; há muito pouca informação para entender.
A principal mensagem é: você pode usar o Google TensorFlow para treinar modelos a partir de Java, mas o suporte ao treinamento é limitado. Mas você pode usar modelos treinados. Por exemplo, carregue um modelo treinado em um microsserviço TensorFlow e envie solicitações do Java ou outro microsserviço para obter uma resposta. Por exemplo, reconheça uma imagem, conte por sintomas, que tipo de doença ...
A equipe do TensorFlow também possui uma imagem do Docker com o TensorFlow, que pode ser usada para carregar modelos lá e enviar solicitações para o uso desses modelos. Doce!
Micronaut vs Spring Boot, ou quem é o menor aqui? - Kirill Tolkachev e Maxim Gorelikov
Cyril e Maxim compararam as estruturas modernas em termos de velocidade de inicialização, quantidade de memória necessária para executar e complexidade de codificação.
Um fato chamou nossa atenção: o Micronaut implementa DI no tempo de compilação e Spring no tempo de execução / execução. Isso permite que o Micronaut inicie mais rapidamente. Mas até que a versão de lançamento do Micronaut seja lançada, é preciso ter uma palavra.
Distribuidor reativo ok.ru/music - Vadim Tsesko ( apresentação )
Vadim Tsesko fala sobre a arquitetura do distribuidor de música em Odnoklassniki. O relatório contém uma descrição dos servidores e suas funções, uma descrição do balanceamento e como a tolerância a falhas e a alta disponibilidade são fornecidas. Separadamente - sobre a abordagem reativa em um caso real sem detalhes técnicos especiais. OK mostrou um exemplo prático de uso de uma abordagem reativa.
São apresentados vários conceitos, práticas recomendadas e arquitetura para obter um serviço tolerante a falhas devido ao balanceamento e replicação e outros truques para armazenar dados em cache para entrega rápida de dados ao usuário. Como sempre, na apresentação, a OK possui vários links para um estudo mais aprofundado do tópico no slide.
Primavera Reativa - Josh Long
O relatório para o qual estávamos viajando :) Na verdade não, mas Josh Long é uma das duas grandes estrelas da conferência. Seu relatório é legal, combina humor e tecnologia.
O que chamamos de relatório na prática foi uma sessão de codificação ao vivo sobre a criação de microsserviços reativos usando o Spring WebFlux. Ele fornece uma compreensão geral do que é a API Reativa, oferece um exemplo de uso no Spring 5 e o bônus é uma apresentação divertida. Houve também um exemplo com o Proxy Reativo como uma alternativa ao Zuul. Aconselhamos a todos a olhar.
O mundo finalmente se tornou reativo. Ou a impressão geral dos relatórios do Coringa
Havia muitos relatórios sobre isso e discutimos ainda mais nas áreas de discussão. De fato, a grande questão é se o mundo se tornou reativo ou se já faz tanto tempo, mas agora eles criaram um novo nome para os velhos padrões e derramaram sangue novo neles.
Entre os relatórios sobre reatividade estavam todos os gostos: e puramente técnico, por exemplo, Josh Long, que contou como fazer a reatividade na primavera. E casos reais de uso de reatividade - por exemplo, Vadim Tsesko, da Classmates.
Nossa principal tecnologia é a Spring, por isso consideramos o relatório Josh Long um item obrigatório. (
Link para o repositório do relatório ). Há um exemplo de um serviço reativo que reage com o Mongo e um serviço reativo que proxies reativamente outro serviço reativo. Foi muito útil para descobrirmos.