Um ano em uma startup. Como otimizar seus custos da AWS ao executar uma inicialização.

A computação em nuvem é apenas a melhor maneira de administrar seus negócios

Antes de fundar uma empresa, subestimei a importância dos serviços de computação em nuvem para o ecossistema de inicialização. AWS, GCE, Azure, Digital Ocean desempenharam um papel crítico na proliferação de startups. O acesso a recursos quase ilimitados resolve muitas dificuldades técnicas, permitindo que você se concentre no essencial para o crescimento de seus negócios, em vez de se preocupar com a manutenção de hardware. Mas, como em qualquer grande poder, vem uma grande responsabilidade.

A Snap Inc., empresa por trás do popular aplicativo de compartilhamento de fotos e mensagens Snapchat, concordou em comprar US $ 1 bilhão em serviços em nuvem da Amazon nos próximos cinco anos, de acordo com um novo registro na Comissão de Valores Mobiliários dos EUA.

Depois que fundamos a Visely, o problema de pagar a conta da AWS se tornou muito real. Aqui está um breve resumo de como reduzimos a conta em duas partes, elaborando cuidadosamente uma infraestrutura com as melhores opções disponíveis que a AWS oferece.

Tipos de instância da AWS

A AWS fornece uma seleção bastante de várias instâncias. Para o Visely, exigimos VMs que executem com eficiência servidores da Web para atender solicitações do lado do cliente, servidores de banco de dados (hospedando o MongoDB) e carga de trabalho de aprendizado de máquina (Cassandra + Spark).

A escolha das melhores opções disponíveis resumiu facilmente uma fatura mensal de alguns milhares de dólares, o que para uma startup iniciada é um preço alto a pagar. Uma instância regular otimizada de computação com 4 CPUs e 8 GB de RAM pode custar até 125 $ por mês.

Esses são os motivos que nos forçaram a examinar melhor as instâncias do tipo T2.

T2 para o resgate

As instâncias T2 fornecem um desempenho de linha de base com a capacidade de aumentar para um nível mais alto por um período derivado dos créditos atribuídos à VM selecionada.

Os créditos e sua taxa de consumo eram um pouco enigmáticos no início, mas depois que lemos atentamente os documentos da AWS, tudo se tornou sólido.

Deixe-me dar um exemplo. T2 pequeno (com um vCPU, 2 GB), começa com 288 créditos atribuídos. O desempenho da linha de base é de 20% da CPU, o que significa que quando você ultrapassar o limite de 20%, seus créditos começarão a queimar mais rápido do que você deseja. Com que rapidez eles queimam? Muito rápido, com 100% de uso da CPU, você consumirá 288 créditos em cerca de quatro horas.

T2 pequeno uso de crédito

Mesmo sob essas condições, você quase não precisa de 100% da CPU o tempo todo. Muitas startups têm um padrão de uso previsível, com um ou dois picos (ou seja, clientes da costa leste e oeste) que ocorrem ao longo do dia. Este é um caso de uso ideal para instâncias T2, que pode cobrir picos de uso com créditos e recuperar-se durante a noite. Todos os nossos microsserviços estão sendo executados em VMs T2, recuperando com sucesso fora do horário de pico.

Erros a serem evitados ao usar instâncias T2

Depois de consumir todos os seus créditos, sua instância funcionará no nível da linha de base; para T2 pequeno, isso significa 20% da CPU. O processo de recuperação é bastante lento (ou seja, 12 créditos por hora para T2 pequeno), portanto, você deve ter muito cuidado ao escolher o tipo de instância necessário para a tarefa, para que nunca consuma todos os créditos durante o horário de pico.

Sem créditos e uma carga maior que a linha de base, sua instância ficará instável.

Relatório de operações: o comportamento de três em cada cinco servidores de aplicativos é um pouco estranho (créditos para @devopsreactions)

A última coisa que você deseja é ter uma instância sem créditos nos horários de pico. Sua única opção, nesse caso, será provisionar uma nova e redirecionar a carga para ela. Nós aprendemos da maneira mais difícil. Monitore seu uso de crédito de perto. A AWS fornece uma ferramenta útil do CloudWatch que você pode configurar para enviar alertas assim que ultrapassar um limite definido.

