{"id":2260,"date":"2021-06-19T08:34:32","date_gmt":"2021-06-19T11:34:32","guid":{"rendered":"https:\/\/elemarjr.com\/arquiteturadesoftware\/?p=2260"},"modified":"2024-01-16T15:05:38","modified_gmt":"2024-01-16T18:05:38","slug":"back-of-the-envelope-calculations","status":"publish","type":"volume-1","link":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/","title":{"rendered":"AP-C Back-of-the-envelope calculations"},"content":{"rendered":"Boas pr\u00e1ticas de arquitetura de software devem ajudar a determinar a quantidade certa de recursos computacionais necess\u00e1ria para suportar demandas de escala e escopo. Nem mais, nem menos!\n<hr \/>\n<p>Sistemas com recursos insuficientes &#8220;caem&#8221; em ambiente produtivo, comprometendo a confiabilidade e amea\u00e7ando a continuidade dos neg\u00f3cios. Por outro lado, sistemas com recursos excessivos, corroem reservas financeiras, abreviando o tempo de vida de\u00a0<i>startups\u00a0<\/i>ou o lucro.<\/p>\n<h2>Conceitos simples para resolver problemas complexos<\/h2>\n<p><a href=\"https:\/\/research.google\/people\/jeff\/\">Jeff Dean<\/a>, da Google, defende a utiliza\u00e7\u00e3o de uma t\u00e9cnica simples para estimativas, chamada \u201c<em>Back-of-the-Envelope calculations<\/em>&#8220;. Trata-se do uso combinado da imagina\u00e7\u00e3o criativa com algum conhecimento de n\u00fameros relacionados \u00e0 performance.<\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Jeff Dean, Google Senior Fellow<\/p>\r\n<\/p>\n<p>A Google mant\u00e9m 11 n\u00edveis de distin\u00e7\u00e3o para seus engenheiros. O n\u00edvel mais alto &#8211; Google Senior Fellow &#8211; foi conferido a apenas dois profissionais na organiza\u00e7\u00e3o: Jeff Dean e Sundar Pichai.<\/p>\n<p>Sundar Pichai \u00e9 o atual CEO da Google.<\/p>\n<p>Jeff Dean \u00e9 o SVP da Google Research e tem no curr\u00edculo, al\u00e9m do pr\u00f3prio buscador, <a href=\"https:\/\/pt.wikipedia.org\/wiki\/BigTable\">BigTable<\/a>, <a href=\"https:\/\/research.google\/pubs\/pub62\/\">MapReduce<\/a> e <a href=\"https:\/\/developers.google.com\/protocol-buffers\">ProtocolBuffers<\/a>\u00a0e o <a href=\"https:\/\/www.tensorflow.org\">TensorFlow<\/a>.<\/p>\n<p><\/div>\n<p>Seguindo as recomenda\u00e7\u00f5es de Dean, ao projetar uma API, por exemplo, dever\u00edamos estimar quantas requisi\u00e7\u00f5es os principais <em>endpoints<\/em> t\u00eam que atender (importante, tamb\u00e9m, para o estabelecimento de <em>Rate Limiters<\/em>) por um per\u00edodo. Da\u00ed, considerando hor\u00e1rios comuns de consumo, \u00e9 poss\u00edvel inferir quantas requisi\u00e7\u00f5es precisam ser suportadas por hora, minuto e segundo balizando o <em>throughput <\/em>ideal. Adicionadas \u00e0s margens de seguran\u00e7a, tem-se uma boa ideia de dimensionamento de infraestrutura, frente a arquitetura.<\/p>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Rate Limiters<\/p>\r\n<\/p>\n<p>Em sistemas distribu\u00eddos, um <em>rate limiter<\/em> \u00e9 utilizado para restringir o tr\u00e1fego de uma aplica\u00e7\u00e3o cliente para os servidores. Toda vez que um limite de requisi\u00e7\u00f5es \u00e9 atingido, o excedente \u00e9 contido (em uma fila, por exemplo) para processamento posterior ou \u00e9 descartado. S\u00e3o essenciais, mas precisam ser implementados adequadamente.<\/p>\n<p>A ado\u00e7\u00e3o de <em>rate limiters<\/em> previne problemas de nega\u00e7\u00e3o de servi\u00e7o (DoS), em fun\u00e7\u00e3o de uso abusivo, intencional ou n\u00e3o, de um recurso. Por isso, eles s\u00e3o comuns nas arquiteturas de sistemas projetados para a escalabilidade. O <a href=\"https:\/\/help.twitter.com\/en\/rules-and-policies\/twitter-limits\">Twitter, por exemplo, restringe o n\u00famero de tu\u00edtes, por usu\u00e1rio, a 2400 por dia<\/a>. No Instagram, \u00e9 poss\u00edvel realizar no m\u00e1ximo 200 chamadas \u00e0s APIs por hora com um mesmo <em>token<\/em>.<\/p>\n<p>Al\u00e9m de evitar a nega\u00e7\u00e3o de servi\u00e7os,<em> rate limiters <\/em>ajudam a controlar custos, sobretudo em ambientes onde os gastos estejam associados a pagamentos para terceiros conforme ordem de uso.<\/p>\n<p><em>Rate limiters <\/em>podem ser implementados em <em>client-side<\/em>, <em>server-side <\/em>ou em um <em>middleware<\/em>. Implementa\u00e7\u00f5es em <em>client-side <\/em>tem como m\u00e9rito principal a redu\u00e7\u00e3o da press\u00e3o sobre a rede. J\u00e1 implementa\u00e7\u00f5es em <em>server-side <\/em>ou <em>middleware<\/em> s\u00e3o mais \u201cconfi\u00e1veis\u201d, por estarem em ambientes gerenciados, e robustas, visto que permitem regras mais complexas.<\/p>\n<p><\/div>\n<p>O custo computacional e de tempo para o atendimento de cada requisi\u00e7\u00e3o tamb\u00e9m pode ser calculado considerando opera\u00e7\u00f5es como busca e leitura de dados em dispositivos de armazenamento, transfer\u00eancia de dados na rede, compacta\u00e7\u00e3o e etc. Da\u00ed, projetando o volume de requisi\u00e7\u00f5es esperadas, pode-se avaliar a efici\u00eancia de uma solu\u00e7\u00e3o proposta.<\/p>\n<p>H\u00e1 tr\u00eas conceitos b\u00e1sicos para a pr\u00e1tica de <em>Back-of-the-Envelope<\/em> calculations:<\/p>\n<ol>\n<li>Unidades b\u00e1sicas de medida de volumes de dados (pot\u00eancias de 2)<\/li>\n<li>M\u00e9tricas de lat\u00eancia<\/li>\n<li>Disponibilidade<\/li>\n<\/ol>\n<hr \/>\n<p>Em uma <a href=\"https:\/\/youtu.be\/modXC5IWTJI\">palestra em que Dean conta um pouco da trajet\u00f3ria da arquitetura do sistema de buscas da Google<\/a>, ele demonstra a efic\u00e1cia da t\u00e9cnica para projetar um sistema de <em>thumbnails <\/em>(ali\u00e1s, esse \u00e9 um desafio cl\u00e1ssico em entrevistas de System Design para grandes companhias).<\/p>\n<h3>Unidades b\u00e1sicas de medida de volumes de dados<\/h3>\n<p>Mesmo em sistemas gigantescos, que lidam com quantidades monstruosas de dados, \u00e9 fundamental expressar corretamente volumes, usando informa\u00e7\u00f5es b\u00e1sicas.<\/p>\n<p>A unidade fundamental de medida de volumes de dados \u00e9 o\u00a0<em>byte<\/em>, que \u00e9 uma sequ\u00eancia de 8\u00a0<em>bits\u00a0<\/em>(<em>binary digits).\u00a0<\/em>As demais unidades importantes s\u00e3o expressas em pot\u00eancias de 2 (2<sup>n<\/sup>).<\/p>\n<ul>\n<li>1 Kilobyte (KB), 2<sup>10<\/sup> bytes (1024 bytes)<\/li>\n<li>1 Megabyte (MB), 2<sup>20<\/sup> bytes (1.048.576 bytes ou ~1 milh\u00e3o de bytes)<\/li>\n<li>1 Gigabyte (GB), 2<sup>30<\/sup> bytes (1.073.741.824 bytes ou ~1 bilh\u00e3o de bytes)<\/li>\n<li>1 Terabyte (TB), 2<sup>40<\/sup> bytes (1.099.511.627.776 bytes ou ~1 trilh\u00e3o de bytes)<\/li>\n<li>1 Petabyte (PB), 2<sup>50<\/sup> bytes (1.125.899.906.842.624 bytes ou ~1 quatrilh\u00e3o de bytes)<\/li>\n<\/ul>\n<hr \/>\n<div class=\"card-insight\" style=\"background-color: #f0f0f0; width: 100%; padding: 35px 30px 30px 35px; border-radius: 5px 5px 5px 5px; margin-top: 30px; margin-bottom: 35px; font-size: 16px; box-shadow: 0px 4px 0px 0px #dddddd;\">\r\n<p style=\"font-size: 24px; font-weight:bold; line-height: 28px; font-family: Montserrat;\">Megabyte ou Megabit<\/p>\r\n<\/p>\n<p>\u00c9 importante diferenciar Megabytes (MB) de Megabits (Mb [com <span style=\"text-decoration: underline;\"><em>b<\/em><\/span> min\u00fasculo])<\/p>\n<p><strong>Enquanto 1 MB corresponde a 1024 bytes, 1 Mb corresponde a 1024 bits. Ou seja, 1Kb \u00e9 8 vezes menor que um 1KB.<\/strong><\/p>\n<p>KB, MB, GB, TB e PB s\u00e3o unidades de medida geralmente associadas a volumes de dados armazenados. Kb, Mb, Gb, Tb e Pb s\u00e3o unidades de medida geralmente associadas a dados transferidos.<\/div>\n<h3>M\u00e9tricas b\u00e1sicas de lat\u00eancia<\/h3>\n<p>Em 2012, <a href=\"https:\/\/research.google\/people\/jeff\/\">Dr. Jeffrey Dean, da Google,<\/a> compartilhou o custo da lat\u00eancia para algumas opera\u00e7\u00f5es relevantes.<\/p>\n<p><strong>Mesmo n\u00e3o estejam atualizados, sobretudo por ignorarem a evolu\u00e7\u00e3o tecnol\u00f3gica, estes n\u00fameros continuam \u00fateis para quem projeta sistemas.<\/strong><\/p>\n<pre style=\"font-color: white !important;\">Latency Comparison Numbers (~2012)\r\n----------------------------------\r\nL1 cache reference                           0.5 ns\r\nBranch mispredict                            5   ns\r\nL2 cache reference                           7   ns                      14x L1 cache\r\nMutex lock\/unlock                           25   ns\r\nMain memory reference                      100   ns                      20x L2 cache, 200x L1 cache\r\nCompress 1KB with Zippy                  3,000   ns        3 us\r\nSend 1KB over 1 Gbps network            10,000   ns       10 us\r\nRead 4KB randomly from SSD*            150,000   ns      150 us          ~1GB\/sec SSD\r\nRead 1MB sequentially from memory      250,000   ns      250 us\r\nRound trip within same datacenter      500,000   ns      500 us\r\nRead 1MB sequentially from SSD*      1,000,000   ns    1,000 us    1 ms  ~1GB\/sec SSD, 4X memory\r\nDisk seek                           10,000,000   ns   10,000 us   10 ms  20x datacenter roundtrip\r\nRead 1 MB sequentially from disk    20,000,000   ns   20,000 us   20 ms  80x memory, 20X SSD\r\nSend packet CA-&gt;Netherlands-&gt;CA    150,000,000   ns  150,000 us  150 ms\r\n\r\nNotes\r\n-----\r\n1 ns = 10^-9 seconds\r\n1 us = 10^-6 seconds = 1,000 ns\r\n1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns\r\n<\/pre>\n<p>As diferen\u00e7as indicadas ficam ainda mais impactantes quando consideramos escala. Abaixo, segue a mesma rela\u00e7\u00e3o escaladas em um bilh\u00e3o.<\/p>\n<pre>Lets multiply all these durations by a billion:\r\n\r\nMagnitudes:\r\n\r\n### Minute:\r\n    L1 cache reference                  0.5 s         One heart beat (0.5 s)\r\n    Branch mispredict                   5 s           Yawn\r\n    L2 cache reference                  7 s           Long yawn\r\n    Mutex lock\/unlock                   25 s          Making a coffee\r\n\r\n### Hour:\r\n    Main memory reference               100 s         Brushing your teeth\r\n    Compress 1K bytes with Zippy        50 min        One episode of a TV show (including ad breaks)\r\n\r\n\r\n### Day:\r\n    Send 2K bytes over 1 Gbps network   5.5 hr        From lunch to end of work day\r\n\r\n### Week\r\n    SSD random read                     1.7 days      A normal weekend\r\n    Read 1 MB sequentially from memory  2.9 days      A long weekend\r\n    Round trip within same datacenter   5.8 days      A medium vacation\r\n    Read 1 MB sequentially from SSD    11.6 days      Waiting for almost 2 weeks for a delivery\r\n\r\n### Year\r\n    Disk seek                           16.5 weeks    A semester in university\r\n    Read 1 MB sequentially from disk    7.8 months    Almost producing a new human being\r\n    The above 2 together                1 year\r\n\r\n### Decade\r\n    Send packet CA-&gt;Netherlands-&gt;CA     4.8 years     Average time it takes to complete a bachelor's degree\r\n<\/pre>\n<p>Infer\u00eancias importantes:<\/p>\n<ul>\n<li>Operar dados em mem\u00f3ria \u00e9 muito mais perform\u00e1tico do que operar em disco<\/li>\n<li>Comprimir dados, usando algoritmos simples, consome pouco tempo<\/li>\n<li>Geralmente vale muito a pena comprimir dados, antes de transmitir por internet<\/li>\n<\/ul>\n<hr \/>\n<h3>M\u00e9tricas b\u00e1sicas de disponibilidade<\/h3>\n<p><strong>A disponibilidade de um sistema \u00e9 expressa pelo percentual de opera\u00e7\u00f5es executadas abaixo de uma expectativa de lat\u00eancia.<\/strong> Um sistema com 100% de disponibilidade conclui todas as suas opera\u00e7\u00f5es dentro do tempo previsto. Bons sistemas tem disponibilidade acima de 99%.<\/p>\n<p>\u00c9 comum que servi\u00e7os on-line estabele\u00e7am SLAs especificando um n\u00edvel m\u00ednimo de disponibilidade. Geralmente, pela quantidade de &#8220;noves&#8221;. Assim:<\/p>\n<ul>\n<li>Sistemas com disponibilidade de 99% (dois &#8220;noves&#8221;) respondem acima do tempo esperado durante ~14 minutos, todos os dias.<\/li>\n<li>Disponibilidade de 99,9% (tr\u00eas &#8220;noves&#8221;), implica em tempos de resposta ruins por ~1,44 minutos, todos os dias (oito horas em um ano).<\/li>\n<li>Disponibilidade de 99,99% (quatro &#8220;noves&#8221;), implica em tempos de resposta ruins por ~9 segundos, todos os dias (~52 minutos em um ano).<\/li>\n<li>Disponibilidade de 99.999% (cinco &#8220;noves&#8221;) implica em tempos de resposta ruins por ~5 minutos em um ano.<\/li>\n<\/ul>\n<hr \/>\n<p>Eventualmente, disponibilidade \u00e9 expressa de outra forma em acordos de SLA. Por exemplo, as m\u00e1quinas virtuais no Azure operam em julho de 2021 conforme os seguintes termos:<\/p>\n<ul>\n<li>Para todas as m\u00e1quinas virtuais que t\u00eam duas ou mais inst\u00e2ncias implantadas em duas ou mais zonas de disponibilidade na mesma regi\u00e3o do Azure, h\u00e1 garantias de conectividade de m\u00e1quina virtual para pelo menos uma inst\u00e2ncia pelo menos <em>99,99%<\/em> do tempo.<\/li>\n<li>Para todas as m\u00e1quinas virtuais que t\u00eam duas ou mais inst\u00e2ncias implantadas no mesmo conjunto de disponibilidade ou no mesmo grupo de <em>hosts<\/em> dedicados, h\u00e1 garantias de conectividade de m\u00e1quina virtual para pelo menos uma inst\u00e2ncia pelo menos<em> 99,95%<\/em> do tempo.<\/li>\n<li>Para qualquer m\u00e1quina virtual de inst\u00e2ncia \u00fanica usando Premium SSD ou Ultra Disk para todos os discos do sistema operacional e discos de dados, h\u00e1 garantias de conectividade de m\u00e1quina virtual de pelo menos <em>99,9%.<\/em><\/li>\n<li>Para qualquer m\u00e1quina virtual de inst\u00e2ncia \u00fanica usando discos gerenciados SSD padr\u00e3o para discos do sistema operacional e discos de dados, h\u00e1 garantias de conectividade de m\u00e1quina virtual de pelo menos <em>99,5%.<\/em><\/li>\n<li>Para qualquer m\u00e1quina virtual de inst\u00e2ncia \u00fanica usando discos gerenciados de HDD padr\u00e3o para discos do sistema operacional e discos de dados, h\u00e1 garantias de conectividade de m\u00e1quina virtual de pelo menos 95%<em>.<\/em><\/li>\n<\/ul>\n<h2>Um exemplo pr\u00e1tico<\/h2>\n<p>Oren Eini (Ayende), fez uso dessa t\u00e9cnica em um <a href=\"https:\/\/ayende.com\/blog\/193026-C\/building-a-social-media-platform-without-going-bankrupt-part-i-laying-the-numbers\">post de uma s\u00e9rie discutindo o desafio de reconstruir uma rede social como o twitter<\/a>.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-4219\" src=\"https:\/\/www.eximiaco.tech\/wp-content\/uploads\/sites\/2\/2021\/02\/oren-1024x645.png\" alt=\"\" \/><\/p>\n<p>A ideia de \u201cBack-of-the-envelope calculations\u201d, que em bom portugu\u00eas seria algo como \u201cconta de padeiro\u201d, \u00e9 utilizar c\u00e1lculos simples para fundamentar a tomada de decis\u00f5es t\u00e9cnicas. Funciona para a Google, provavelmente funcionar\u00e1 tamb\u00e9m para voc\u00ea tamb\u00e9m. \u00c9 uma solu\u00e7\u00e3o simples, talvez at\u00e9 em demasia, mas \u00e9 \u201cmais do que o nada\u201d que parece ser o padr\u00e3o comum nas organiza\u00e7\u00f5es.<\/p>\n<h2><\/h2>\n","protected":false},"featured_media":2277,"parent":0,"comment_status":"open","ping_status":"closed","template":"","url":[72],"sessoes":[73],"apendices":[44],"capitulos":[],"class_list":["post-2260","volume-1","type-volume-1","status-publish","has-post-thumbnail","hentry","url-permanente","sessoes-x-apendice","apendices-apendice-c"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software\" \/>\n<meta property=\"og:description\" content=\"Sistemas com recursos insuficientes &#8220;caem&#8221; em ambiente produtivo, comprometendo a confiabilidade e amea\u00e7ando a continuidade dos neg\u00f3cios. Por outro lado, sistemas com recursos excessivos, corroem reservas financeiras, abreviando o tempo de vida de\u00a0startups\u00a0ou o lucro. Conceitos simples para resolver problemas complexos Jeff Dean, da Google, defende a utiliza\u00e7\u00e3o de uma t\u00e9cnica simples para estimativas, chamada [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/\" \/>\n<meta property=\"og:site_name\" content=\"Manual do Arquiteto de Software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/eximiaco\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-16T18:05:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@eximiaco\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/\",\"name\":\"AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software\",\"isPartOf\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png\",\"datePublished\":\"2021-06-19T11:34:32+00:00\",\"dateModified\":\"2024-01-16T18:05:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png\",\"width\":1024,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Volume 1\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AP-C Back-of-the-envelope calculations\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"name\":\"Manual do Arquiteto de Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\",\"name\":\"EximiaCo\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"width\":150,\"height\":150,\"caption\":\"EximiaCo\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/eximiaco\",\"https:\/\/x.com\/eximiaco\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/","og_locale":"pt_BR","og_type":"article","og_title":"AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software","og_description":"Sistemas com recursos insuficientes &#8220;caem&#8221; em ambiente produtivo, comprometendo a confiabilidade e amea\u00e7ando a continuidade dos neg\u00f3cios. Por outro lado, sistemas com recursos excessivos, corroem reservas financeiras, abreviando o tempo de vida de\u00a0startups\u00a0ou o lucro. Conceitos simples para resolver problemas complexos Jeff Dean, da Google, defende a utiliza\u00e7\u00e3o de uma t\u00e9cnica simples para estimativas, chamada [&hellip;]","og_url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/","og_site_name":"Manual do Arquiteto de Software","article_publisher":"https:\/\/facebook.com\/eximiaco","article_modified_time":"2024-01-16T18:05:38+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@eximiaco","twitter_misc":{"Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/","name":"AP-C Back-of-the-envelope calculations - Manual do Arquiteto de Software","isPartOf":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website"},"primaryImageOfPage":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage"},"thumbnailUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png","datePublished":"2021-06-19T11:34:32+00:00","dateModified":"2024-01-16T18:05:38+00:00","breadcrumb":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#primaryimage","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/06\/numbers.png","width":1024,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/back-of-the-envelope-calculations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/"},{"@type":"ListItem","position":2,"name":"Volume 1","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/"},{"@type":"ListItem","position":3,"name":"AP-C Back-of-the-envelope calculations"}]},{"@type":"WebSite","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","name":"Manual do Arquiteto de Software","description":"","publisher":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization","name":"EximiaCo","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","width":150,"height":150,"caption":"EximiaCo"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/eximiaco","https:\/\/x.com\/eximiaco"]}]}},"_links":{"self":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1\/2260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1"}],"about":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/types\/volume-1"}],"replies":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/comments?post=2260"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media\/2277"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media?parent=2260"}],"wp:term":[{"taxonomy":"url","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/url?post=2260"},{"taxonomy":"sessoes","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/sessoes?post=2260"},{"taxonomy":"apendices","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/apendices?post=2260"},{"taxonomy":"capitulos","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/capitulos?post=2260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}