Prêmio DevProject: Meu discurso na DeveloperWeek 2019

Olá pessoal


Meu nome é Dmitry Golev. Sou o fundador e diretor técnico do Grupo Veliov. Hoje vou falar sobre o serviço que recebeu o prêmio "Dev Project" da DeveloperWeek . Nesta ocasião, fomos convidados a falar sobre o projeto da cena DevExec World , abaixo está uma versão em texto do meu discurso.


ostr.io logo


Como você pode adivinhar no logotipo, estamos focados no desenvolvimento web e JavaScript. O objetivo do serviço é reduzir o custo de manutenção de APIs, sites, aplicativos da web progressivos (PWA) e soluções da web em servidores Linux.


A maioria dos projetos da web começa com um nome de domínio. O nome do domínio possui registros Whois e DNS e, como a era do HTTP / 2 é agora, a comunicação entre o servidor e o navegador do usuário deve ser criptografada e o SSL é necessário para este, ou mais corretamente, um certificado TLS.


Monitoramos continuamente a integridade dos dados do nome de domínio (Whois, DNS, SSL / TLS) e monitoramos a data de validade do certificado e do domínio. As notificações de todas as alterações nos dados e as próximas datas de vencimento de domínios e certificados podem ser entregues via SMS ou mensagens de email.


Acreditamos que este serviço é uma ótima maneira de:


  1. detectar rapidamente acesso não autorizado e alterações;
  2. elimine erros ao configurar um nome de domínio, substituindo um certificado e atualizando registros DNS.

Painel de domínio


O painel de controle de nome de domínio ( acima ), um exemplo de notificações de alterações no DNS, certificado SSL / TLS e Whois ( abaixo ):


Exemplo de notificações de alterações no DNS, certificado SSL / TLS e Whois


As notificações podem ser personalizadas pelos membros da sua equipe de acordo com a área de responsabilidade:


Notificações personalizadas


Chamamos esse serviço de “ proteção básica de nome de domínio ” e o tornamos gratuito para sempre para todos os usuários em todos os planos tarifários. Acreditamos que isso salvará muitos usuários de situações como:


  1. redirecionamento de tráfego;
  2. MitM;
  3. substituição de certificado;
  4. Seqüestro de DNS;
  5. roubo de um nome de domínio e outras situações muito desagradáveis.

Resolvemos o problema do proprietário de um nome de domínio quando não é possível controlar os registros, pois isso deve ser feito com muita frequência, inclusive à noite - isso é simplesmente uma tarefa impossível para uma pessoa.


Posso confiar nos serviços em que o nome de domínio foi comprado? Na maioria dos casos, os serviços DNS não têm notificações de alterações feitas nos registros, e a única notificação dos registradores sobre a expiração de um nome de domínio pode simplesmente cair em spam e passar despercebida. Um editor e distribuidor raro de certificados SSL / TLS envia notificações sobre a necessidade de reemitir o certificado. Concluímos que os registros e o certificado devem ser verificados com frequência e automaticamente. Inicialmente, era um serviço interno que agora está disponível para todos .




Pré-renderização


Pré-renderização (pré-renderização)


O produto de serviço mais popular é a pré-renderização . Se você já teve a sorte de escrever aplicativos da Web em Angular, React, Vue, Blaze ou qualquer outra biblioteca "cliente", poderá observar a diferença entre a resposta do servidor e as páginas cujo código HTML é gerado no servidor. Os aplicativos da Web baseados em bibliotecas "clientes" têm a marcação HTML mínima necessária, sem dados e modelos.


Pacote de cliente


Os aplicativos web modernos dinamicamente ou " progressivamente " obtêm código, modelos e seus dados em partes do servidor. O que será carregado do servidor é decidido pelo próprio "cliente" ( navegador, dispositivo ), dependendo das ações do usuário, da página aberta ( "rota", rota ) e das necessidades funcionais. Hoje chamamos esses aplicativos de Progressive Web App (PWA).


Prós e contras da PWA


Como você pode ver neste slide, os PWAs têm muitas vantagens e uma grande desvantagem - a absoluta falta de otimização de SEO.


Embora a formação de páginas HTML no servidor não seja um pré-requisito para trabalhar no navegador do usuário, as chamadas aranhas e bots (rastreadores, aranhas e bots) não executam o JavaScript da página visitada. Para que seu site apareça nos resultados de pesquisa (Google, Bing, Yandex, etc.), mensageiros instantâneos, redes sociais (Skype, Facebook, Twitter, iMessage, vk.com, etc.) e na maioria dos aplicativos e serviços, onde você pode enviar ou publicar um link - é necessário encontrar uma maneira de transferir o código HTML gerado resultante da execução do JavaScript "cliente".


