Como cortar custos na AWS

O mundo está mudando dramaticamente. Muitas empresas estão procurando qualquer maneira de cortar custos, apenas para sobreviver. Ao mesmo tempo, o ônus dos serviços on-line está se intensificando - especialmente aqueles relacionados à organização do trabalho remoto, à realização de videoconferências e ao aprendizado on-line.

Nessas condições, é extremamente importante, por um lado, garantir a confiabilidade e a escalabilidade da sua infraestrutura. Por outro lado, não voe para o cano com a compra de servidores, discos, pagamento por tráfego.

Nós da Bitrix24 somos muito ativos no uso do Amazon Web Services, e neste artigo falarei sobre vários recursos da AWS que podem ajudá-lo a reduzir seus custos.

Bitrix24 é um serviço global, trabalhamos para clientes em todo o mundo. Desde 2015, desde a entrada em vigor da Lei 242- sobre a localização de dados pessoais, os dados dos usuários russos são armazenados em servidores na Rússia. Mas toda a infraestrutura do serviço que atende aos clientes restantes em todo o mundo é implantada no Amazon Web Services.

A crise econômica já é um fato consumado. O dólar cresceu e é improvável que volte à sua posição anterior em um futuro próximo, portanto, pagar pela hospedagem em moeda estrangeira se torna bastante oneroso.

Nessas condições, se você continuar colocando seus recursos na AWS, provavelmente estará interessado em técnicas que ajudarão você a economizar na infraestrutura de aluguel.

Vou falar sobre os principais que nós mesmos usamos há muitos anos. Se houver algum outro método que você use - compartilhe nos comentários.

Então vamos.

RI - Instâncias reservadas


A maneira mais fácil e óbvia de economizar dinheiro na AWS é usar instâncias reservadas do EC2. Se você souber que definitivamente usará determinadas instâncias por pelo menos um ano, poderá fazer um pagamento antecipado por elas e obter um desconto de 30% a 75%.

Exemplo de cálculos para instâncias c5.xlarge:

imagem

todos os preços e cálculos estão aqui .

Às vezes parece complicado e confuso, mas, em geral, a lógica é esta:

  • Quanto maior o período de reserva - 1 ou 3 anos - maior o desconto.
  • Quanto maior o pré-pagamento imediatamente - você pode fazê-lo sem qualquer pré-pagamento, pode usar todo o pagamento antecipado e completo - quanto maior o desconto.
  • Se reservarmos um tipo específico de instância, mas não usarmos um conversível, haverá um desconto maior.

Nós mesmos fazemos reservas para 1 ano, porque o planejamento para 3 anos é bastante difícil. E isso permite uma boa economia no EC2.

Instâncias spot


Usar instâncias spot é essencialmente algum tipo de troca de recursos. Quando a Amazon possui muitos recursos inativos, você pode definir o preço máximo que deseja pagar por elas em "Instâncias spot" especiais.

Se a demanda atual em uma determinada região e AZ (zona de disponibilidade) for pequena, esses recursos serão fornecidos a você. Além disso, a um preço 3-8 vezes menor que o preço sob demanda.

Qual é o problema?

A única coisa é que, se não houver capacidade livre, os recursos solicitados não serão fornecidos a você. E se a demanda aumentar acentuadamente e o preço à vista exceder o preço máximo definido, ele será encerrado.

Naturalmente, essas instâncias não são adequadas, por exemplo, para um banco de dados em produção. Mas para algumas tarefas associadas, por exemplo, a certos cálculos, renderização, cálculo de modelos, para testes, é uma ótima maneira de economizar.

Vamos ver na prática por quanto estamos lutando. E com que frequência os pontos podem "desaparecer" a um preço.

Aqui está um exemplo do histórico de preços de instâncias spot diretamente do console da AWS para a região eu-central-1 (Frankfurt) para instâncias c5.4xlarge:

imagem

O que vemos?

  • O preço é cerca de 3 vezes menor do que sob demanda.
  • Existem instâncias spot disponíveis nos três AZs nessa região.
  • Durante três meses, o preço nunca aumentou. Isso significa que uma vaga lançada há três meses com um determinado preço máximo, por exemplo, US $ 0,3, continuaria funcionando.

