<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Felipe Sabadini</title>
    <description>The latest articles on DEV Community by Felipe Sabadini (@felipesabadini).</description>
    <link>https://dev.to/felipesabadini</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F736538%2F25865edf-618e-4e1c-8dee-eb28dcaa7fcc.jpeg</url>
      <title>DEV Community: Felipe Sabadini</title>
      <link>https://dev.to/felipesabadini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/felipesabadini"/>
    <language>en</language>
    <item>
      <title>O futuro de aplicações web com baixo custo</title>
      <dc:creator>Felipe Sabadini</dc:creator>
      <pubDate>Mon, 25 Oct 2021 23:10:47 +0000</pubDate>
      <link>https://dev.to/fourpixelit/o-futuro-de-aplicacoes-web-com-baixo-custo-1e6g</link>
      <guid>https://dev.to/fourpixelit/o-futuro-de-aplicacoes-web-com-baixo-custo-1e6g</guid>
      <description>&lt;p&gt;Na maioria das vezes quando estamos construindo aplicações web, sempre pensamos primeiramente em linguagens de programação, frameworks, banco de dados, arquiteturas (Hexagonal, Onion, CQRS, …), se irá ser monolítico, microsserviços e etc. &lt;/p&gt;

&lt;p&gt;E depois de todas essas decisões começamos a codificar e realizar os testes na máquina de desenvolvimento, até chegar o grande momento de fazer o deploy no cloud (AWS, Oracle Cloud, Google Cloud, Azure, …).&lt;/p&gt;

&lt;p&gt;E aí já vem aquela pergunta: quanto de hardware nós iremos precisar para rodar essa aplicação?&lt;/p&gt;

&lt;p&gt;Uma boa parte das pessoas não executam um teste de estresse, para tentar simular um volume de usuários utilizando o sistema para obter uma métrica e tentar dimensionar o tamanho do hardware necessário.&lt;/p&gt;

&lt;p&gt;Então começamos a fazer chutes, como por exemplo: definir o hardware da máquina de desenvolvimento como uma configuração mínima para rodar o ambiente de produção.&lt;/p&gt;

&lt;p&gt;E após as definições de hardware baseada em métricas ou chutes começamos a pensar sobre qual cloud utilizar. E aí já pensando logo de cara no case Netflix, pois minha aplicação é muito similar, precisamos da mesma escala e agilidade que eles utilizam e eles utilizam a AWS, uma das maiores plataformas de computação na nuvem do mundo.&lt;/p&gt;

&lt;p&gt;Então, bora lá criar as máquinas e começar a fazer o deploy!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CcGZMCxh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/-2Z0Y3Kk8nU/maxresdefault.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CcGZMCxh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ytimg.com/vi/-2Z0Y3Kk8nU/maxresdefault.jpg" alt="alt text" title="image Title"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E agora chegamos em uma parte bem interessante da aplicação que foi construída: as faturas HAHAHAH. Mas a aplicação é &lt;em&gt;“incrivelmente incrível”&lt;/em&gt;, todos os clientes felizes, kubernetes escalando a aplicação monstruosamente (hahahahah), monitoramento 100% (haahahahaha), sem dor de cabeça com o cloud.&lt;/p&gt;

&lt;p&gt;E os custos do projeto estão começando a ficar fora do orçamento, sem margem para negociação, preço da aplicação fora de mercado ou até mesmo o caso em que a aplicação fica insustentável.&lt;/p&gt;

&lt;p&gt;E começamos a pensar sobre o que foi feito, se realmente o código da aplicação foi bem implementado, se foi um erro a escolha das linguagens de programação, frameworks, banco de dados, etc.&lt;/p&gt;

&lt;p&gt;Então começamos a revisar: verificar se não tem como reduzir o números de máquinas ou até mesmo refazer alguma parte do código para melhorar o desempenho para tentar diminuir os custos.&lt;/p&gt;

&lt;p&gt;E em alguns casos até paramos de monitorar a aplicação por &lt;strong&gt;ACHAR&lt;/strong&gt; que isso realmente vai reduzir os custos. Por que a aplicação que foi escrita está &lt;em&gt;“incrivelmente incrível”&lt;/em&gt;, zero bug e uptime 100%.&lt;/p&gt;

&lt;p&gt;E mesmo com essa decisão os problemas de custo ainda não foram resolvidos. E aí a pergunta volta para a mesa novamente: como podemos reduzir os custos dentro do cloud escolhido e sem alterar o código já existente da aplicação?&lt;/p&gt;

&lt;p&gt;Para exemplificar o que foi relatado até agora, iremos usar as seguintes decisões:&lt;/p&gt;