Integre a pré-renderização em menos de uma hora


Agora, se você se deparar com a pergunta "Como fornecer SEO para um aplicativo com base em uma solução JavaScript do lado do cliente?", Você tem duas maneiras: implementar / integrar o " Server Side Rendering / SSR " investindo mais tempo e recursos no desenvolvimento ou use um serviço de pré-renderização de terceiros.


A pré-renderização é como um SSR, sem escrever código


Como isso funciona? Como proxy, filtramos as solicitações provenientes dos robôs e as redirecionamos para o mecanismo de pré-renderização, onde a página será solicitada e seu JavaScript executado, como seria executado no navegador do usuário.


Como funciona a pré-renderização?


Resultados do aplicativo da web com pré-renderização:


Pré-renderização no messenger
Visualizar links no messenger


Pré-renderização em redes sociais
Visualizar links nas redes sociais


Pré-renderização do mecanismo de pesquisa
Visualização, descrição, metadados e sitelinks nos resultados dos mecanismos de pesquisa


Suporte para ES6 / 7
Somos os primeiros a introduzir o suporte ECMAScript 6/7.


Você pode aprender mais sobre pré-renderização em prerendering.com




Monitorando APIs, sites e servidores


Monitoramento


O segundo produto mais popular do serviço é o Monitoramento de aplicativos Web, APIs e servidores Linux via protocolo SNMP.
Um serviço de monitoramento de terceiros é uma excelente solução, pois você e sua equipe não precisam instalar, atualizar, manter, investir recursos e tempo no desenvolvimento e na "conclusão" do monitoramento.


Linha do tempo da resposta do servidor


Para garantir que seu aplicativo Web esteja funcionando e acessível aos usuários, verificamos o código de resposta, os cabeçalhos, o corpo da resposta e a rapidez com que a resposta foi recebida.


Monitorando para Nginx


O exemplo acima é um exemplo de monitoramento de um nó de extremidade com dados gerados dinamicamente, tudo o que você precisa é retornar XML, JSON ou apenas Number e também é possível configurar notificações, mesmo que os valores sejam muito altos, baixos ou não atendam aos seus critérios.


Painel SNMP


Acima está um exemplo de monitoramento de um servidor Linux via protocolo SNMP. O SNMP é um padrão do setor para a leitura de dados de vários sensores de hardware e do sistema operacional, incluindo servidores Linux, que são usados ​​para atender a aplicativos da web modernos. Para impedir o acesso não autorizado aos seus servidores, o serviço notificará você sobre cada conexão SSH recém-estabelecida.


Notificações de conexão SSH


Saiba mais sobre o serviço de monitoramento em snmp-monitoring.com .




Análise da Web


Análise da Web


O terceiro produto de serviço mais popular é o Web Analytics . Depois que trabalhamos em um aplicativo com muita animação, nossos designers levaram muito tempo para tornar a animação mais suave. Tudo estava bem e concluímos a tarefa, fornecendo animação aceitável em todos os dispositivos e navegadores populares. Mais tarde, o cliente definiu uma pequena tarefa - para adicionar o código de análise. Essa foi uma das soluções populares que coletou muitos dados sobre o usuário, incluindo a posição do cursor e a rolagem da página para compilar um mapa de calor da página. Como o JavaScript tem um ambiente de execução de thread único (Web Workers e Service Workers não contam), e as análises consumiram uma parte significativa dos recursos da CPU para rastrear todas as ações do usuário, isso arruinou todo o nosso trabalho, visando uma animação suave no orçamento e em dispositivos móveis. Então, surgiu a idéia e a primeira implementação de uma análise da Web fácil de entender, em tempo real, confidencial e compatível com GDPR com 100% de código aberto e um procedimento simples de não rastreamento para o usuário final.


Colete e relate todos os erros de JavaScript


Um dos principais recursos da análise da web é a coleta e organização automáticas de um relatório sobre todos os erros do tempo de execução do JavaScript ( erros e exceções de tempo de execução ) em tempo real. Se você está envolvido no desenvolvimento da Web, sabe como é importante testar diferentes combinações de dispositivos e navegadores em versões diferentes, mas cobrir todos os 100% das combinações é simplesmente fisicamente impossível. Nesse exato momento, seus usuários são os proprietários dos dispositivos nos quais é necessário realizar os testes. O Web Analytics coleta automaticamente todos os erros e exceções ( erros, exceções de tempo de execução ) do tempo de execução JavaScript. Cada relatório de erro é acompanhado por uma descrição, arquivo, linha e símbolo no arquivo, rastreamento de pilha (se houver), dispositivo, navegador, SO e suas versões.