Como usamos pontos na prática:

imagem

- Usamos pontos para servidores de aplicativos.

- Para eles, usamos ativamente o pacote CloudWatch + Auto Scaling - para escalar automaticamente ao longo do dia: a carga aumenta - novas instâncias são iniciadas, a carga cai - elas são extintas.

- Por questões de segurança, temos dois grupos de Auto Scaling trabalhando para balanceadores - caso as manchas acabem. Um grupo AS - com instâncias normais (sob demanda), o segundo - com spots. O Amazon através do CloudWatch Events avisa em 2 minutos que a instância local será excluída (encerrada). Processamos esses eventos e conseguimos expandir o grupo principal para o número necessário de instâncias, se isso acontecer.

Detalhes aqui - Avisos de interrupção da instância spot .

- Para trabalhar com mais eficiência com o Auto Scaling e usar as máquinas do grupo com pontos ao máximo, usamos esta abordagem:

  1. O grupo spot tem um depósito de lixo superior mais baixo - começamos a aumentar a escala antes.
  2. E um depósito inferior mais baixo - começamos a diminuir mais tarde.
  3. Para um grupo regular, o oposto é verdadeiro.

Armazenamento de Instância EC2


Todo mundo que trabalha com a AWS sabe que as principais unidades usadas para instâncias do EC2 são o EBS (Elastic Block Store). Eles podem ser montados em instâncias, desativados, montados em outras instâncias, capturados instantaneamente a partir deles.

Todos os EBS, dependendo do tipo, são cobrados de uma maneira ou de outra. E eles custam dinheiro bastante tangível.

Ao mesmo tempo, para muitos tipos de instâncias ao criá-los, a conexão de discos locais está disponível - Armazenamento de Instâncias EC2 .

O principal recurso desses discos é que, se você parar a instância com esse disco, após o início, esses dados serão perdidos.

Mas, ao mesmo tempo, eles são condicionalmente gratuitos - há um pagamento apenas para a instância em si.

Esses discos podem ser perfeitamente usados ​​para quaisquer dados temporários que não exijam armazenamento constante - trocas, cache, quaisquer outros dados temporários. O desempenho das unidades do repositório de instâncias é bastante alto: além dos tipos muito antigos de instâncias, os SSDs ou NVMe SSDs agora são usados ​​para eles.

Como resultado: conectamos menos discos EBS, pagamos menos.

S3 Uploads com várias partes incompletas


A discussão acima foi principalmente sobre EC2. A seguir, descrevemos alguns truques que serão salvos ao usar o S3 (Simple Storage Service).

Se você estiver trabalhando ativamente com o S3, provavelmente saberá que o S3 e a maioria dos clientes que trabalham com esse armazenamento oferecem suporte ao Upload Multipart - um objeto grande é carregado com "peças", que são "montadas" em um único objeto.

Isso funciona muito bem, mas há uma emboscada.

Se o download não for concluído por algum motivo (a conexão foi interrompida, por exemplo, e o download não foi retomado), as partes baixadas não serão excluídas por si mesmas. No entanto, eles ocupam espaço, você paga por eles.

E uma surpresa desagradável - esses dados incompletos não são visíveis de maneira alguma quando se trabalha com ferramentas padrão para o S3: nem por meio de "ls" no cli, nem em programas clientes. Você pode encontrá-los, por exemplo, em aws cli usando o comando list-multipart-uploads .

Mas trabalhar com eles é muito cansativo ...

Seria mais lógico escolher alguma opção sobre o armazenamento de uploads incompletos com várias partes nas configurações de um determinado bucket. Mas, por alguma razão, a Amazon não.

No entanto, existe uma maneira de facilitar sua vida e remover automaticamente os uploads incompletos com várias partes. Nas configurações de bucket na guia Gerenciamento, há uma seção Ciclo de vida. Essa é uma ferramenta conveniente que permite configurar várias regras automáticas para trabalhar com objetos: mova-as para outros repositórios, exclua-as após algum tempo (expire) e - incluindo - controle o comportamento de Uploads com várias partes incompletas.

imagem