Como escolher as instâncias T2 da melhor maneira

Comece com instâncias que claramente fornecem potência suficiente para sua carga. Monitore-o por alguns dias e se você vir um gráfico plano de uso de crédito, altere o tipo de instância ou coloque mais serviços nele.

A instância está indo muito bem

Esse foi o sinal principal de que podemos colocar mais carga nas instâncias que tiveram essa curva de uso de créditos. Nossa estratégia era simples. Depois que descobrimos as VMs subutilizadas, começamos a implantar mais serviços com baixo consumo de CPU.

Após um mês de monitoramento e ajuste fino, reduzimos o número de instâncias de VM em execução quase pela metade.

Instâncias spot para dimensionar recursos não críticos e carga de trabalho offline

Além do tipo de instância T2, a AWS também fornece instâncias spot, que podem ser usadas para reduzir custos de sua fatura mensal. A única diferença entre VMs sob demanda e instâncias spot é que mais tarde pode ser interrompido pelo EC2 com dois minutos de notificação quando a AWS precisar deles de volta.

Uma interrupção forçada (ou hibernação) com notificação de dois minutos parece dura, mas para trabalhos em lotes offline ou dimensionamento sob demanda, essa pode ser a solução ideal.

Aqui no nemo.ai, estamos usando o Apache Spark para dois tipos de tarefas:

  • análise offline para painéis de negócios
  • executando o algoritmo de filtragem colaborativa para identificar os clientes que compraram também compraram / visualizaram o tipo de relacionamento

Ambos os trabalhos estão offline e podem ser executados em lotes, cenário perfeito para alocação de instância spot.

Como as Instâncias Spot funcionam?

A AWS fornece um guia completo do usuário sobre como usar instâncias spot. Em termos simples, você fornece um lance de preço para o recurso que deseja usar. O recurso é alocado quando o preço cai abaixo do seu lance.

Poderíamos solicitar três instâncias Spark M3 (otimizadas para memória) com preço máximo especificado em execução no CentOS. Depois que a solicitação for atendida, a próxima etapa é simplesmente implantar contêineres do Docker com Spark Workers configurados.

O trabalho em lotes começa a ser executado sequencialmente para cada um dos clientes que temos. Demora cerca de uma hora para executar todo o processamento necessário para todos os clientes. Durante esse período, as Instâncias spot podem ser recuperadas com uma notificação de dois minutos, o que nunca é um problema, pois o trabalho está offline e pode ser retomado para os clientes que ficam depois que a solicitação é atendida novamente.

Resumindo, se você deseja criar um aplicativo que aproveite as Instâncias Spot, veja as principais dicas de design de software:

  • provisione instâncias da AWS com o TerraForm (ou qualquer outra ferramenta de automação) para inicializar sua instância local com os serviços necessários o mais rápido possível. Usar uma imagem AMI pré-criada também é uma solução, embora tenhamos decidido executar o Terra Form, pois é mais fácil para nós.
  • o trabalho que você está executando na Instância spot não deve ter medo de interrupção ou hibernação.
  • a implantação dos aplicativos necessários nas instâncias spot deve ser completamente automatizada; caso contrário, você gastará um tempo precioso na instalação antes que a VM se torne utilizável. O uso de imagens do Docker pode ser uma solução ideal para isso.

Para verificar a disponibilidade de Instâncias Spot na sua região, você pode usar este recurso útil.

Custos diversos

Rede e armazenamento persistente são os segundos recursos mais caros que tivemos que otimizar. Aqui você tem menos opções para brincar, decidimos usar o SSD para serviços que exigem E / S persistente rápida (ou seja, MongoDB, Apache Solr). Os serviços sem estado estão indo bem no armazenamento provisionado magnético.

Quanto à rede, há muito pouco que você pode ajustar, embora você definitivamente precise prestar atenção se o uso da rede estiver dentro dos limites esperados.

Como uma startup que exigia várias VMs para executar seus serviços, o esforço de otimização de custos valeu a pena, economizando o dinheiro que poderíamos gastar em outras coisas.

Se você gostou dessa história, pode conferir a outra dessa série

Um ano em uma startup. Como inicializamos uma inicialização.