Análise da Web compatível com vue.js react.js meteor.js angular.js e outras soluções front-end javascript


Uma lista completa dos produtos disponíveis e informações mais detalhadas estão disponíveis em ostr.io. Todas as novas contas recebem um suprimento único de "empréstimos" ( camada gratuita ), o que possibilita implementar serviços de integração e teste gratuitamente.




A infraestrutura


A infraestrutura


A parte mais interessante é a infraestrutura de serviço. Atualmente, dezessete servidores são necessários para atender às necessidades do serviço. Todos os produtos e suas unidades são implementados como microsserviços e cada microsserviço é hospedado em um servidor físico. Todos os servidores são cópias idênticas um do outro. Antes de cada implantação e alteração no servidor de teste, todo o procedimento é classificado em etapas e executado em um script bash, depois o script é enviado ao GitHub, de onde será recebido e iniciado por outros servidores. Cada servidor contém uma cópia do código do aplicativo, microsserviços, Nginx e MongoDB ( graças às réplicas ). Esse esquema nos permite suportar ataques, sobreviver a testes sem êxito e dar tempo para resolver o problema. O serviço estará disponível para os usuários, mesmo no caso de uma queda para 93% da infraestrutura, é claro que isso pode afetar a velocidade de resposta, mas permite que ele esteja dentro da estrutura do SLA.


Para distribuir uniformemente a carga entre todos os servidores, usamos dois níveis de balanceamento de DNS de rodízio ( no nosso caso, CloudFlare ) e nossos próprios servidores, nos quais o HAProxy está instalado .




josk pacote NPM


Josk


Como você pode ver na descrição acima, temos muitos eventos recorrentes, por exemplo, para monitorar servidores, APIs, Whois, DNS e outros pontos de extremidade, precisamos enviar uma solicitação a eles regularmente e sem interrupções. Para garantir a continuidade das tarefas periódicas, construímos nossa rede descentralizada de muitos servidores, para que sempre saibamos que existe um servidor gratuito para executar tarefas. Assim que as solicitações excederem os recursos atuais, podemos adicionar facilmente o número necessário de novos servidores, graças ao esquema descrito acima, pela simplicidade do dimensionamento horizontal.


Nos estágios iniciais, os recursos de nossos servidores excederam significativamente as necessidades atuais; como resultado, nos encontramos em uma situação em que dois ou mais servidores gratuitos executavam a mesma tarefa em paralelo. Isso ameaçou muito o desenvolvimento, pois o serviço poderia enviar muitas cartas idênticas para um usuário ou enviar dezenas de consultas DNS de nossos endereços IP, o que ameaçou com uma proibição.


Para resolver rapidamente esse problema, criamos um dessincronizador de tarefas, que fornece uma garantia de 95% de que a tarefa atribuída na fila será executada uma vez e em uma unidade de tempo. Posteriormente, publicamos o código do dessincronizador como um pacote NPM e denominamos josk . Se você estiver interessado em olhar sob o capô, aqui está um link para o GitHub .




pacote NPM na hora do correio


hora do correio


O mesmo motivo nos levou a criar mail-time que permite enviar cartas de uma infraestrutura multiservidor. O pacote é escrito com base no josk , organiza as cartas em uma fila e as envia de uma infraestrutura multiservidor. Além da correspondência, o mail-time permite dividir os microsserviços em:


  1. "clients" ( client ), que adicionam apenas letras à fila;
  2. "servidor" ( server ), que cria um microsserviço independente para executar apenas duas tarefas - gerenciar a fila de cartas e sua distribuição.

Este não é o único recurso exclusivo da biblioteca. Para obter detalhes e uma descrição mais detalhada de todos os recursos, leia a documentação .


Infelizmente, no momento, os dois pacotes ( josk e mail-time ) exigem o MongoDB como um banco de dados (DB) para fila e josk . Estamos prontos para desenvolver as duas bibliotecas e discutiremos e adotaremos PR com prazer para adicionar suporte a outros bancos de dados. De nossa parte, o Redis parece um ótimo candidato à integração.


Muito obrigado a todos que leram até o fim. Se você estava interessado - faça perguntas e escreva na LAN e se houver interesse dos leitores, estou pronto para falar sobre a experiência de participar e falar em outros eventos sobre desenvolvimento web, node.js e JavaScript.


Todo mundo que estiver interessado em aprender sobre o ostr.io, usar o serviço, obter um código promocional, desconto ou respostas a perguntas - escreva-me no PM ou nas redes sociais. Suporte ostr.io fala apenas inglês, mas responde muito rapidamente, por exemplo, através do messenger FB .

Source: https://habr.com/ru/post/pt443114/


All Articles