O que é um VPS SSD? Armazenamento flash explicado
Entenda o que um VPS SSD realmente oferece: IOPS altos e baixa latência, por que o rótulo SSD hosting é vago e quais 3 perguntas fazer antes de contratar.
O que é um VPS SSD?
Um VPS SSD é um servidor virtual privado cujo disco usa memória flash em vez de um disco rígido magnético. SSD significa solid state drive: armazenamento construído com chips de memória flash NAND, sem peças móveis. VPS significa virtual private server: uma partição isolada de uma máquina física host, executando seu próprio sistema operacional e oferecida a você como se fosse um servidor completo. Juntos, esses termos prometem uma coisa. Quando o servidor lê um bloco de dados, nada mecânico precisa se mover primeiro.
Essa é a definição completa. O restante deste texto trata do que o rótulo não informa, porque as palavras "SSD hosting" em uma página de preços dizem muito pouco sobre a matriz de armazenamento usada.
Se você ainda está tentando entender como um VPS difere de uma máquina virtual comum, a diferença entre um VPS, uma VM e uma VPC é a melhor página para ler primeiro.
Por que os hosts anunciam a velocidade do armazenamento em vez do tamanho
Uma página de plano lista núcleos de CPU, memória, tamanho do disco e largura de banda, e depois acrescenta uma palavra sobre o disco que não é um tamanho. Os hosts fazem isso porque a capacidade deixou de ser o número mais relevante sobre o armazenamento há anos. Os dois números que determinam a resposta de um servidor são IOPS (operações de entrada/saída por segundo) e latência (quanto tempo uma operação leva para retornar).
A diferença mecânica é o motivo. Um disco rígido mantém os dados em pratos giratórios e os lê com uma cabeça montada em um braço móvel. Para alcançar um bloco em outro ponto do prato, o braço precisa fazer uma busca, e então o disco precisa girar até o setor correto chegar sob a cabeça. A 7200 rotações por minuto, meia volta leva em média cerca de 4 ms, e a busca acrescenta vários milissegundos. O flash não tem braço nem prato, portanto uma leitura é uma consulta elétrica que retorna em dezenas de microssegundos.
The data behind this chart
[
{
"device": "7200 rpm hard disk",
"random_read_iops": "125",
"read_latency_ms": 8
},
{
"device": "SATA SSD",
"random_read_iops": "90,000",
"read_latency_ms": 0.15
},
{
"device": "NVMe SSD",
"random_read_iops": "600,000",
"read_latency_ms": 0.08
}
]Um disco rígido de 7200 rpm é especificado para aproximadamente 125 leituras aleatórias de 4k por segundo, e cada uma dessas leituras leva cerca de 8 ms para retornar. Uma unidade NVMe é especificada para perto de 600,000 das mesmas leituras, a cerca de 0.08 ms cada. O SSD SATA entre os dois é especificado para perto de 90,000. Considere esses valores como ordens de grandeza, não como uma melhoria percentual.
Há duas ressalvas sobre esses dados. Estas são especificações publicadas para unidades inteiras de cada classe. Portanto, são valores das fichas dos fabricantes, e não medições feitas em um VPS. Além disso, você nunca recebe uma unidade inteira: seu volume é uma parte de um dispositivo ou de um array, compartilhado com outros clientes no mesmo hardware.
As duas colunas também respondem a perguntas diferentes, portanto leia-as em conjunto. Latência é o tempo que você espera por uma operação. IOPS é a quantidade de operações que a unidade consegue processar ao mesmo tempo. O flash alcança seus valores altos de IOPS por meio do paralelismo, porque muitos chips flash respondem a muitas solicitações ao mesmo tempo enquanto uma fila profunda os mantém ocupados. Um programa de thread único que emite uma leitura, espera por ela e só então emite a próxima nunca verá o topo desse gráfico. Ele verá a coluna de latência.
SSD, NVMe, SATA e PCIe: quatro termos em quatro camadas diferentes
Os compradores confundem esses termos porque cada um descreve uma parte diferente do sistema.
- SSD é o meio de armazenamento. Isso significa que os dados ficam em chips de memória flash NAND, e não em pratos magnéticos.
- SATA é uma interface projetada na época dos discos mecânicos. Sua velocidade máxima é 6 Gbit/s, o que corresponde a aproximadamente 550 MB/s de throughput real, e sua fila de comandos comporta 32 comandos pendentes.
- NVMe (non-volatile memory express) é um protocolo criado especificamente para memória flash. Ele oferece várias filas com milhares de comandos cada uma. Assim, vários núcleos de CPU podem acessar a unidade ao mesmo tempo sem compartilhar uma única fila estreita.
- PCIe (peripheral component interconnect express) é o barramento sobre o qual o NVMe funciona. É o mesmo tipo de conexão usado por uma placa gráfica.
Portanto, um SSD SATA e um SSD NVMe armazenam dados em memória flash. A diferença está na interface que cada um usa. Um SSD SATA ainda é muito mais rápido do que qualquer disco rígido, mas essa fila de 32 comandos limita a quantidade de trabalho paralelo que ele consegue processar. O trabalho paralelo é justamente um dos pontos fortes da memória flash. Qual opção vale o investimento depende da sua carga de trabalho, e a decisão entre SSD NVMe e SATA analisa essa questão em detalhes.
Armazenamento flash local ou armazenamento conectado à rede?
Duas arquiteturas muito diferentes são comercializadas com o mesmo termo.
Armazenamento local significa que as unidades flash ficam dentro do mesmo host físico que o seu VPS. Uma solicitação percorre o PCIe dentro de uma única máquina e retorna diretamente. É assim que a latência permanece na casa de dezenas de microssegundos.
Armazenamento conectado à rede significa que o seu disco virtual fica em um cluster de armazenamento separado, geralmente Ceph ou uma SAN (storage area network), e cada leitura e gravação atravessa uma rede para chegar até ele. Os provedores normalmente chamam isso de "cloud block storage" ou "elastic volumes". O armazenamento flash é real. A viagem pela rede também é real e é adicionada a cada operação, sem exceção. Por isso, a latência fica na casa das centenas altas de microssegundos ou dos poucos milissegundos, em vez de dezenas de microssegundos.
Nenhuma das opções é incorreta. O armazenamento de rede continua disponível após a falha de um host, porque os dados nunca estiveram nesse host. O provedor pode iniciar o seu servidor em outro hardware, e o disco o acompanha. O NVMe local é mais rápido e fica vinculado a uma única máquina física. Portanto, uma falha de hardware exige uma restauração a partir do backup. Pergunte qual opção o plano usa. Quase ninguém pergunta.
Como a diferença aparece em um servidor real
O trabalho em servidores consiste principalmente em pequenas leituras e gravações aleatórias, não em transferências sequenciais longas. Por isso, o valor em MB/s do material de marketing é o número menos útil da página.
- Commits de banco de dados. Um banco de dados que promete durabilidade chama
fsyncquando uma transação é confirmada e espera o drive confirmar que os dados foram realmente armazenados. Em um disco rígido, essa espera dura milissegundos, o que limita um banco de dados pequeno a poucas centenas de commits por segundo. Em armazenamento flash, a mesma espera dura uma fração de milissegundo. É nesse ponto que a diferença é maior, seja qual for o uso de PostgreSQL, MySQL ou SQLite como banco de dados de produção. - Instalações de pacotes.
apt installdescompacta milhares de arquivos pequenos e os sincroniza com o disco durante o processo. Quase nenhuma dessas operações é sequencial, portanto o desempenho é limitado pelos IOPS. - Downloads de imagens de contêiner.
docker pullbaixa camadas compactadas pela rede e depois as extrai em milhares de arquivos pequenos. O download é limitado pela rede. A extração é limitada pelo disco e, em um volume lento, essa é a etapa pela qual você precisa esperar. - Inicialização e reinicialização. A inicialização lê um kernel e um initramfs, depois centenas de arquivos de unidade e bibliotecas compartilhadas espalhados pelo volume.
Nada disso é uma leitura sequencial grande. Um volume que transmite dados a 500 MB/s, mas atende apenas 3,000 IOPS, ainda parecerá lento durante um docker compose pull, porque a espera é contabilizada por arquivo, não por megabyte.
Por que "hospedagem em nuvem com SSD" em uma página de preços quase não informa nada
A expressão descreve o meio de armazenamento e para por aí. Ela não informa qual interface a unidade usa nem se essa unidade está na mesma máquina que o seu servidor. Também não informa o limite que o seu plano pode atingir.
Esse limite é o fator mais importante e o menos divulgado. Os provedores limitam IOPS e throughput por volume, porque um host atende muitos clientes e um vizinho sem limite pode consumir os recursos dos demais. Um limite de alguns milhares de IOPS em um hardware capaz de centenas de milhares é normal e honesto, mas não aparece na descrição do plano. Dois planos podem dizer "SSD", enquanto um usa NVMe local sem limite por volume e o outro usa um volume compartilhado em cluster, limitado a 3,000 IOPS.
Os limites têm dois formatos. Um limite sustentado é um teto fixo que nunca muda. Um limite de burst oferece uma linha de base baixa e créditos que permitem excedê-la por algum tempo; esses créditos são repostos enquanto o volume fica ocioso. Um limite de burst parece excelente em um teste de cinco minutos, mas depois cai para a linha de base durante uma importação de banco de dados ou uma restauração grande. Se um provedor informar um número alto, pergunte por quanto tempo você pode mantê-lo.
Como verificar o que seu VPS realmente recebeu
De dentro do guest, você só consegue ver o que o hypervisor informa.
lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotationalSubstitua vda pelo nome do dispositivo lsblk exibido para o seu disco. ROTA e o arquivo rotational leem 0 quando o kernel foi informado de que o dispositivo não é rotacional, e 1 quando recebeu a informação oposta. Um disco virtual define esse sinalizador com base no que o hypervisor anuncia. Portanto, ele descreve o dispositivo virtual, não o hardware físico subjacente. MODEL geralmente fica vazio em um disco virtio, como vda, ou contém uma string genérica, como QEMU HARDDISK, em um controlador SATA emulado. Os guests não devem conseguir ver o array do host, e não conseguem.
Portanto, trate o sinalizador como uma indicação e faça medições do restante. Execute um teste aleatório de 4k com fio em um arquivo no volume, usando a profundidade de fila que sua aplicação realmente utiliza. Execute-o por tempo suficiente para consumir qualquer crédito de burst. Como fazer benchmarking correto de um VPS contém os comandos do fio e os erros comuns que produzem números favoráveis.
Três perguntas para fazer ao provedor antes de comprar
- O armazenamento é local ao hypervisor ou está conectado pela rede? A resposta define o limite mínimo da sua latência e determina o que acontece com seus dados quando um host físico falha. Um provedor que responde isso claramente já considerou o problema.
- Qual é o limite de IOPS no meu volume? Peça um número. "Ilimitado" e "nível empresarial" não são números. Se realmente não houver limite, pergunte o que impede um vizinho no mesmo host de consumir toda a matriz durante a janela de backup dele.
- Esse limite é sustentado ou de burst? Se houver burst, pergunte qual é a linha de base e qual é a duração do burst. A linha de base é o valor com que seu job noturno vai operar, portanto é esse valor que deve orientar o planejamento.
O flash se desgasta e isso é um problema para você?
As células de flash aceitam um número limitado de ciclos de gravação. Por isso, as unidades publicam uma classificação de resistência em TBW (terabytes gravados) ou DWPD (gravações da unidade por dia). A unidade distribui as gravações uniformemente entre as células. Esse processo é chamado de nivelamento de desgaste. Ela também mantém blocos sobressalentes reservados para substituir células que falham. Em um VPS, o desgaste é um problema do provedor. O provedor monitora os contadores SMART das próprias unidades e substitui o hardware antes que a classificação se esgote. O seu problema é mais antigo que o flash. Uma unidade não é um backup. A redundância sob o seu volume também não é um backup, porque replica uma exclusão com a mesma fidelidade com que replica os dados.
A escolha que você está fazendo, na prática, é o preço por gigabyte. O flash custa mais por gigabyte que os discos magnéticos. Por isso, um plano com SSD geralmente oferece menos capacidade que um plano com disco rígido pelo mesmo preço. Se você precisa de espaço amplo para mídia ou arquivos, mantenha o volume rápido pequeno e coloque o volume maior em um local mais barato. Essa também é a configuração adequada para manter os backups fora do servidor. Para entender como o armazenamento se encaixa no restante da conta, quanto um VPS realmente custa detalha cada item.
FAQ
Um VPS com SSD é a mesma coisa que um VPS com NVMe?
Todo VPS com NVMe é um VPS com SSD, porque as unidades NVMe usam memória flash. O inverso não é válido. Um plano anunciado como "SSD" pode usar um SSD SATA, que é flash por meio de uma interface projetada para discos mecânicos, com uma fila de 32 comandos e limite próximo de 550 MB/s. Ambos são muito mais rápidos que um disco rígido. Se essa diferença for relevante para sua carga de trabalho, pergunte ao provedor qual unidade o plano usa, em vez de inferir isso pelo nome do plano.
Um VPS com SSD deixa meu site mais rápido?
Ele acelera o trabalho em disco, e somente o trabalho em disco. Uma página que executa várias consultas ao banco de dados por requisição fica mais rápida, porque essas consultas e seus commits são operações de I/O aleatórias pequenas. Uma página fornecida a partir da memória ou de um cache nunca acessa o disco durante o envio, portanto muda muito pouco. Meça qual parte da requisição está lenta antes de pagar por armazenamento para tentar corrigi-la.
Como posso verificar se meu VPS realmente usa armazenamento SSD?
De dentro do guest, você não pode verificar o hardware físico. lsblk -d -o NAME,ROTA mostra o que o dispositivo virtual anuncia, e o hypervisor decide esse valor. Portanto, um 0 nesse local é uma indicação, não uma prova. A verificação prática é uma medição: execute fio com uma carga de trabalho de leitura aleatória de 4k durante vários minutos e observe a latência informada. Leituras aleatórias com latência de um único dígito em milissegundos indicam discos giratórios ou um volume de rede congestionado. Dezenas de microssegundos indicam flash local.
O armazenamento SSD conectado à rede é pior que o NVMe local?
Ele é mais lento por operação e apresenta falhas de outra forma. O tempo de ida e volta da rede é acrescentado a cada leitura e gravação. Por isso, a latência é maior, embora ambos usem flash. Em contrapartida, seus dados não ficam em um único host físico. Assim, uma falha do host não leva o volume junto, e snapshots e live migration são mais fáceis para o provedor. Escolha flash local para um banco de dados sensível à latência. Escolha armazenamento de rede quando a preservação do volume for mais importante que microssegundos.