Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DevOps: implementar automação das rotinas gerenciais #261

Open
CauanCabral opened this issue Nov 10, 2024 · 1 comment
Open

DevOps: implementar automação das rotinas gerenciais #261

CauanCabral opened this issue Nov 10, 2024 · 1 comment

Comments

@CauanCabral
Copy link

CauanCabral commented Nov 10, 2024

Olá!

Em cima da thread no bluesky, vou transcrever aqui o que entendi e nos comentários ir adicionando algumas possibilidades que vejo pra gente definir o melhor caminho dessas implementações. Fique a vontade para editar, comentar, fechar a issue se achar necessário ;)

Cenário

Hoje a API web da Minha Receita é executada em:

  • Banco de dados: uma VM com 8 CPU / 16 Gb / 512 GB SSD (ao custo de $ 13-15 USD/mês)
  • Instâncias menores na Fly.io para o servidor HTTP (custo variável 2-8 USD/mês)
  • Serviço de armazenamento compatível com S3 para manter o espelho dos dados

A VM do banco de dados precisa ser acessada todo mês para criar o banco de dados atualizados (~150GB), depoisé necessário apontar a aplicação para o novo e depois de tudo certo apagar o antigo (ficando nesse meio tempo com 2 banco de dados ativos, ~300GB).

A aplicação atende em torno de 30req/s (100MM req/mo) em sua API REST.

Desejado

  • Automatizar o processo de atualização de dados, incluindo:
    • a criação de um banco de dados novo
    • ajuste de configuração na app
    • validação e exclusão do banco antigo
    • subir os arquivos novos para o armazenamento responsável pelo espelho de dados
  • Reduzir o custo mensal (como consequência da redução do requisito de hardware - hoje o principal gargalo são os 300GB de disco necessário durante a atualização do banco)
  • Não incluir complexidade desnecessária (ex: implementar k8s só porquê sim)

Possíveis caminhos

  • Utilizar o próprio Github Actions para disparar e executar a atualização de dados, removendo a necessidade de conectar diretamente no servidor
  • Implementar a automação do processo com Bash ou Ansible, evitando a adição de muitas dependências novas
@cuducos
Copy link
Owner

cuducos commented Nov 11, 2024

Muito obrigada, @CauanCabral — eu editei só para separar um pouco o que ee banco de dados, o que é o servidor web, e aproveitei para adicionar o espelho de dados.

Agora comentando sobre os possíveis caminhos: dado que o projeto é em Go, uma solução usando algo como Pulumi seria viável? Digo isso pois, pessoalmente, acho Bash e GitHub Actions muito difícil de manter, e não queria só escolher Ansible por eliminação hehehe…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants