DEV Community

Pode me chamar de Juscélio Reis
Pode me chamar de Juscélio Reis

Posted on • Originally published at Medium on

Maximizando a entrega de conteúdo e cortando os gastos!

Como abominava essa imagem!

Já esperou ansioso pelo resultado de algum concurso, vestibular ou aguardou ansiosamente a liberação de algum outro resultado pela internet? E quando finalmente chegou o horário para descobrir o resultado, apareceu a mensagem sistema indisponível ou site fora do ar, creio que você não era o único ansioso aguardando pelo resultado. Se isso não aconteceu com você, acredito que conhece alguém que passou por isso.

Durante minha pequena trajetória profissional vi muitas soluções para chegar ao tão almejado resultado, atender a demanda sem que o sistema fique fora do ar. Porem para alcançar esse resultado, vejo pessoas gastando muito, mas muito mesmo, quando falei muito considere algo acima dos R$ 50.000,00 fácil. Também observei pessoas implementando soluções só por que era do fornecedor X ou Y. Mas poucas vezes vi alguém procurar uma solução visando o lado econômico.

Do outro lado da mesa, vamos colocar assim, via pessoas dizendo que o site estava fora do ar, e ainda sugeriam que a solução era Keep Calm and Press F5 (a imagem que ilustra essa historia), já outras pessoas ajudavam hospedando o arquivo em seus sites e compartilhavam o link, esse ato já era uma grande ajuda, bom cheguei a pensar assim até um dia onde precisei atualizar aquele arquivo! E agora José? Agora o link original já estava nas redes sociais e sendo compartilhado pelo aplicativos de mensageira mais comuns como o WhatsApp, telegram, facebook e etc. Se por acaso eu apenas alterar o arquivo original, exemplo http://meudominio.com/arquivo1.pdf , todos os que baixaram o arquivo e hospedaram em seus sites, exemplo http://outrodominio.com/arquivo1.pdf , a partir do momento que eu substituir o arquivo original, todo os outros links estarão errados, ou seja não serão atualizados. E o motivo para isso é simples, minha solução não tem a confiança do meu publico, eles sabem que meu sistema pode ficar fora do ar.

Recentemente passei por uma situação na qual era preciso entregar um grande volume (digamos 146,92TB com picos de 7TB dia)de arquivos ao máximo de usuários possíveis em um período muito pequeno, e pasmem, a solução encontrada chegou a alguns dólares.

Como é possível resolver isso?

Olha que interessante, com o advento da Computação em Nuvem eu consigo entregar uma quantidade de dados aos meus usuários sem ter que me preocupar com contratos de link de internet, isso mesmo eu posso entregar 10 TB em um mês e 10 MB em outro e eu só vou pagar pelo que for entregue aos meus usuários (entenda estou falando de provedor de nuvem publica). Já pesquisou quanto custa um link de 100MB dedicado? Cuidado para não cair da cadeira.

Bandwidth Costs Around the World

Alem de conseguir entregar preciso de uma solução para armazenar esses arquivos, e se possível garantir um Service Level Agreement (SLA) bem alto do tipo 99,9%. A sua solução atual chega a esse SLA?

Já participou de eventos de TI ou se conversou com algum vendedor de Computação em nuvem, e ouviu que a computação em nuvem possui recursos computacionais praticamente infinito. Chego a concordo com essa afirmação, porem nada sai de graça. Você consegue tudo, desde que pague. Agora imagine qual o impacto de um erro ou uma solução mal planejada para o ambiente da computação em nuvem! Vai sair bem caro isso.

Agora vamos pensar na solução ideal:

  • Preciso entregar X arquivos para N usuários.
  • Preciso armazenar esses arquivos em um serviço confiável.
  • Preciso de banda de internet o suficiente para que não deixe meu serviço indisponível.
  • Não posso gastar dezenas de milhares de dólares.
  • Não posso ter um contrato de longo prazo, tenho que pensar em 1 ano ou menos.

O provedor de nuvem publica atende quase todos os requisitos, mas vamos fazer uma analise financeira.

  • Para o armazenamento os primeiros 50 TB/mês custa $0.0405 por GB.
  • Para o download as solicitações GET e todas as outras $0.0056 por 10.000 solicitações.
  • Acesso do meu serviço de armazenamento para a internet Primeiro 1 GB/mês custa $0.000 por GB. Agora para os próximos gigas até 10 TB/mês custa $0.250 por GB

