ISPsystem, desculpe e adeus! Por que e como escrevemos nosso painel de controle de servidores.

ISPsystem, desculpe e adeus! Por que e como escrevemos nosso painel de controle de servidores.

Olá! Nós somos a "Tecnologia de Hospedagem" e há 5 anos lançamos VDSina — a primeira hospedagem vds criada especialmente para desenvolvedores. Estamos empenhados em torná-la tão conveniente quanto a DigitalOcean, mas com suporte em russo, opções de pagamento e servidores na Rússia. Contudo, a DigitalOcean não é apenas confiabilidade e preço, mas também um excelente serviço.

O software da ISPsystem se tornou a corda que nos amarrava no caminho para um excelente serviço. Há três anos, utilizamos a fatura Billmanager e o painel de controle de servidores VMmanager e rapidamente percebemos que oferecer um bom serviço sem nosso próprio painel é praticamente impossível.

Como a ISPsystem prejudicava a conveniência

Erros

Não podíamos consertar erros por conta própria — sempre precisávamos entrar em contato com um suporte externo e esperar. A resolução de qualquer problema exigia a reação de uma empresa terceirizada.

O suporte da ISPsystem respondia de forma adequada, mas as correções chegavam apenas em algumas versões posteriores, e nem sempre eram todas. Às vezes, erros críticos eram corrigidos após várias semanas. Tínhamos que tranquilizar os clientes, pedir desculpas e esperar até que a ISPsystem resolvesse o problema.

A ameaça de interrupções

Atualizações poderiam gerar interrupções imprevisíveis, que provocavam novos erros.

Cada atualização era uma loteria: precisávamos suspender a faturação e sacrificar aos deuses das atualizações — algumas vezes uma atualização causava uma interrupção de 10 a 15 minutos. Nossos administradores ficavam tensos, pois nunca sabíamos quanto tempo duraria a interrupção e não podíamos prever quando a ISPsystem decidiria lançar uma nova atualização.

Na quinta geração do Billmanager melhorou um pouco, mas para acessar as funcionalidades necessárias, tivemos que instalar a versão beta, que já estava sendo atualizada toda semana. Se algo quebrasse, tínhamos que dar acesso a desenvolvedores externos para que eles fizessem correções.

Interface do painel inconveniente

Tudo estava dividido em diferentes painéis e gerenciado de locais distintos. Por exemplo, os clientes pagavam através do Billmanager, mas precisavam reiniciar ou reinstalar o VDS no VMManager. Nossos funcionários também tinham que alternar entre janelas para ajudar o cliente, verificar a carga em seu servidor ou ver qual sistema operacional estava utilizando.

Esse tipo de interface consome tempo — tanto nosso quanto dos clientes. Não há como falar em conveniência, como na DigitalOcean, sob tais circunstâncias.

Ciclos curtos com atualizações frequentes de API

Escrevemos nossos próprios plugins — por exemplo, um plugin com métodos de pagamento adicionais que não estão no VMManager.

Nos últimos anos, o VMManager teve um ciclo de vida relativamente curto, e em novas versões, os nomes das variáveis ou funções na API podiam mudar arbitrariamente — isso quebrou nossos plugins. O suporte para versões antigas foi rapidamente encerrado e tivemos que nos atualizar.

Não é possível aprimorar

Na verdade, é possível, mas extremamente ineficiente. As restrições de licença não permitem alterações no código-fonte, é possível apenas criar plugins. O máximo de plugins — alguns elementos de menu, assistente passo a passo. A ISPsystem é voltada para a versatilidade, enquanto nós precisávamos de soluções especializadas.

Assim surgiu a decisão de criar nosso próprio painel. Estabelecemos os seguintes objetivos:

  • Responder rapidamente a erros, bugs e ter a capacidade de resolvê-los de forma independente, sem fazer o cliente esperar.
  • Modificar livremente a interface para se adequar aos fluxos de trabalho e necessidades do cliente.
  • Aumentar a usabilidade com um design limpo e claro.

