{"id":1515,"date":"2025-04-18T16:02:39","date_gmt":"2025-04-18T16:02:39","guid":{"rendered":"https:\/\/mugnos-it.com\/?p=1515"},"modified":"2025-06-03T00:50:52","modified_gmt":"2025-06-03T00:50:52","slug":"controle-de-trafego-em-apis-estrategia-ou-esperanca","status":"publish","type":"post","link":"https:\/\/mugnos-it.com\/pt\/controle-de-trafego-em-apis-estrategia-ou-esperanca\/","title":{"rendered":"Controle de Tr\u00e1fego em APIs: Estrat\u00e9gia ou Esperan\u00e7a?"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"1515\" class=\"elementor elementor-1515\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-47776607 e-flex e-con-boxed e-con e-parent\" data-id=\"47776607\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-20fdab6b elementor-widget elementor-widget-text-editor\" data-id=\"20fdab6b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\n<p id=\"1d614600-107e-8039-8c37-c2d5f07fe7be\">N\u00e3o aconteceu uma, nem duas, nem tr\u00eas&#8230; Mas perdi as contas de quantas vezes j\u00e1 vi sistemas <strong>dando timeout<\/strong> por causa de excesso de conex\u00f5es \u2014 seja por bugs internos, efeitos colaterais de integra\u00e7\u00f5es mal feitas, robos ou at\u00e9 mesmo por ataques simples como deny of service. \ud83d\ude2c<br><br>E o pior: o timeout n\u00e3o vem com um<br><strong>HTTP 429 (Too Many Requests)<\/strong>, que avisa o cliente sobre o excesso pois tem algum mecanismo de controle de tr\u00e1fego ativo. Ele chega com um belo <strong>500 Internal Server Error<\/strong>\u2026 ou pior, um <strong>504 Gateway Timeout<\/strong>. Ou seja, pro usu\u00e1rio, parece que <strong>o sistema caiu de vez<\/strong>.<br><\/p>\n\n\n\n<p id=\"1d614600-107e-80e1-bedd-d2b9e3932cc4\">E sabe o que \u00e9 mais frustrante? Em muitos casos, bastava uma coisa simples pra evitar o desastre: <strong>limite de tr\u00e1fego bem configurado<\/strong>. O famoso \u2014 e muitas vezes esquecido \u2014 <strong>Rate Limiting<\/strong>.<br><\/p>\n\n\n\n<p id=\"1d614600-107e-80d4-bd9b-f76ab17021cf\">Aplicar limites <strong>n\u00e3o \u00e9 s\u00f3 uma boa pr\u00e1tica<\/strong>. \u00c9 <strong>sobreviv\u00eancia arquitetural<\/strong>, especialmente quando falamos de APIs <strong>p\u00fablicas<\/strong>. (Mas n\u00e3o se engane: j\u00e1 vi muito sistema quebrar por causa de uma API interna mal protegida. Basta uma nova funcionalidade no upstream, e pronto: o downstream implode \ud83d\ude2c).<br><\/p>\n\n\n\n<p id=\"1d614600-107e-80bb-812a-f6a71fefc4ed\">Ali\u00e1s, essa \u00e9 uma daquelas perguntinhas que gosto de soltar quando estou entrevistando algu\u00e9m: <em>\u201cSe voc\u00ea fosse criar uma API p\u00fablica, o que levaria em considera\u00e7\u00e3o?\u201d<br><\/em><\/p>\n\n\n\n<p id=\"1d614600-107e-805f-b286-c6eb2314eb6b\">Nem sempre a resposta vem com \u201crate limit\u201d, mas quando vem, j\u00e1 sei que o b\u00e1sico t\u00e1 no radar. E isso me d\u00e1 abertura pra explorar <strong>at\u00e9 onde essa pessoa realmente entende<\/strong> de padr\u00f5es de resili\u00eancia e seguran\u00e7a.<br><\/p>\n\n\n\n<p id=\"1d614600-107e-8046-8cf8-c6f85a5b4e19\">Com isso, vamos falar sobre Controle de Tr\u00e1fego em APIs\u2026.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-8090-9939-dd9b2fb4d36d\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1d614600-107e-8070-9566-ca372a7e8610\">O que \u00e9 Controle de Tr\u00e1fego em APIs?<br><\/h2>\n\n\n\n<p id=\"1d614600-107e-80ce-9ab7-ec33683a7ae5\">De forma simples: <strong>controle de tr\u00e1fego<\/strong> \u00e9 o conjunto de estrat\u00e9gias para evitar que sua API seja sobrecarregada por requisi\u00e7\u00f5es \u2014 leg\u00edtimas ou n\u00e3o.<br><\/p>\n\n\n\n<p id=\"1d614600-107e-8063-b4e9-c19b256d8d0f\">Voc\u00ea define <strong>limites de consumo<\/strong> por usu\u00e1rio, IP, token, rota ou at\u00e9 por regi\u00e3o geogr\u00e1fica. Assim, consegue proteger seu sistema contra picos repentinos de tr\u00e1fego, prevenir abusos e garantir <strong>qualidade de servi\u00e7o para todos<\/strong>.<\/p>\n\n\n\n<p id=\"1d614600-107e-8024-9b16-ebf8ef106c21\">E vale refor\u00e7ar: na maioria dos casos, voc\u00ea <strong>n\u00e3o ativa um \u00fanico tipo de limite<\/strong>, mas sim <strong>v\u00e1rios combinados<\/strong>. Por exemplo, pode limitar a quantidade de requisi\u00e7\u00f5es por IP, restringir a\u00e7\u00f5es espec\u00edficas por usu\u00e1rio (como cria\u00e7\u00e3o de pedidos, envio de e-mails, login etc.), e ainda aplicar regras diferentes para ambientes de teste e produ\u00e7\u00e3o.<\/p>\n\n\n\n<p id=\"1d614600-107e-80a3-a4b3-e97d85c79851\">Esse controle mais granular \u00e9 essencial pra evitar que um \u00fanico ponto de entrada derrube todo o sistema \u2014 e permite que voc\u00ea tenha <strong>respostas mais inteligentes e proporcionais<\/strong>, ao inv\u00e9s de simplesmente bloquear tudo ou deixar tudo liberado.<\/p>\n\n\n\n<p id=\"1d614600-107e-80b8-b4a0-f52373702d8a\"><br>Nesse newsletter, vamos focar em uma das estrat\u00e9gias mais conhecidas e eficazes dentro do controle de tr\u00e1fego: o<br><strong>Rate Limiting<\/strong>.<\/p>\n\n\n\n<p id=\"1d614600-107e-8025-b730-cef03a4eb6fb\">Apesar de existirem outras t\u00e9cnicas (como throttling, quota management, circuit breakers, entre outras), o rate limiting \u00e9 um dos primeiros mecanismos que voc\u00ea deve considerar quando pensa em proteger sua API de abusos e manter o sistema <strong>resiliente e est\u00e1vel.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-80d6-a359-e1a45e238b43\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1d614600-107e-8063-adaa-e439df341cde\">Por que aplicar Rate Limiting?<br><\/h2>\n\n\n\n<p id=\"1d614600-107e-807e-9162-f89eb4792d31\">Bom, depois da introdu\u00e7\u00e3o voc\u00ea ainda tem d\u00favida, eu tenho uma pergunta pra voc\u00ea : \u201c<em>Por que voc\u00ea usa cinto de seguran\u00e7a?\u201d.<\/em> N\u00e3o ficaria surpreso em ouvir uma resposta do tipo \u201cEu n\u00e3o uso pois me garanto no volante e s\u00f3 estou na cidade\u201d, nesse caso s\u00f3 tenho algo a dizer \u2026 tenha esperan\u00e7a ! \ud83d\udc40<br><\/p>\n\n\n\n<p id=\"1d614600-107e-8045-a3e8-d8be4ba916f9\">Voc\u00ea aplica <strong>Rate Limiting<\/strong> pra evitar:<br><br>\u2705<br><strong>Que todos 100% dos usu\u00e1rios da API sejam afetados<\/strong> devido o comportamente de um \u00fanico usu\u00e1rio que n\u00e3o representa nem 1% dos usu\u00e1rios do seu sistema<\/p>\n\n\n\n<p id=\"1d614600-107e-80aa-892d-d4a9729f3a4f\">\u2705&nbsp;<strong>Instabilidade interna causada por loops ou retries excessivos<\/strong> entre microsservi\u00e7os.<\/p>\n\n\n\n<p id=\"1d614600-107e-8077-bd96-df9beedc6891\">\u2705 <strong>Sobrecarga no banco de dados ou fila de eventos<\/strong> por chamadas excessivas.<\/p>\n\n\n\n<p id=\"1d614600-107e-807f-8292-de2766b78958\">\u2705 <strong>Abusos volunt\u00e1rios ou involunt\u00e1rios<\/strong>, como bots ou usu\u00e1rios que criam scripts mal feitos.<\/p>\n\n\n\n<p id=\"1d614600-107e-80e6-a371-ee557f1beeeb\">\u2705 <strong>DoS (Denial of Service)<\/strong> \u2013 sim, limitar tr\u00e1fego \u00e9 uma primeira camada contra esse tipo de ataque.<\/p>\n\n\n\n<p id=\"1d614600-107e-80ea-8821-f317f44447f0\">\u2705 <strong>Estouro de or\u00e7amento em servi\u00e7os pagos por requisi\u00e7\u00e3o<\/strong> (sim, seu bolso tamb\u00e9m agradece \ud83d\udcb8).<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-809c-9a0b-f0bd81f8d98a\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1d614600-107e-80c2-8022-f894301e8ffb\">Mas&#8230; vale o tradeoff?<\/h2>\n\n\n\n<p id=\"1d614600-107e-80a1-9a1e-c0b6729352dc\">Como sempre falo no <strong>CaD<\/strong>, <strong>todo pattern \u00e9 um pacote de tradeoffs.<\/strong> N\u00e3o existe almo\u00e7o gr\u00e1tis na arquitetura.<br><\/p>\n\n\n\n<p id=\"1d614600-107e-80ad-90ef-da69185695d9\">No caso de controle de tr\u00e1fego, os principais desafios s\u00e3o:<br><\/p>\n\n\n\n<p id=\"1d614600-107e-8095-8f15-dcefa39e28d3\">\u26a0\ufe0f <strong>Overhead de Implementa\u00e7\u00e3o<\/strong> \u2013 Configurar e manter limites por rota, IP ou token pode ser trabalhoso.<\/p>\n\n\n\n<p id=\"1d614600-107e-80ff-8367-cd7fc6968cc0\">\u26a0\ufe0f <strong>Falsos positivos<\/strong> \u2013 Se mal configurado, pode bloquear usu\u00e1rios leg\u00edtimos.<\/p>\n\n\n\n<p id=\"1d614600-107e-80e6-b599-d23572acba2a\">\u26a0\ufe0f <strong>Complexidade na Escalabilidade<\/strong> \u2013 Em arquiteturas distribu\u00eddas, aplicar rate limit consistente em obrigatoriamente passar por um proxy \u00fanico (Ex. API Gateway, Load Balancer\u2026), por\u00e9m em alguns casos pode exige <strong>sincroniza\u00e7\u00e3o entre inst\u00e2ncias.<\/strong><\/p>\n\n\n\n<p id=\"1d614600-107e-80db-925c-c87726031dd7\">\u26a0\ufe0f <strong>Degrada\u00e7\u00e3o da Experi\u00eancia<\/strong> \u2013 Um sistema que devolve \u201c429 Too Many Requests\u201d a torto e a direito sem aviso pr\u00e9vio pode irritar seu cliente final.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-80df-9edd-ea129f462e49\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1d614600-107e-80ed-9396-fd4ee741080d\">Estrat\u00e9gias mais comuns de Rate Limit<\/h2>\n\n\n\n<p id=\"1d614600-107e-80c7-b831-e73ca390e98f\">Aqui v\u00e3o algumas t\u00e9cnicas que voc\u00ea pode (e deve!) considerar:<\/p>\n\n\n\n<p id=\"1d614600-107e-8033-a2d4-d66e95dba946\">\ud83d\udea6 <strong>Token Bucket<\/strong> \u2013 Distribui &#8220;fichas&#8221; ao longo do tempo; requisi\u00e7\u00f5es s\u00f3 passam se houver ficha dispon\u00edvel.<\/p>\n\n\n\n<p id=\"1d614600-107e-8079-a27b-f18f85bba495\">\ud83d\udcc8 <strong>Leaky Bucket<\/strong> \u2013 Similar ao Token Bucket, mas com vaz\u00e3o constante. \u00d3timo para suavizar picos.<\/p>\n\n\n\n<p id=\"1d614600-107e-806a-821c-da6a2899dde3\">\ud83d\udcca <strong>Fixed Window \/ Sliding Window<\/strong> \u2013 Conta requisi\u00e7\u00f5es por per\u00edodo de tempo (ex: 100 req\/min). Sliding window \u00e9 mais justo.<\/p>\n\n\n\n<p id=\"1d614600-107e-8042-aee6-c7364eaab3e1\">\ud83e\udde0 <strong>Rate Limiting Inteligente via API Gateway<\/strong> \u2013 Como no <strong>AWS API Gateway<\/strong>, <strong>Kong<\/strong>, <strong>NGINX<\/strong>, <strong>Traefik<\/strong>.<\/p>\n\n\n\n<p id=\"1d614600-107e-801d-b1ff-e5fcebb6d8e3\">\ud83d\udccd <strong>Throttling baseado em contexto<\/strong> \u2013 Usu\u00e1rio VIP tem limite maior, rotas cr\u00edticas t\u00eam limites mais baixos, e por a\u00ed vai.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-80d2-8300-c6f324ae89c7\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1d614600-107e-80ff-9e98-e6497208c875\">Conclus\u00e3o<\/h2>\n\n\n\n<p id=\"1d614600-107e-8007-bbba-c24973285eb0\">No final das contas, <strong>Rate Limit \u00e9 sobre garantir justi\u00e7a, previsibilidade e estabilidade<\/strong>. Sem ele, voc\u00ea t\u00e1 basicamente torcendo pra tudo dar certo. E entre torcer e arquitetar&#8230; acho que a escolha \u00e9 \u00f3bvia, n\u00e9? \ud83d\ude09<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" id=\"1d614600-107e-8033-8b61-d51e93b00a1e\"\/>\n\n\n\n<p id=\"1d614600-107e-803d-80ba-c649bd6ade0c\">Se voc\u00ea curte conte\u00fados como esse e quer aprender os padr\u00f5es e pr\u00e1ticas que ajudam a construir sistemas escal\u00e1veis, seguros e resilientes, te convido pra fazer parte da <strong>Comunidade de Arquitetura Descomplicada (CaD)<\/strong>.<\/p>\n\n\n\n<p id=\"1d614600-107e-80df-a08c-d86f3fccd468\">L\u00e1 a gente n\u00e3o s\u00f3 fala de Rate Limit, mas tamb\u00e9m de todos os outros aspectos que fazem de voc\u00ea um(a) arquiteto(a) de verdade. \ud83d\udd25<\/p>\n\n\n\n<p id=\"1d614600-107e-809d-92bb-df5312865fe4\">\ud83d\udc49 <a href=\"https:\/\/mugnos-it.com\/pt\/cad\/\">https:\/\/mugnos-it.com\/cad\/<\/a><\/p>\n\n\n\n<p id=\"1d614600-107e-8080-aa51-ff3adbdfcf29\">Abra\u00e7os,<\/p>\n\n\n\n<p id=\"1d614600-107e-80f4-858f-fbdd79dc538a\">Douglas Mugnos<\/p>\n\n\n\n<p id=\"1d614600-107e-808e-9637-c265dcf0cb71\">MUGNOS-IT \ud83d\ude80<\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c16bf79 e-flex e-con-boxed e-con e-parent\" data-id=\"c16bf79\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>N\u00e3o aconteceu uma, nem duas, nem tr\u00eas&#8230; Mas perdi as contas de quantas vezes j\u00e1 vi sistemas dando timeout por causa de excesso de conex\u00f5es \u2014 seja por bugs internos, efeitos colaterais de integra\u00e7\u00f5es mal feitas, robos ou at\u00e9 mesmo por ataques simples como deny of service. \ud83d\ude2c E o pior: o timeout n\u00e3o vem [&hellip;]<\/p>","protected":false},"author":3,"featured_media":1896,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/04\/10.-Controle-de-Trafego-em-APIs-Estrategia-ou-Esperanca.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/1515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/comments?post=1515"}],"version-history":[{"count":4,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/1515\/revisions"}],"predecessor-version":[{"id":2043,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/1515\/revisions\/2043"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/media\/1896"}],"wp:attachment":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/media?parent=1515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/categories?post=1515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/tags?post=1515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}