Esses dados estou usando como base de calculo o serviço S3 da Amazon.

Preço Amazon S3 - AWS

O valor de armazenamento não esta caro pagaria $41,472 por 1 TB, qual o valor do armazenamento dentro do seu datacenter? Agora o valor da transferência de dados para a internet você estaria pagando $2560,00 para transferir 10TB por mês. Isso seria um mega ponto negativo para essa solução. Mas nesses ultimos 30 dias meus usuários consumiram 146,91 TB, isso chega perto de $11349.62 (só um pequeno detalhe estamos falando de dólares).

Se não acredita consulte por você: https://calculator.s3.amazonaws.com/index.html#r=IAD&s=S3&key=calc-63461913-69B1-4B60-829F-BF857228DFBE

E se acha que no azure seria diferente, olhe como seria R$ 94.443,11 mês:

Caro leitor, chegou a hora de falar francamente, se esta utilizando algum serviço de nuvem publica tenha em mente uma grande verdade, o importante não é o provedor de nuvem publica que estamos utilizando, e sim o valor que estamos entregando ao negocio da nossa empresa, consequentemente temos de entregar a melhor experiencia positiva para nossos usuários.

Dessa forma podemos utilizar outro serviço para nos ajudar aqui, já conhecem o termo Content Delivery Network (CDN)? Pois bem, existe um serviço que recomendo a todos os meus clientes, esse seria o CloudFlare. Os seus preço variam de $0 a $200 mensais, existe um outro plano mais customizado de acordo com a a sua necessidade. O ponto mais importante é que mesmo na versão gratuita eles oferecem uma solução de CDN para arquivos de até 512 MB, e como falei antes pagando nada.

Global Content Delivery Network (CDN) Service | Cloudflare

Bom já conseguimos entregar nossos arquivos de forma simples e sem indisponibilidade por apenas $0, ok… sem indisponibilidade é um exagero, porem aumentamos nossa disponibilidade consideravelmente. E sim eu sei que temos um limite no tamanho dos arquivos, mas pelo preço que vamos pagar acredito ser aceitável e no final das contas, para minha realidade, era mais que o suficiente.

Ainda existe um grande problema: e quando eu precisar atualizar esse arquivo? Alguma sugestão? Pense ai, já falo qual foi a minha.

Como meus arquivos estavam no S3 aproveitei e usei outro serviço da Amazon o AWS Lambda. Um dos motivos, o principal, é o nível gratuito onde permite ter 1 milhão de requisições mês e 400.000 GB/segundo de tempo de computação por mês. Outro motivo, é que esse tipo de solução permite capturar os eventos de criação e exclusão desses arquivos do meu bucket no S3 e executar um código customizado. Sendo assim após a ocorrência desses eventos eu mando uma requisição para a API do CloudFlare forçando a atualização do cache.

AWS Lambda - Computação sem servidor

Eu deixei esse código para limpar o cache no CloudFlare publico e noGitHub basta acessar o link abaixo. Também deixei o binário pronto para a utilização, basta baixar o arquivo AWSLambdaS3.CloudFlarePurgeCache.zip que esta na release e configurar diretamente pelo painel web da AWS.

juscelior/aws-lambda-s3-cloudflare-cdn-purge-cache

Essa solução poderia ser implementada usando a stack do Azure, sem problema nenhum e sem perca de funcionalidade, basta implementar uma Azure function e capturar os eventos do Azure Blob Storage. O mais importante, como já falei anteriormente, não é qual o meu provedor mas sim qual a minha solução e como aplicar. Nesse caso que utilizei para escrever esse artigo tive uma economia de pelo menos $ 11.000,00 (dolares). O profissional de TI não é mais aquele que só executa ou que só criar um CRUD, ele também deve estar alinhado com a estrategia corporativa, e sempre que possível cortar gastos desnecessários sempre que possível.

Para finalizar deixa esse artigo como uma dica de leitura para todos os profissionais de TI que chegaram até aqui:

Serverless — the future of software architecture?


Top comments (0)