&lt;h2&gt;
  
  
  Início de tudo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BFrF4oWa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://files.nsctotal.com.br/s3fs-public/2019-08/MTX01_0.jpg%3Fnk1pZS3h9LJZOqvkHvlwINcM1Jqe8TzQ" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BFrF4oWa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://files.nsctotal.com.br/s3fs-public/2019-08/MTX01_0.jpg%3Fnk1pZS3h9LJZOqvkHvlwINcM1Jqe8TzQ" alt="alt text" title="image Title"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stack escolhido foi (Java 17, Spring Boot, JPA e PostgreSQL) e a aplicação é um CRUD SIMPLES de cadastro de tutoriais (&lt;a href="https://github.com/fourpixelit/simplecrud-java"&gt;https://github.com/fourpixelit/simplecrud-java&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;AWS (❤️❤️❤️), máquinas rodando no brasil para que os clientes tenham uma latência menor e não tenham problemas com as rotas de DNS estrangeiras.&lt;/p&gt;

&lt;p&gt;A máquina escolhida é do tipo C5 de 2vCpu e 4GB de memória ram, que tem um custo mensal em torno de 101,33 dólares.&lt;br&gt;
Os testes serão executados no Linux(Ubuntu 20.04), Docker versão 20.10.10, docker-compose versão 2.0.1 e para fazer um teste de estresse em nosso exemplo vamos utilizar o K6.&lt;/p&gt;

&lt;p&gt;Vamos simular um ambiente onde iniciamos com 150 usuários e depois simulamos um pico de 300 e no final diminuímos para 50 usuários.&lt;/p&gt;

&lt;p&gt;Nesse cenário os usuários irão cadastrar, editar, publicar e depois remover o tutorial.&lt;/p&gt;

&lt;p&gt;Os resultados desse primeiro benchmark está aqui:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Processadores&lt;/th&gt;
&lt;th&gt;Tempo de inicialização&lt;/th&gt;
&lt;th&gt;Total de requisições&lt;/th&gt;
&lt;th&gt;Requisições por segundos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intel&lt;/td&gt;
&lt;td&gt;5.725&lt;/td&gt;
&lt;td&gt;401484&lt;/td&gt;
&lt;td&gt;742.042908&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Troca de INTEL por AMD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G2-NIBrv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://adrenaline.com.br/uploads/chamadas/amd-ryzen-5000-xt-revisao1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G2-NIBrv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://adrenaline.com.br/uploads/chamadas/amd-ryzen-5000-xt-revisao1.jpg" alt="alt text" title="image Title"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Migrando para uma máquina do tipo C5a com as mesma configuração só que com processadores AMD, que tem o custo mensal em torno de 91,84 dólares.&lt;/p&gt;

&lt;p&gt;O custo tem uma diferença de aproximadamente 10%, mas como fica o desempenho ?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Processadores&lt;/th&gt;
&lt;th&gt;Tempo de inicialização&lt;/th&gt;
&lt;th&gt;Total de requisições&lt;/th&gt;
&lt;th&gt;requisições por segundos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intel&lt;/td&gt;
&lt;td&gt;5.725&lt;/td&gt;
&lt;td&gt;401484&lt;/td&gt;
&lt;td&gt;742.042908&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;6.609&lt;/td&gt;
&lt;td&gt;400260&lt;/td&gt;
&lt;td&gt;739.773979&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Após essa troca de INTEL para AMD, melhoramos o nosso custo mas, e agora? O que eu posso fazer para continuar reduzindo o custo? Reescrever toda a aplicação?&lt;/p&gt;

&lt;h2&gt;
  
  
  E as outras arquiteturas de processadores?
&lt;/h2&gt;

&lt;p&gt;Existe algo no mundo diferente da arquitetura x86 (INTEL e AMD)?&lt;/p&gt;