E começamos o desenvolvimento.

Arquitetura do novo painel

Temos uma equipe de desenvolvimento autossuficiente, então desenvolvemos o painel nós mesmos.
O trabalho principal foi realizado por três engenheiros — o diretor técnico Sergey idealizou a arquitetura e escreveu o agente do servidor, Alexey fez a cobrança, enquanto o frontend foi montado pelo nosso frontendista Artysh.

Passo 1. Agente do servidor

O agente do servidor é um servidor web em Python, que gerencia a biblioteca libvirt, que, por sua vez, gerencia o hipervisor Qemu-kvm.

O agente controla todos os serviços no servidor: criação, parada, exclusão de VDS, instalação de sistemas operacionais, alteração de parâmetros e assim por diante através da biblioteca libvirt. No momento da publicação deste artigo, são mais de quarenta funções diferentes, que complementamos dependendo das tarefas e necessidades dos clientes.

Teoricamente, poderia-se gerenciar o libvirt diretamente da cobrança, mas isso exigia muito código adicional e decidimos separar essas funções entre o agente e a cobrança — a cobrança simplesmente faz solicitações ao agente via API JSON.

O agente foi a primeira coisa que fizemos, pois não exigia nenhuma interface e poderia ser testado diretamente no console do servidor.

O que o agente do servidor nos proporcionou: apareceu uma camada que simplifica a vida de todos — a cobrança não precisa enviar um monte de comandos, apenas fazer um pedido. E o agente fará tudo o que é necessário: por exemplo, alocará espaço no disco e memória operacional.

Passo 2. Cobrança

Para nosso desenvolvedor Alex, este não era seu primeiro painel de controle — Alex está no setor de hospedagem há muito tempo, portanto, ele já entendia o que o cliente precisa e o que o provedor precisa.

Chamamos a cobrança entre nós de "painel de controle": nele não estão apenas dinheiro e serviços, mas também a gestão deles, suporte ao cliente e muito mais.

Para a migração do software ISPSystem, era necessário manter completamente para os clientes a funcionalidade anterior, transferir todas as ações financeiras dos usuários do sistema antigo para o novo, assim como todos os serviços e as conexões entre eles. Estudamos o que havia no produto atual, depois as soluções dos concorrentes, principalmente DO e Vultr. Observamos as desvantagens e vantagens, coletamos feedback de pessoas que trabalharam com os antigos produtos da ISPsystem.

No novo sistema de cobrança usamos duas pilhas: PHP clássico, MySQL (e no futuro planejamos mudar para PostgreSQL), Yii2 como framework no backend e VueJS no frontend. As pilhas funcionam independentemente uma da outra, são desenvolvidas por pessoas diferentes, e se comunicam através de uma API JSON. Para o desenvolvimento, naquela época e agora usamos PHPStorm e WebStorm da JetBrains e os amamos muito (pessoal, um abraço!)

O painel foi projetado modularmente: módulos de sistemas de pagamento, módulo de registradores de domínios ou, por exemplo, módulo de certificados SSL. É fácil adicionar uma nova função ou remover uma antiga. A arquitetura foi desenvolvida com espaço para expansão, inclusive retroativamente, "para o hardware".
ISPsystem, desculpe e adeus! Por que e como escrevemos nosso painel de controle de servidores.
O que obtivemos: painel de controle, sobre o qual temos total controle. Agora, bugs são corrigidos em horas, e não em semanas, e novas funções são implementadas a pedido dos clientes, e não por desejo da ISPSystem.

Passo 3. Interface

ISPsystem, desculpe e adeus! Por que e como escrevemos nosso painel de controle de servidores.
A interface é nossa criação coletiva.

Primeiro, olhamos o que aconteceria se fizéssemos uma camada sobre a API ISPsystem, sem mudar nada drasticamente na interface. O resultado foi medíocre e decidimos fazer tudo do zero.

Acreditávamos que o principal era criar uma interface lógica, com um design limpo e minimalista, e, assim, obter um painel bonito. A posição dos elementos foi discutida no Megaplan, e gradualmente nasceu a interface que os usuários veem no painel de controle atualmente.

O design da página de cobrança surgiu primeiro, já que já tínhamos desenvolvido plugins de pagamento para o ISPsystem.

Frontend

Decidimos fazer o painel como um aplicativo SPA — que não exige muitos recursos e carrega os dados rapidamente. Nosso desenvolvedor frontend, Artysh, decidiu escrevê-lo em Vue — que na época estava apenas começando. Presumimos que o framework se desenvolveria dinamicamente, como o React, e que, em algum momento, a comunidade Vue cresceria e haveria uma infinidade de bibliotecas. Apostamos no Vue e não nos arrependemos — agora adicionar novas funcionalidades no frontend, que já programamos no backend, leva pouco tempo. Falaremos mais sobre o frontend do painel em um artigo separado.

Conexão do frontend com o backend

Conectamos o frontend ao backend por meio de push notifications. Tivemos que nos esforçar e escrever nosso próprio manipulador, mas agora a atualização das informações na página ocorre quase instantaneamente.

O que conseguimos: a interface do painel se tornou mais simples. Tornamo-la responsiva, e o carregamento rápido permite utilizá-la mesmo em celulares nos últimos minutos antes da decolagem, sem precisar instalar um aplicativo separado para trabalhar com o painel.

Etapa 4. Teste e esquema de migração

Quando tudo começou a funcionar e os primeiros testes foram concluídos, surgiu a questão da migração. Primeiro, instalamos a cobrança e começamos a testar seu funcionamento com o agente do servidor.

Depois, escrevemos um script simples que transfere o banco de dados da antiga cobrança para a nova.

Tivemos que testar e verificar praticamente tudo, pois os dados foram mesclados em um novo banco vindo de três antigos: Billmanager, VMmanager e IPmanager. Sem dúvida, as migrações de teste foram a parte mais desafiadora do processo de desenvolvimento do novo painel.

Após as verificações, desativamos a antiga cobrança. A migração final dos dados foi um momento muito tenso, mas, felizmente, foi concluída em alguns minutos e sem problemas visíveis. Havia pequenos bugs que corrigimos ao longo da semana. A maior parte do tempo foi dedicada a testar o que conseguimos.

Em seguida, enviamos e-mails para os clientes com o endereço do novo painel e sistema de cobrança e fizemos o redirecionamento.

No final: ESTÁ VIVO!

Feliz final

Desde as primeiras horas de operação do nosso software, sentimos todas as vantagens da transição. O código era totalmente nosso, com uma arquitetura conveniente, e a interface — limpa e lógica.
ISPsystem, desculpe e adeus! Por que e como escrevemos nosso painel de controle de servidores.
O primeiro feedback após o lançamento do novo painel

Iniciamos o processo de migração em dezembro, véspera do Ano Novo de 2017, quando a carga era mínima, para facilitar a transição para os clientes — quase ninguém trabalha na véspera das festividades.

O principal benefício que obtivemos ao migrar para nosso próprio sistema (além da confiabilidade geral e conveniência) foi a possibilidade de adicionar rapidamente funcionalidades para clientes-chave — ser seu rosto, e não apenas uma sombra.

E agora?

Estamos crescendo, o número de dados, clientes e informações dos clientes está aumentando. Foi necessário adicionar um servidor Memcached ao backend e dois gerenciadores de fila com diferentes tarefas. No frontend, há cache e nossas próprias filas.

Claro, ainda tivemos algumas aventuras durante o desenvolvimento e a complexidade do produto, por exemplo, quando adicionamos HighLoad.

No próximo artigo, contaremos como lançamos a tarifa Hi-CPU: sobre hardware, software, quais problemas resolvemos e quais resultados obtivemos.

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