{"id":2115,"date":"2025-07-09T09:30:00","date_gmt":"2025-07-09T09:30:00","guid":{"rendered":"https:\/\/mugnos-it.com\/?p=2115"},"modified":"2025-06-23T13:28:47","modified_gmt":"2025-06-23T13:28:47","slug":"por-que-voce-deve-usar-circuit-breaker","status":"publish","type":"post","link":"https:\/\/mugnos-it.com\/pt\/por-que-voce-deve-usar-circuit-breaker\/","title":{"rendered":"Por que voc\u00ea deve usar Circuit Breaker?"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"2115\" class=\"elementor elementor-2115\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2cedf776 e-flex e-con-boxed e-con e-parent\" data-id=\"2cedf776\" 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-45387038 elementor-widget elementor-widget-text-editor\" data-id=\"45387038\" 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>Alguns anos atr\u00e1s, participei da an\u00e1lise de uma falha que gerou bastante prejuizo para uma empresa de grande porte. O sistema caiu por completo \u2014 n\u00e3o por causa de um ataque, nem por erro no c\u00f3digo \u2014 mas por algo mais sutil: um <strong>efeito domin\u00f3 causado por falhas em servi\u00e7os dependentes<\/strong>. Um microsservi\u00e7o come\u00e7ou a falhar, os outros ficaram insistindo nas chamadas, o tr\u00e1fego explodiu, ningu\u00e9m conseguiu mais responder e\u2026 tudo foi ao ch\u00e3o. Literalmente.<\/p>\n\n\n\n<p>Esse tipo de situa\u00e7\u00e3o acontece com mais frequ\u00eancia do que deveria. E o pior: \u00e9 <strong>evit\u00e1vel<\/strong>. Possuem algumas estrat\u00e9gias que em conjunto s\u00e3o necess\u00e1rias, como retry\/timout e tamb\u00e9m circuit breaker\u2026 mas hoje quero focar apenas no circuit Breaker.<\/p>\n\n\n\n<p>Circuit Breaker \u00e9 um pattern simples, mas que pode salvar a sua aplica\u00e7\u00e3o de cair inteira s\u00f3 porque um peda\u00e7o falhou.<\/p>\n\n\n\n<p>Ali\u00e1s, esse tipo de conte\u00fado \u00e9 o que eu mais compartilho na Comunidade de Arquitetura Descomplicada (CaD), se tiver interesse em saber mais n\u00e3o deixe de acessar <a href=\"https:\/\/mugnos-it.com\/pt\/cad\/\">https:\/\/mugnos-it.com\/cad\/<\/a><\/p>\n\n\n\n<p>Se voc\u00ea curte <strong>arquiteturas resilientes de verdade<\/strong>, vai se sentir em casa por l\u00e1.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 Circuit Breaker?<\/h2>\n\n\n\n<p>Se voc\u00ea j\u00e1 viu um disjuntor el\u00e9trico, sabe como ele funciona: quando algo d\u00e1 errado, ele desliga o circuito para evitar um inc\u00eandio.<\/p>\n\n\n\n<p>O <strong>Circuit Breaker na arquitetura de software<\/strong> faz a mesma coisa. Ele identifica quando um servi\u00e7o ou componente come\u00e7a a falhar repetidamente e, ao inv\u00e9s de deixar a aplica\u00e7\u00e3o continuar insistindo e quebrar tudo de vez, ele <strong>interrompe temporariamente as chamadas<\/strong>, protegendo o sistema.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sem Circuit Breaker: o caos<\/h2>\n\n\n\n<p>Imagina um sistema de <strong>reserva de viagens<\/strong>, onde o backend central consulta servi\u00e7os de avi\u00e3o, hotel e aluguel de carros. Se o servi\u00e7o de carros cair, sem circuit breaker, a aplica\u00e7\u00e3o vai:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tentar bater no servi\u00e7o v\u00e1rias vezes;<\/li>\n\n\n\n<li>Gastar <strong>threads e recursos com timeouts<\/strong> in\u00fateis;<\/li>\n\n\n\n<li>Gerar um <strong>retry storm<\/strong>, travando at\u00e9 quem estava funcionando;<\/li>\n\n\n\n<li>Quando o servi\u00e7o de carros tentar voltar, ele toma uma avalanche de requisi\u00e7\u00f5es e&#8230; cai de novo.<\/li>\n<\/ul>\n\n\n\n<p>Resultado? Todo o sistema come\u00e7a a falhar \u2014 mesmo partes que estavam 100% saud\u00e1veis.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Com Circuit Breaker: controle<\/h2>\n\n\n\n<p>Com o pattern implementado, quando o servi\u00e7o de carros cair, o breaker entra em <strong>estado \u201copen\u201d<\/strong> (Sim, open n\u00e3o quer dizer que esta passando requisi\u00e7\u00e3o, aqui Open \u00e9 igual circuit breaker eletrico, ele evita que a eletricidade passe). Ou seja: ele para de enviar requisi\u00e7\u00f5es para aquele servi\u00e7o por um tempo, retornando imediatamente com um fallback ou erro tratado.<\/p>\n\n\n\n<p>Isso traz diversos benef\u00edcios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Evita sobrecarga nos servi\u00e7os falhos;<\/li>\n\n\n\n<li>Preserva os recursos do sistema principal;<\/li>\n\n\n\n<li>Garante resposta r\u00e1pida ao usu\u00e1rio, mesmo em caso de falha;<\/li>\n\n\n\n<li>Evita o famoso efeito domin\u00f3.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como funciona na pr\u00e1tica?<\/h2>\n\n\n\n<p>O Circuit Breaker tem tr\u00eas estados principais:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Closed (Fechado)<\/strong> \u2013 tudo normal, chamadas fluem normalmente.<\/li>\n\n\n\n<li><strong>Open (Aberto)<\/strong> \u2013 o servi\u00e7o falhou N vezes, bloqueia chamadas por um tempo.<\/li>\n\n\n\n<li><strong>Half-Open<\/strong> \u2013 come\u00e7a a testar devagar se o servi\u00e7o voltou. Se sim, volta para fechado.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Exemplo real: um servi\u00e7o caiu por instabilidade. O breaker entrou em open ap\u00f3s 5 falhas. Esperou 30 segundos. Depois, entrou em half-open e enviou 2 requisi\u00e7\u00f5es. Ambas deram sucesso. Voltou para closed e o sistema seguiu, sem crash, sem drama.<\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1 Onde implementar?<\/h2>\n\n\n\n<p>O ideal \u00e9 implementar em <strong>camada de rede ou gateway<\/strong>, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Istio (Service Mesh)<\/li>\n\n\n\n<li>Envoy<\/li>\n\n\n\n<li>Spring Cloud Gateway<\/li>\n\n\n\n<li>API Gateway de nuvem (ex: AWS, Azure)<\/li>\n<\/ul>\n\n\n\n<p>Tamb\u00e9m pode ser implementado na aplica\u00e7\u00e3o com bibliotecas como Resilience4j, Hystrix (legado), ou middlewares pr\u00f3prios.<\/p>\n\n\n\n<p>Mas aten\u00e7\u00e3o: n\u00e3o confunda Circuit Breaker com Rate Limiting ou Throttling!<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Circuit Breaker \u2260 limitar requisi\u00e7\u00f5es<\/li>\n\n\n\n<li>Circuit Breaker \u2260 negar carga excessiva<\/li>\n\n\n\n<li>Circuit Breaker = proteger o sistema de falhas conhecidas e constantes<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0 Exemplos pr\u00e1ticos de implementa\u00e7\u00e3o<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Istio (camada de rede)<\/strong><\/h3>\n\n\n\n<p>Com Istio, voc\u00ea pode configurar circuit breakers diretamente no <code>DestinationRule<\/code>:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"692\" height=\"474\" src=\"https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-1.png\" alt=\"\" class=\"wp-image-2116\" srcset=\"https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-1.png 692w, https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-1-300x205.png 300w\" sizes=\"(max-width: 692px) 100vw, 692px\" \/><\/figure>\n\n\n\n<p>Esse exemplo ejetaria o servi\u00e7o de carros da rota se ele responder 3 erros 5xx consecutivos em 5s.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Resilience4j (na aplica\u00e7\u00e3o)<\/strong><\/h3>\n\n\n\n<p>No Spring Boot, por exemplo, \u00e9 poss\u00edvel aplicar com Resilience4j de forma simples:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"691\" height=\"296\" src=\"https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-2.png\" alt=\"\" class=\"wp-image-2117\" srcset=\"https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-2.png 691w, https:\/\/mugnos-it.com\/wp-content\/uploads\/2025\/06\/print-news-22-.-2-300x129.png 300w\" sizes=\"(max-width: 691px) 100vw, 691px\" \/><\/figure>\n\n\n\n<p>Simples, direto, e j\u00e1 com fallback amig\u00e1vel. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dicas pr\u00e1ticas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Combine com timeout e retry \u2014 bem calibrados.<\/li>\n\n\n\n<li>Use m\u00e9tricas reais: % de falhas, lat\u00eancia, erro HTTP.<\/li>\n\n\n\n<li>Fallbacks s\u00e3o essenciais (ex: cache, dummy response, fila).<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">J\u00e1 vi Circuit Breaker salvar sistemas inteiros<\/h2>\n\n\n\n<p>Teve um caso em que, sem circuit breaker, uma aplica\u00e7\u00e3o global precisou bloquear o tr\u00e1fego de usu\u00e1rios no firewall para conseguir se recuperar. Foi um desastre. (fiz uma aula dessa esses dias, aconteceu com o Canva)<\/p>\n\n\n\n<p>Evitar isso com uma linha no gateway e um pattern bem aplicado teria feito <strong>toda a diferen\u00e7a.<\/strong><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Circuit Breaker \u00e9 simples, poderoso e essencial em sistemas modernos.<\/p>\n\n\n\n<p>Especialmente com arquiteturas distribu\u00eddas, microservi\u00e7os, cloud e integra\u00e7\u00f5es externas \u2014 <strong>voc\u00ea n\u00e3o pode ignorar esse pattern<\/strong>.<\/p>\n\n\n\n<p>Esse \u00e9 o tipo de conhecimento que vai te poupar noites em claro, crises e preju\u00edzos. E \u00e9 exatamente o tipo de tema que a gente vive debatendo l\u00e1 na <strong>Comunidade de Arquitetura Descomplicada (CaD)<\/strong>.<\/p>\n\n\n\n<p>\ud83d\udc49 <a href=\"https:\/\/mugnos-it.com\/pt\/cad\/\">Quer entender mais, ver aulas pr\u00e1ticas e aprofundar sua arquitetura? Conhe\u00e7a o CaD.<\/a><\/p>\n\n\n\n<p>Abra\u00e7os.<\/p>\n\n\n\n<p>Douglas Mugnos!<\/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\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Alguns anos atr\u00e1s, participei da an\u00e1lise de uma falha que gerou bastante prejuizo para uma empresa de grande porte. O sistema caiu por completo \u2014 n\u00e3o por causa de um ataque, nem por erro no c\u00f3digo \u2014 mas por algo mais sutil: um efeito domin\u00f3 causado por falhas em servi\u00e7os dependentes. Um microsservi\u00e7o come\u00e7ou a [&hellip;]<\/p>","protected":false},"author":3,"featured_media":2118,"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-2115","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\/06\/ChatGPT-Image-23-de-jun.-de-2025-08_25_51.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/2115","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=2115"}],"version-history":[{"count":4,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/2115\/revisions"}],"predecessor-version":[{"id":2122,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/posts\/2115\/revisions\/2122"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/media\/2118"}],"wp:attachment":[{"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/media?parent=2115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/categories?post=2115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mugnos-it.com\/pt\/wp-json\/wp\/v2\/tags?post=2115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}