&lt;p&gt;Sim, existe a arquitetura ARM (&lt;a href="https://en.wikipedia.org/wiki/ARM_architecture"&gt;https://en.wikipedia.org/wiki/ARM_architecture&lt;/a&gt;) e a AWS oferece os processadores desenvolvidos por ela mesmo.&lt;/p&gt;

&lt;p&gt;Migrando para uma máquina do tipo C6g com as mesma configurações só que com processadores Graviton, com um custo mensal em torno de 82,20 dólares.&lt;/p&gt;

&lt;p&gt;10% a menos do que AMD e 20% a menos que INTEL?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--axJs31fm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.dicionariopopular.com/imagens/giphy-1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--axJs31fm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn.dicionariopopular.com/imagens/giphy-1.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como será o desempenho da aplicação utilizando isso?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Processadores&lt;/th&gt;
&lt;th&gt;Tempo de inicialização&lt;/th&gt;
&lt;th&gt;Total de requisições&lt;/th&gt;
&lt;th&gt;requisições por segundos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intel&lt;/td&gt;
&lt;td&gt;5.725&lt;/td&gt;
&lt;td&gt;401484&lt;/td&gt;
&lt;td&gt;742.042908&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;6.609&lt;/td&gt;
&lt;td&gt;400260&lt;/td&gt;
&lt;td&gt;739.773979&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Graviton&lt;/td&gt;
&lt;td&gt;5.292&lt;/td&gt;
&lt;td&gt;402412&lt;/td&gt;
&lt;td&gt;743.767445&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Só existe na AWS?
&lt;/h3&gt;

&lt;p&gt;Qual outro cloud que oferece processadores ARM?&lt;/p&gt;

&lt;p&gt;Decidimos testar a Oracle Cloud, a máquina do tipo A1 com as mesmas configurações das que foram utilizadas na AWS Cloud, tem o custo mensal em torno de 20 dólares.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--koWquC31--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/ECHIzpxW4AMrgo3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--koWquC31--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/ECHIzpxW4AMrgo3.jpg" alt="alt text" title="image Title"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então temos uma diferença de 80% para o Intel, 78% da AMD e 75% da AWS Graviton em custos? Como será o desempenho disso?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Processadores&lt;/th&gt;
&lt;th&gt;Tempo de inicialização&lt;/th&gt;
&lt;th&gt;Total de requisições&lt;/th&gt;
&lt;th&gt;requisições por segundos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intel&lt;/td&gt;
&lt;td&gt;5.725&lt;/td&gt;
&lt;td&gt;401484&lt;/td&gt;
&lt;td&gt;742.042908&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;6.609&lt;/td&gt;
&lt;td&gt;400260&lt;/td&gt;
&lt;td&gt;739.773979&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Graviton&lt;/td&gt;
&lt;td&gt;5.292&lt;/td&gt;
&lt;td&gt;402412&lt;/td&gt;
&lt;td&gt;743.767445&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle A1&lt;/td&gt;
&lt;td&gt;5.747&lt;/td&gt;
&lt;td&gt;386708&lt;/td&gt;
&lt;td&gt;714.695072&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nos testes o uso de CPU ficou em alguns momentos em 100%, mas ainda conseguiu fazer 714 requisições por segundo. E se a gente adicionar mais 2 vCpu? Pode ser que se comparando hardware ficaria até injusto com os outros testes, mas olhando o custo mensal de cada hardware volta a ficar justo.&lt;/p&gt;

&lt;p&gt;A máquina do tipo A1 com 4 vCpu e 4GB de memória o custo mensal seria em torno de 33 dólares. A diferença mudaria para 67% para o Intel, 64% da AMD e 59% da AWS Graviton em custo.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Processadores&lt;/th&gt;
&lt;th&gt;Tempo de inicialização&lt;/th&gt;
&lt;th&gt;Total de requisições&lt;/th&gt;
&lt;th&gt;requisições por segundos&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intel&lt;/td&gt;
&lt;td&gt;5.725&lt;/td&gt;
&lt;td&gt;401484&lt;/td&gt;
&lt;td&gt;742.042908&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMD&lt;/td&gt;
&lt;td&gt;6.609&lt;/td&gt;
&lt;td&gt;400260&lt;/td&gt;
&lt;td&gt;739.773979&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Graviton&lt;/td&gt;
&lt;td&gt;5.292&lt;/td&gt;
&lt;td&gt;402412&lt;/td&gt;
&lt;td&gt;743.767445&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle A1&lt;/td&gt;
&lt;td&gt;5.747&lt;/td&gt;
&lt;td&gt;386708&lt;/td&gt;
&lt;td&gt;714.695072&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oracle A1 - 4 vCpu&lt;/td&gt;
&lt;td&gt;4.91&lt;/td&gt;
&lt;td&gt;403800&lt;/td&gt;
&lt;td&gt;746.391315&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O cenário pode até ser fictício para alguns, mas foi muito real na minha realidade dentro do mundo de empresas de tecnologia: &lt;strong&gt;que as decisões não são somente sobre a tecnologia utilizada no stack da aplicação, escala, monitoramento e etc&lt;/strong&gt;. Não é só disso que uma aplicação vive! Além de resolver o problema que foi lhe dado, ela ainda precisa ser competitiva no mercado. &lt;/p&gt;

&lt;p&gt;E nem tudo está relacionado ao stack escolhido ou em reescrever as aplicações do zero, hoje estamos rodando com stack (Java, Golang e NodeJS) a mais de 6 meses em processadores ARM e em aproximadamente 50 máquinas. E com tudo que foi apresentado aqui conseguimos nos tornar dentro da própria AWS 25% mais competitivo, mas quando olhamos para outro cloud, conseguimos subir esse número para 65% &lt;strong&gt;sem reescrever nenhuma linha de código da aplicação, apenas trocando a arquitetura de processadores das máquinas utilizadas&lt;/strong&gt;. &lt;/p&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
