O post de hoje nasceu de uma discussão interna com o time da PowerTuning, estamos migrando um cliente que possui estrutura on-premises com Sql Server 2008 para o Azure e nas discussões iniciais o ambiente proposto havia sido desenhado com o Sql Managed Instance (PaaS) pelo desejo de num futuro próximo poder usufruir da licença Enterprise e do banco de leitura.
O ambiente proposto estava em torno de R$10.000,00/mês com as otimizações e configurações necessárias, mas (sempre tem um mas) que surgiu uma dúvida, não seria mais barato subir o sql server me uma máquina Virtual?
A princípio a resposta seria sim, mas para sermos justos precisamos comparar maçãs com maçãs e esse é meu objetivo no post de hoje.
Para começarmos vou usar a seguinte especificação:
- 8 cores
- 4 TB de espaço em disco
- Região: Brazil South (apesar das regiões americanas serem mais baratas quero usar o mesmo exemplo que usei internamente com o time)
Nota 1: Não é possível igualar o comparativo de memória, que no caso no Managed Instance temos 5GB de memória por core e na VM temos 64GB na configuração escolhida. Logo nos casos aonde Memória é super importante a VM tem 60% mais memória.
Primeira comparação
Antes de compararmos valores quero pontuar que quando estiverem considerando usar Máquinas Virtuais para banco de dados prefiram as máquinas da família E que possuem uma relação CPU x Memória maior que as outras, como no sql server pagamos o custo de licença por vCore utilizado a família E nos permite aumentar a memória sem aumentar consideravelmente o número de cores, diminuindo assim o custo com licenciamento.
A primeira coisa que aprendemos quando estamos lidando com bastante espaço em disco é que armazenamento na nuvem é infinito e barato, armazenamento gerenciado não!
- Dos $2,231.99 do Sql Managed Instance $887.98 é referente aos 4TB de armazenamento. ~40%
- Dos $1,961.76 da Máquina Virtual $856.11 é referente aos 4TB de armazenamento. ~44%
A desvantagem do armazenamento gerenciado é que pagamos pelo volume contratado e não pelo volume armazenado como no Azure Blob Storage, por exemplo.
A maior vantagem é justamente não precisamos nos preocupar com backup e tarefas do dia a dia. (relacionadas ao disco e não ao conteúdo).
Nessa comparação simples temos ~12% de redução usando máquina virtual, o que ao longo de alguns anos pode ser uma diferença significativa, mas toda vez que comparamos serviços não podemos comparar apenas preço, temos que comparar benefícios de um sobre o outro.
Segunda Comparação
Para sermos justos precisamos no mínimo incluir o serviço de backup tanto para a VM quando para o Banco, uma vez que no Managed Instance não precisamos nos preocupar com Sistema Operacional e nem backup.
As coisas estão começando a ficar interessantes, agora com os ajustes de backup temos o seguinte cenário:
- Managed Instance: $3,010.04
- Máquina Virtual: $3,285.78
O cenário com Máquina Virtual passou a ficar ~10% mais caro.
Terceira comparação
As coisas mudam de patamar mesmo quando falamos do Sql Server Enterprise, o desejo do cliente é usar alguns recursos do SQL Server Enterprise após a migração, especialmente rebuild online de índice.
A justando os valores do Managed Instance para a camada Business Critical e do licenciamento da VM temos o seguinte cenário:
- Managed Instance: $4,959.42
- Máquina Virtual: $4,891.78
Aparentemente uma diferença insignificativa que poderíamos escolher um ou outro, MAS (aqui entra um GRANDE MAS) a camada Business Critical do Sql Managed Instance além da licença Enterprise ela conta com o Always ON configurado, isso nos garante 2 benefícios GIGANTES:
- Sempre 3 instâncias do servidor rodando em 3 nós diferentes, sendo assim temos alta disponibilidade de fato gerenciado direto pelo Azure.
- Acesso ao banco de leitura, mudando apenas a string de conexão, com isso ganhamos mais 8 cores para leitura em um nó secundário sem precisar alterar em nada arquitetura do ambiente e sistemas.
Para termos o mesmo cenário em VMs teríamos que ter mais 2 VMs rodando, o que praticamente triplicaria nossos custos.
Quarta Comparação
Para não falarmos que o Managed Instance seria a melhor opção em todos os cenários, quero mostrar um cenário onde Máquina Virtual seria mais adequado.
Para casos onde a quantidade de memória disponível é mais importante temos que mudar o Tipo de Hardware na nossa configuração. (lembrando que os valores são com licença enterprise)
- Máquina Virtual - 64GB - $4,891.78
- MI Standard - 40GB - $4,959.42
- MI Premium Series - 56GB - $6,965.66
- MI Memory Optimized - 108GB - $8,610.35
Considerando o uso da VM sem alta disponibilidade temos uma redução de ~30% em relação à camada Premium Series.
Se colocarmos o recurso Always ON em consideração teríamos:
- Máquina Virtual - 64GB (x3) - $14,675.34
- MI Standard - 40GB - $4,959.42
- MI Premium Series - 56GB - $6,965.66
- MI Memory Optimized - 108GB - $8,610.35
No cenário de Always ON o Sql Managed Instance Premium sairia ~53% mais barato em relação ao cenário com VM.
Bônus: Sql Database - Hyperscale
Se você chegou até aqui, eu queria compartilhar uma dica bônus com você.
A comparação foi feita usando Sql Server Managed Instance x Máquina Virtual, pois é o cenário que atende o cliente que não é compatível com o Sql Azure Database.
Em casos aonde o banco é compatível temos preferido migrar para o Azure Sql Database na camada Hyperscale, que é o produto Cloud Native da Microsoft.
- Managed Instance: $4,959.42
- Hyperscale: $3,966.05
Com os mesmos benefícios em termos de plataforma e recursos temos uma redução de ~20% utilizando o Azure Sql Database Hyperscale.
Conclusão
Espero que tenham gostado dessa comparação e entendido um pouco mais sobre a diferença entre PaaS x IaaS na nuvem.
Deixa aqui nos comentários qual cenário você escolheria.
[]s e até a próxima.