O ciclo do hype do Gartner , ilustrado abaixo, pode ser aplicado à maioria dos aspectos da tecnologia:
À medida que novas inovações entram em seus respectivos ciclos, as expectativas acabam sendo realizadas – levando a algum nível de adoção.
O objetivo de toda inovação é atingir o patamar de produtividade em que os consumidores determinaram que a recompensa de adotar a inovação supera em muito quaisquer riscos conhecidos.
Ao mesmo tempo, chega um ponto em que o patamar de produtividade começa a diminuir, levando a um êxodo dessa inovação. Um exemplo simples seriam os pagers (ou bipes), que eram comuns antes que os telefones/dispositivos móveis atingissem o platô da produtividade.
Como tecnólogos, nos esforçamos para fornecer recursos, estruturas, produtos ou serviços que aumentam o nível de produtividade. O mesmo vale para os que usamos.
Recentemente, senti que minha plataforma de hospedagem atual começou a cair do patamar de produtividade. Na verdade, um anúncio recente me fez pensar se era hora de considerar outras opções.
Como tive uma experiência positiva com o Render PaaS, queria ver com que facilidade poderia converter um dos meus aplicativos Heroku, adotar o PostgreSQL e migrar para o Render. Estou descrevendo essa jornada nesta série de duas partes:
Se você nunca ouviu falar de Render antes, confira algumas de minhas publicações anteriores:
O que eu acho interessante sobre o Render é que eles continuam a subir a encosta da iluminação enquanto fornecem ativamente uma solução sólida para os adotantes que reconhecem o platô da produtividade.
Como observei em meus artigos, o Render oferece uma promessa de “Zero DevOps”. Isso se alinha perfeitamente com minhas necessidades, pois não tenho tempo para me concentrar nas tarefas de DevOps.
A plataforma Heroku tem várias coisas que não gosto muito:
Do ponto de vista do preço, espero ver economias de custo significativas após migrar todos os meus aplicativos e serviços do Heroku para o Render. O que é mais surpreendente é que estou obtendo memória e CPU melhores por esse preço, com dimensionamento linear à medida que meu aplicativo precisa crescer.
Como observei acima, esta é a primeira parte de uma série de duas partes e focarei na camada de serviço neste artigo. O serviço que desejo converter possui os seguintes atributos:
No lado do Render PaaS, o novo design de serviço ficará assim:
Abaixo está uma comparação lado a lado dos dois ecossistemas:
Meu plano de ataque de alto nível para a conversão é o seguinte:
Antes de começar, é recomendável colocar todos os serviços Heroku existentes no modo de manutenção . Isso proibirá qualquer consumidor de acessar os aplicativos ou serviços.
Embora o código-fonte já deva ser copiado e armazenado em um repositório baseado em git, é uma boa ideia certificar-se de que um backup do banco de dados foi criado com sucesso.
Do ponto de vista da conversão, eu tinha dois itens para converter: o próprio serviço e o banco de dados ClearDB (MySQL).
A conversão do meu serviço Spring Boot RESTful não envolveu muito trabalho. Na verdade, consegui aproveitar a abordagem que usei em um projeto anterior meu.
Para o banco de dados, precisei converter de MySQL para PostgreSQL. Meu objetivo era usar o Heroku Migrator do Render para migrar facilmente o Heroku Postgres para o Render Postgres, mas primeiro eu precisava converter do MySQL para o PostgreSQL.
Inicialmente, comecei pelo caminho do pgloader , que parecia ser uma abordagem comum para a conversão do banco de dados. No entanto, usar meu MacBook Pro com chip M1 levou a alguns problemas inesperados.
Em vez disso, optei por usar o NMIG para converter MySQL em PostgreSQL. Para obter mais informações, consulte a seção “ Destaques da conversão do banco de dados ” abaixo.
Após converter o banco de dados e o serviço Spring Boot RESTful rodando dentro do Docker, o próximo passo foi criar um Render Web Service para o serviço Spring Boot RESTful API.
Isso foi tão fácil quanto criar o serviço, dar um nome a ele e apontar para o repositório apropriado para meu código no GitLab.
Como eu também precisava de um serviço RabbitMQ, segui estas instruções para criar um RabbitMQ Private Service rodando no Render. Isso incluiu o estabelecimento de uma pequena quantidade de armazenamento em disco para manter as mensagens que não foram processadas.
Por fim, criei as variáveis de ambiente necessárias no Render Dashboard para o serviço Spring Boot RESTful API e o agente de mensagens RabbitMQ.
O próximo passo foi iniciar meus serviços. Depois que eles estavam em execução e as APIs foram validadas usando minha coleção Postman, atualizei meu aplicativo cliente para apontar para o novo local do serviço Render.
Depois que tudo estava funcionando, meu Render Dashboard apareceu como mostrado abaixo:
Tudo o que restava neste ponto era excluir os bancos de dados que ainda estavam em execução no Heroku e remover os serviços migrados do ecossistema Heroku.
Ao usar o Heroku, sempre que eu mesclava o código na ramificação principal do meu repositório de serviço, o código era implantado automaticamente, desde que eu usasse o GitLab CI/CD para implantar no Heroku no meu repositório de origem.
No entanto, não há necessidade de adicionar código ao repositório de arquivos de origem com Render. Eu simplesmente precisava especificar a ramificação Build & Deploy no Render Dashboard para o serviço:
Eu amo a promessa Zero DevOps.
Seguindo as etapas acima, a conversão de Heroku para Render foi tranquila e bem-sucedida. O maior desafio para mim foi a conversão de dados. Em alto nível, isso se resumia principalmente a uma série de comandos executados no terminal do meu MacBook Pro.
Primeiro, iniciei uma instância local do Postgres via Docker:
docker run --publish 127.0.0.1:5432:5432 --name postgres -e POSTGRES_PASSWORD=dbo -d postgres
Em seguida, criei um banco de dados chamado “exemplo” usando o seguinte comando (ou pgAdmin):
createdb example
Para converter minha instância ClearDB (MYSQL) em execução no Heroku para meu exemplo de banco de dados Postgres em execução local, usei o NMIG , que é um utilitário de conversão de banco de dados baseado em Node.js.
Depois de instalar o NMIG, configurei o arquivo config.json com informações e credenciais do endpoint do banco de dados e executei:
/path/to/nmig$ npm start
Em seguida, fiz backup dos dados em um arquivo usando o seguinte comando:
pg_dump -Fc --no-acl --no-owner -h localhost -U postgres example > example.dump
Em vez de criar uma URL assinada na AWS, usei apenas o cliente pgAdmin para importar o backup para uma instância Postgres recém-criada no Heroku.
Com a instância Postgres em execução e os dados validados, criei um novo banco de dados Postgres no Render PaaS. Então tudo que eu tinha que fazer era emitir o seguinte comando:
pg_restore --verbose --no-acl --no-owner -d postgres://username:[email protected]/example example.dump
Olhando para trás em minha conversão de Heroku para Render, aqui estão algumas lições que aprendi ao longo do caminho:
Em suma, esses pequenos obstáculos não foram significativos o suficiente para impactar minha decisão de migrar para o Render.
O aspecto mais importante do platô de produtividade do Gartner é fornecer produtos, estruturas ou serviços que permitam aos consumidores prosperar e atingir seus objetivos. O platô da produtividade não pretende ser chamativo ou elegante – em um sentido metafórico.
Quando compartilhei essa conclusão com Ed, um Developer Advocate da Render, sua resposta foi algo que eu queria compartilhar:
“O Render declaradamente não está tentando estar 'na moda'. Estamos tentando ser surpreendentes e confiáveis.”
A resposta de Ed ressoou profundamente em mim e me lembrou de uma época em que meu ex-colega me disse que meu código parecia “chato” para ele. Seu comentário acabou sendo o maior elogio que eu poderia ter recebido. Você pode ler mais aqui .
Em qualquer aspecto da tecnologia, a decisão sobre qual provedor selecionar deve sempre corresponder à sua posição tecnológica. Se você não tiver certeza, o ciclo de hype do Gartner é um ótimo ponto de referência e você pode começar com uma assinatura do serviço aqui .
Concentrei-me na seguinte declaração de missão, que acredito poder ser aplicada a qualquer profissional de TI:
“Concentre seu tempo em fornecer recursos/funcionalidades que ampliem o valor de sua propriedade intelectual. Aproveite estruturas, produtos e serviços para todo o resto.”
-J. Vester See More
Quando olho para o ecossistema Render PaaS, vejo uma solução que adere à minha declaração de missão enquanto reside na minha preferência de ciclo de hype.
O que torna as coisas melhores é que espero ver uma economia de 44% em meus custos diretos pessoais - ainda mais porque meus serviços precisam escalar verticalmente.
Para aqueles que consideram soluções de hospedagem, recomendo adicionar Render à lista de provedores para revisão e análise. Você pode começar gratuitamente seguindo este link .
A segunda parte desta série será emocionante. Vou demonstrar como deixar de pagar pelo meu cliente estático escrito em Angular e aproveitar o serviço gratuito de sites estáticos do Render usando Vue ou Svelte. Qual framework vou escolher… e por quê?
Tenha um ótimo dia!