Um artigo detalhado sobre isso está no blog da AWS - embora com exemplos da interface antiga, mas tudo esteja bem claro.

O importante é que o Ciclo de Vida configurado para excluir dados incompletos funcione não apenas para novos objetos, mas também para os existentes.

A quantidade real de espaço ocupado no S3 pode ser monitorada através do CloudWatch. Quando configuramos a remoção de Uploads com várias partes incompletas, ficamos surpresos ao descobrir que liberamos mais de uma dúzia de terabytes ...

S3 Intelligent Tiering


O S3 possui várias classes de armazenamento diferentes:

  1. Padrão.
  2. IA padrão (acessado com pouca frequência) - para objetos que raramente são acessados.
  3. One Zone-IA - para dados relativamente não críticos. Nesta classe, os objetos são replicados para menos pontos.
  4. O glaciar é um armazenamento muito barato, mas você não pode obter um objeto instantaneamente. Você precisa fazer uma solicitação especial e esperar um pouco.

Todos eles têm diferentes condições de uso e preços diferentes. Eles podem e devem ser combinados - dependendo das suas diferentes tarefas.

Mas, relativamente recentemente, outro tipo muito interessante de armazenamento apareceu - o Intelligent Tiering.

A essência de seu trabalho é a seguinte: por uma pequena taxa adicional, o monitoramento e a análise de seus dados no S3 são realizados, as chamadas são monitoradas e, se não houver chamadas por 30 dias, o objeto será automaticamente movido para o armazenamento de acesso pouco frequente, que custa significativamente menos que o padrão. Se, após algum tempo, o objeto for acessado novamente - nenhuma perda de desempenho ocorrerá ao mesmo tempo - será novamente movido para o repositório de acesso padrão.

A conveniência mais importante: você mesmo não precisa fazer nada.

A Amazon fará tudo "de maneira inteligente" - descobrirá quais objetos onde colocar.

Ao ativar o Intelligent Tiering, economizamos de 10 a 15% em alguns buckets.

Tudo parece bom demais e mágico. Mas não pode haver algumas armadilhas? Eles são e, é claro, devem ser levados em consideração.

  • Há uma taxa adicional para monitorar as instalações. No nosso caso, é totalmente coberto pela economia.
  • Você pode usar o Intelligent Tiering para qualquer objeto. No entanto, objetos menores que 128 Kb nunca serão transferidos para o nível de acesso pouco frequente e sempre serão pagos pelo preço normal.
  • Não é adequado para objetos armazenados por menos de 30 dias. Esses objetos ainda serão pagos com pelo menos 30 dias de antecedência.

Como ativar o Intelligent Tiering?

Você pode especificar explicitamente a classe de armazenamento INTELLIGENT_TIERING na API ou na CLI do S3.

E você pode configurar a regra do Ciclo de Vida, de acordo com a qual, por exemplo, todos os objetos após um determinado tempo de armazenamento serão movidos automaticamente para o Intelligent Tiering.

imagem

Leia mais no mesmo blog da AWS .

Geleira


Se estamos falando de diferentes classes de armazenamento no S3, é claro que vale a pena mencionar o Glacier .

Se você possui dados que precisam ser armazenados por meses e anos, mas cujo acesso é extremamente raro (por exemplo, logs, backups), considere usar o Glacier. O preço de seu uso é muitas vezes menor que o S3 padrão.

Para um trabalho conveniente com o Glacier, você pode usar as mesmas regras do Ciclo de Vida.

Por exemplo, você pode definir uma regra pela qual um objeto será armazenado em um armazenamento regular por algum tempo, por exemplo, 30 a 60 dias (geralmente é necessário acesso aos logs ou backups mais próximos, se falamos sobre o armazenamento), e será movido para Geleira, e depois de 1-2-3 ... anos - completamente removido.

Vai ser muito mais barato do que armazenar simplesmente no S3.

* * *

Falei sobre alguns truques que nós mesmos estamos usando ativamente. A AWS é uma enorme plataforma de infraestrutura. Certamente, não falamos sobre nenhum serviço que você usa. Se houver outras maneiras de economizar na AWS que sejam úteis para você, compartilhe nos comentários.

All Articles