{"id":24877,"date":"2026-09-16T17:52:52","date_gmt":"2026-09-16T17:52:52","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/gubernator-cloud-native-distributed-rate-limiting-microservices-2\/"},"modified":"2026-09-16T17:52:52","modified_gmt":"2026-09-16T17:52:52","slug":"gubernator-cloud-native-distributed-rate-limiting-microservices","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/","title":{"rendered":"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hoje, a Mailgun tem o prazer de disponibilizar o c\u00f3digo aberto do  <a href=\"https:\/\/github.com\/mailgun\/gubernator\" target=\"_tabs\" rel=\"noopener noreferrer\">Gubernator<\/a>, um microsservi\u00e7o de limita\u00e7\u00e3o de taxa distribu\u00edda de alto desempenho. O que o Gubernator faz? \u00d3tima pergunta:<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-8119\"><p class=\"h5 m-0\" id=\"toc-title-8119\">\u00cdndice<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#recursos-do-gubernator\">Recursos do Gubernator<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#por-que-nao-usar-o-redis\">Por que n\u00e3o usar o Redis?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#por-que-um-microsservico\">Por que um microsservi\u00e7o?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#por-que-o-gubernator-e-stateless\">Por que o Gubernator \u00e9 stateless?<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#como-o-gubernator-funciona\">Como o Gubernator funciona<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#operacao-do-gubernator\">Opera\u00e7\u00e3o do Gubernator<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#comportamento-global\">Comportamento global<\/a><a class=\"scrollme link-body-color\" href=\"#efeitos-colaterais-do-comportamento-global\">Efeitos colaterais do comportamento global<\/a><a class=\"scrollme link-body-color\" href=\"#desempenho-do-gubernator\">Desempenho do Gubernator<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#gubernator-como-uma-biblioteca\">Gubernator como uma biblioteca<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">09<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#conclusao\">Conclus\u00e3o<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Recursos do Gubernator<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O Gubernator distribui uniformemente as solicita\u00e7\u00f5es de limite de taxa por todo o cluster, o que significa que voc\u00ea pode escalar o sistema apenas adicionando mais n\u00f3s.\u00a0<\/li>\n\n\n\n<li>O Gubernator n\u00e3o depende de caches externos como Memcache ou Redis, portanto, n\u00e3o h\u00e1 sincroniza\u00e7\u00e3o de implanta\u00e7\u00e3o com um servi\u00e7o dependente. Isso torna o aumento ou a redu\u00e7\u00e3o din\u00e2mica do cluster em um sistema de orquestra\u00e7\u00e3o como o Kubernetes ou o Nomad algo trivial.<\/li>\n\n\n\n<li>O Gubernator n\u00e3o mant\u00e9m nenhum estado no disco. A configura\u00e7\u00e3o \u00e9 passada para ele pelo cliente a cada solicita\u00e7\u00e3o.<\/li>\n\n\n\n<li>O Gubernator fornece acesso GRPC e HTTP \u00e0 sua API.<\/li>\n\n\n\n<li>Pode ser executado como um sidecar para servi\u00e7os que precisam de limita\u00e7\u00e3o de taxa ou como um servi\u00e7o separado.<\/li>\n\n\n\n<li>Pode ser usado como uma biblioteca para implementar um servi\u00e7o de limita\u00e7\u00e3o de taxa espec\u00edfico de um dom\u00ednio.<\/li>\n\n\n\n<li>Tem suporte opcional \u00e0 distribui\u00e7\u00e3o de limite de taxa eventualmente consistente para ambientes de vaz\u00e3o extremamente alta.\u00a0<\/li>\n\n\n\n<li>Gubernator \u00e9 a  <a href=\"https:\/\/www.google.com\/search?q=how+to+say+governor+in+russian&amp;oq=how+to+say+govener+in+russ\" target=\"_tabs\" rel=\"noopener noreferrer\">pron\u00fancia em ingl\u00eas da palavra governador em russo<\/a> e tamb\u00e9m soa legal.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, temos certeza de que voc\u00ea tem muitas d\u00favidas sobre os <b>motivos que nos levaram a abrir o c\u00f3digo do Gubernator<\/b>. Portanto, antes de entrarmos em detalhes sobre como o Gubernator funciona, vamos responder a algumas dessas d\u00favidas. A maior d\u00favida que voc\u00ea deve ter \u00e9 provavelmente&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que n\u00e3o usar o Redis?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas coisas nos chamaram a aten\u00e7\u00e3o ao avaliar o Redis.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Usar a  <a href=\"https:\/\/redislabs.com\/redis-best-practices\/basic-rate-limiting\/\" target=\"_tabs\" rel=\"noopener noreferrer\">implementa\u00e7\u00e3o b\u00e1sica do limite de taxa do Redis<\/a>  incorreria em viagens de ida e volta adicionais na rede, mesmo com o  <a href=\"https:\/\/redis.io\/topics\/pipelining\" target=\"_tabs\" rel=\"noopener noreferrer\">pipelining<\/a>. <\/li>\n\n\n\n<li>Poder\u00edamos reduzir as viagens de ida e volta usando  <a href=\"https:\/\/redis.io\/commands\/eval\" target=\"_tabs\" rel=\"noopener noreferrer\">https:\/\/redis.io\/commands\/eval<\/a>  e escrevendo um script LUA que precisar\u00edamos manter para cada algoritmo implementado.<\/li>\n\n\n\n<li>Cada solicita\u00e7\u00e3o resultaria em pelo menos uma viagem de ida e volta ao Redis. Combinado com pelo menos uma viagem de ida e volta ao nosso microsservi\u00e7o, isso significa ao menos duas viagens de ida e volta por solicita\u00e7\u00e3o ao nosso servi\u00e7o.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A solu\u00e7\u00e3o ideal para o Redis \u00e9 escrever um script LUA que implementa o algoritmo de limite de taxa.\u00a0 Esse script \u00e9 armazenado no servidor do Redis e \u00e9 chamado a cada solicita\u00e7\u00e3o de limite de taxa. Neste cen\u00e1rio, grande parte do trabalho \u00e9 feito pelo Redis e o nosso microsservi\u00e7o funciona basicamente como um proxy para acessar o Redis. Sendo esse o caso, temos duas op\u00e7\u00f5es:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Criar o Gubernator como uma biblioteca de limite de taxa que fornece acesso ao Redis. Essa biblioteca seria usada por todos os servi\u00e7os que precisam de limita\u00e7\u00e3o de taxa.\u00a0<\/li>\n\n\n\n<li>Eliminar o Redis e implementar os algoritmos de distribui\u00e7\u00e3o, armazenamento em cache e limita\u00e7\u00e3o em um microsservi\u00e7o de limita\u00e7\u00e3o de taxa com um cliente GRPC leve para ser usado por cada servi\u00e7o.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Por que um microsservi\u00e7o?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A Mailgun \u00e9 uma empresa poliglota, sendo que a maior parte da nossa base de c\u00f3digo \u00e9 composta por Python e Golang. Se optarmos por implementar a limita\u00e7\u00e3o de taxa como uma biblioteca, isso exigir\u00e1, no m\u00ednimo, uma vers\u00e3o em Python e outra em Golang da biblioteca. <b>J\u00e1 adotamos essa abordagem internamente antes com uma vers\u00e3o em Python e em Golang da mesma biblioteca.<\/b> Em nossa experi\u00eancia, as bibliotecas compartilhadas entre os servi\u00e7os t\u00eam as seguintes desvantagens.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>As atualiza\u00e7\u00f5es de bugs e recursos na biblioteca podem implicar, na melhor das hip\u00f3teses, em uma atualiza\u00e7\u00e3o da depend\u00eancia. Na pior das hip\u00f3teses, exige modifica\u00e7\u00f5es em todos os servi\u00e7os que usam a biblioteca em todas as linguagens compat\u00edveis.<\/li>\n\n\n\n<li>\u00c9 raro que a equipe de desenvolvimento queira manter ou criar novos recursos em ambas as linguagens. Isso costuma fazer com que uma vers\u00e3o da biblioteca tenha mais recursos ou seja mais bem mantida do que a outra.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 medida que o n\u00famero de microsservi\u00e7os e linguagens em nosso ecossistema continua a crescer, esses problemas se acumulam e pioram. Em compara\u00e7\u00e3o, as bibliotecas GRPC e HTTP s\u00e3o criadas e mantidas facilmente para cada linguagem que precisa de acesso ao Gubernator.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para os microsservi\u00e7os, <b>atualiza\u00e7\u00f5es de bugs e novos recursos podem ser adicionados sem causar interrup\u00e7\u00f5es aos servi\u00e7os dependentes<\/b>. Desde que as altera\u00e7\u00f5es estruturais na API n\u00e3o sejam permitidas, os servi\u00e7os dependentes poder\u00e3o aderir a novos recursos sem a necessidade de atualizar todos os servi\u00e7os dependentes.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O grande diferencial do Gubernator como um microsservi\u00e7o \u00e9 que ele cria um ponto de sincroniza\u00e7\u00e3o para as diversas solicita\u00e7\u00f5es que entram no sistema. As solicita\u00e7\u00f5es recebidas em uma diferen\u00e7a de poucos microssegundos umas das outras podem ser otimizadas e coordenadas em lotes, o que reduz a largura de banda geral e a lat\u00eancia de ida e volta que o servi\u00e7o usa em situa\u00e7\u00f5es de carga alta. V\u00e1rios servi\u00e7os em execu\u00e7\u00e3o em um \u00fanico host, todos com a mesma biblioteca rodando em seus respectivos processos, n\u00e3o t\u00eam essa capacidade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que o Gubernator \u00e9 stateless?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O Gubernator \u00e9 stateless, pois n\u00e3o exige espa\u00e7o em disco para operar. Nenhum dado de configura\u00e7\u00e3o ou cache passa por sincroniza\u00e7\u00e3o com o disco, e isso ocorre porque cada solicita\u00e7\u00e3o ao Gubernator inclui a configura\u00e7\u00e3o do limite de taxa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A princ\u00edpio, voc\u00ea pode achar que essa \u00e9 uma sobrecarga desnecess\u00e1ria a cada solicita\u00e7\u00e3o. No entanto, na realidade, uma configura\u00e7\u00e3o de limite de taxa \u00e9 composta por apenas quatro n\u00fameros inteiros de 64 bits. A configura\u00e7\u00e3o \u00e9 composta por Limite, Dura\u00e7\u00e3o, Algoritmo e Comportamento (veja abaixo os detalhes de como isso funciona). \u00c9 por causa dessa configura\u00e7\u00e3o simples que o <b>Gubernator pode ser usado para fornecer uma grande variedade de casos de uso de limite de taxa que podem ser empregados pelos clientes<\/b>. Alguns desses casos de uso s\u00e3o:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><b>Limita\u00e7\u00e3o de entrada<\/b> &#8211; Limita\u00e7\u00e3o t\u00edpica baseada em HTTP do tipo 402 Too Many Requests<\/li>\n\n\n\n<li><b>Descarte de tr\u00e1fego<\/b> &#8211; Rejeita apenas solicita\u00e7\u00f5es novas ou n\u00e3o autenticadas quando sua API estiver em um estado ruim.<\/li>\n\n\n\n<li><b>Limita\u00e7\u00e3o de sa\u00edda<\/b> &#8211; Bombardear servidores SMTP externos com milh\u00f5es de mensagens n\u00e3o \u00e9 uma boa ideia.<\/li>\n\n\n\n<li><b>Processamento de fila<\/b> &#8211; Saiba quando uma solicita\u00e7\u00e3o pode ser tratada imediatamente ou se deve ser colocada na fila e processada na ordem em que foi recebida.<\/li>\n\n\n\n<li><b>Gerenciamento da capacidade da API<\/b> &#8211; Defina limites globais para o n\u00famero total de solicita\u00e7\u00f5es com o qual um sistema de API coletivo pode lidar. Rejeite ou coloque na fila as solicita\u00e7\u00f5es que violam a capacidade operacional normal do sistema.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m dos casos de uso mencionados anteriormente, um design sem configura\u00e7\u00f5es tem implica\u00e7\u00f5es significativas para o design e a implanta\u00e7\u00e3o de microsservi\u00e7os:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Nenhuma sincroniza\u00e7\u00e3o de configura\u00e7\u00e3o na implanta\u00e7\u00e3o. Quando um servi\u00e7o que usa o Gubernator \u00e9 implantado, n\u00e3o h\u00e1 nenhuma configura\u00e7\u00e3o de limite de taxa que precise ser pr\u00e9-implantada no Gubernator.<\/li>\n\n\n\n<li>Os servi\u00e7os que usam o Gubernator controlam seu pr\u00f3prio modelo de dom\u00ednio de limite de taxa no que diz respeito aos problemas envolvidos. Isso mant\u00e9m o conhecimento espec\u00edfico do dom\u00ednio fora do Gubernator, de modo que ele possa se concentrar no que faz de melhor: a limita\u00e7\u00e3o de taxa!<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Fora essas d\u00favidas, vamos falar um pouco mais sobre o Gubernator como um todo, come\u00e7ando por <b>como ele funciona<\/b>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como o Gubernator funciona<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4850\" width=\"700\" height=\"481\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/gubernator.png\" alt=\"Gubernator architecture chart\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/gubernator.png 700w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/gubernator-300x206.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">O Gubernator foi criado para operar como um cluster distribu\u00eddo de n\u00f3s pares que utilizam um cache na mem\u00f3ria de todos os limites de taxa ativos no momento; assim sendo, n\u00e3o ocorre sincroniza\u00e7\u00e3o de dados com o disco. Como a maioria das dura\u00e7\u00f5es de limite de taxa com base na rede \u00e9 mantida por apenas alguns segundos, a perda do cache na mem\u00f3ria durante uma reinicializa\u00e7\u00e3o ou inatividade programada n\u00e3o \u00e9 um grande problema. Para o Gubernator, <b>escolhemos o desempenho em vez da precis\u00e3o, pois \u00e9 aceit\u00e1vel que um pequeno subconjunto de tr\u00e1fego sofra com solicita\u00e7\u00f5es excessivas por um curto per\u00edodo (geralmente segundos) em caso de perda de cache.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando \u00e9 feita uma solicita\u00e7\u00e3o de limite de taxa ao Gubernator, a solicita\u00e7\u00e3o recebe uma chave e um algoritmo de hash consistente \u00e9 aplicado para determinar qual dos pares ser\u00e1 o propriet\u00e1rio da solicita\u00e7\u00e3o. A escolha de um \u00fanico propriet\u00e1rio para um limite de taxa torna os incrementos at\u00f4micos das contagens muito r\u00e1pidos e evita a complexidade e a lat\u00eancia envolvidas na distribui\u00e7\u00e3o de contagens de forma consistente em um cluster de n\u00f3s pares.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Apesar de simples e com bom desempenho, <b>esse design pode ser suscet\u00edvel a um volume avassalador de solicita\u00e7\u00f5es<\/b>, j\u00e1 que um \u00fanico coordenador \u00e9 respons\u00e1vel por possivelmente centenas de milhares de solicita\u00e7\u00f5es para um limite de taxa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para combater isso, os clientes podem solicitar o uso de `Behaviour=BATCHING`, que permite que os pares aceitem v\u00e1rias solicita\u00e7\u00f5es dentro de um per\u00edodo especificado (o padr\u00e3o \u00e9 500 microssegundos) e agrupem-nas em uma solicita\u00e7\u00e3o de n\u00f3 par individual em lote, reduzindo consideravelmente o n\u00famero total de solicita\u00e7\u00f5es pela rede para um \u00fanico par do Gubernator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para garantir que cada n\u00f3 par no cluster calcule com exatid\u00e3o o hash correto de uma chave de limite de taxa, <b>a lista de pares no cluster deve ser distribu\u00edda a cada par nele de maneira oportuna e consistente.<\/b> Atualmente, o Gubernator tem suporte ao uso do etcd ou da API de endpoints do Kubernetes para descobrir pares do Gubernator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Opera\u00e7\u00e3o do Gubernator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando um cliente ou servi\u00e7o faz uma solicita\u00e7\u00e3o ao Gubernator, a configura\u00e7\u00e3o de limite de taxa \u00e9 fornecida em cada solicita\u00e7\u00e3o pelo cliente. A configura\u00e7\u00e3o do limite de taxa \u00e9 armazenada juntamente ao seu status atual no cache local do propriet\u00e1rio do limite de taxa. Os limites de taxa e sua configura\u00e7\u00e3o que s\u00e3o armazenados no cache local existir\u00e3o apenas durante a dura\u00e7\u00e3o especificada na configura\u00e7\u00e3o do limite de taxa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s a expira\u00e7\u00e3o da dura\u00e7\u00e3o e caso o limite de taxa n\u00e3o seja solicitado novamente dentro desse per\u00edodo, ele ser\u00e1 descartado do cache. <b>As solicita\u00e7\u00f5es seguintes para o mesmo nome e par unique_key recriar\u00e3o a configura\u00e7\u00e3o e o limite de taxa no cache, fazendo com que o ciclo se repita<\/b>. Por outro lado, as solicita\u00e7\u00f5es subsequentes com configura\u00e7\u00f5es diferentes substituir\u00e3o a configura\u00e7\u00e3o anterior e aplicar\u00e3o a nova de imediato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um exemplo de solicita\u00e7\u00e3o de limite de taxa enviada via GRPC pode se parecer com o seguinte:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                        rate_limits:rn    # Scopes the request to a specific rate limit rn  - name: requests_per_secrn    # A unique_key that identifies this rate limit requestrn    unique_key: account_id=123|source_ip=172.0.0.1rn    # The number of hits we are requestingrn    hits: 1rn    # The total number of requests allowed for this rate limitrn    limit: 100rn    # The duration of the rate limit in millisecondsrn    duration: 1000rn    # The algorithm used to calculate the rate limit  rn    # 0 = Token Bucketrn    # 1 = Leaky Bucketrn    algorithm: 0rn    # The behavior of the rate limit in gubernator.rn    # 0 = BATCHING (Enables batching of requests to peers)rn    # 1 = NO_BATCHING (Disables batching)rn    # 2 = GLOBAL (Enable global caching for this rate limit)rn    behavior: 0\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Um exemplo de resposta seria:<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-clipboard-success-label=\"Copiado!\" data-clipboard-error-label=\"N\u00e3o foi poss\u00edvel copiar\" data-tooltip=\"Copiar para a \u00e1rea de transfer\u00eancia\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copiar para a \u00e1rea de transfer\u00eancia\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    rate_limits:rn      # The status of the rate limit.  OK = 0, OVER_LIMIT = 1rn    - status: 0,rn      # The current configured limitrn      limit: 10,rn      # The number of requests remainingrn      remaining: 7,rn      # A unix timestamp in milliseconds of when the rate limit will reset,rn      #  or if OVER_LIMIT is set it is the time at which the rate limitrn      # will no longer return OVER_LIMIT.rn      reset_time: 1551309219226,rn      # Additional metadata about the request the client might find usefulrn      metadata:rn        # This is the name of the node that owns this requestrn        &quot;owner&quot;: &quot;api-n03.staging.us-east-1.mailgun.org:9041&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Comportamento global<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como os limites de taxa do Gubernator passam por processos de hash e s\u00e3o gerenciados por um \u00fanico n\u00f3 par no cluster, os limites de taxa aplic\u00e1veis a cada solicita\u00e7\u00e3o em um data center resultariam na ger\u00eancia da solicita\u00e7\u00e3o de limite de taxa por um \u00fanico par para todo o data center.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo, considere um limite de taxa com <code>name=requests_per_datacenter<\/code> e um <code>unique_id=us-east-1<\/code>. Agora imagine que seja feita uma solicita\u00e7\u00e3o ao Gubernator com esse limite para cada solicita\u00e7\u00e3o HTTP que entra no data center <code>us-east-1<\/code>. <b>Podem ser centenas de milhares, ou at\u00e9 mesmo milh\u00f5es, de solicita\u00e7\u00f5es por segundo, e todas elas passam por processos de hash e s\u00e3o tratadas por um \u00fanico par no cluster.<\/b> Devido a esse poss\u00edvel problema de escala, o Gubernator introduz um <code>behavior<\/code> configur\u00e1vel chamado <code>GLOBAL<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando um limite de taxa \u00e9 configurado com <code>behavior=GLOBAL<\/code>, a solicita\u00e7\u00e3o de limite de taxa recebida de um cliente n\u00e3o ser\u00e1 encaminhada ao n\u00f3 par propriet\u00e1rio. Em vez disso, ela ser\u00e1 respondida de um cache interno gerenciado pelo par que recebeu a solicita\u00e7\u00e3o. As <code>Hits<\/code> direcionadas ao limite de taxa ser\u00e3o colocadas em lote pelo n\u00f3 par de recebimento e enviadas de forma ass\u00edncrona para o n\u00f3 par propriet\u00e1rio, onde os acessos ser\u00e3o totalizados e o <code>OVER_LIMIT<\/code> ser\u00e1 calculado. Cabe ent\u00e3o ao par propriet\u00e1rio a responsabilidade de atualizar cada n\u00f3 par no cluster com o status atual do limite de taxa, de modo que os <b>caches internos do par sejam rotineiramente atualizados<\/b> com o status de limite de taxa mais recente origin\u00e1rio do propriet\u00e1rio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Efeitos colaterais do comportamento global<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Como as <code>Hits<\/code> s\u00e3o agrupadas em lotes e encaminhadas ao par propriet\u00e1rio de forma ass\u00edncrona, a resposta imediata ao cliente n\u00e3o incluir\u00e1 as contagens de itens <code>remaining<\/code> mais precisas. Essa contagem s\u00f3 ser\u00e1 atualizada ap\u00f3s a conclus\u00e3o da chamada ass\u00edncrona ao par propriet\u00e1rio e ap\u00f3s esse mesmo par ter tido tempo de atualizar todos os pares no cluster. Como resultado, o uso de <code>GLOBAL<\/code> permite uma escala maior, mas ao custo da consist\u00eancia. O uso de <code>GLOBAL<\/code> pode aumentar a quantidade de tr\u00e1fego por solicita\u00e7\u00e3o de limite de taxa se o cluster for grande o suficiente. <b>O <code>GLOBAL<\/code><\/b><b> deve ser usado apenas para limites de taxa de volume extremamente alto que n\u00e3o escalam bem com o comportamento n\u00e3o <\/b><b><code>GLOBAL<\/code><\/b><b> tradicional.<\/b><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Desempenho do Gubernator<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Em nosso ambiente de produ\u00e7\u00e3o, para cada solicita\u00e7\u00e3o \u00e0 nossa API, enviamos 2 solicita\u00e7\u00f5es de limite de taxa ao Gubernator para avalia\u00e7\u00e3o desse limite; uma para avaliar a solicita\u00e7\u00e3o HTTP e a outra para determinar a taxa do n\u00famero de destinat\u00e1rios aos quais um usu\u00e1rio pode enviar um e-mail dentro da dura\u00e7\u00e3o espec\u00edfica. Nessa configura\u00e7\u00e3o, um \u00fanico n\u00f3 do Gubernator lida com mais de 2.000 solicita\u00e7\u00f5es por segundo, e a maioria das respostas em lote retorna em menos de 1 milissegundo.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4851\" width=\"847\" height=\"382\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss1.png\" alt=\"Average rate limits response time graph\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss1.png 847w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss1-300x135.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss1-768x346.png 768w\" sizes=\"(max-width: 847px) 100vw, 847px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As solicita\u00e7\u00f5es de pares encaminhadas para n\u00f3s propriet\u00e1rios costumam responder em menos de 30 microssegundos.\u00a0<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" class=\"wp-image-4852\" width=\"841\" height=\"389\" src=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss2.png\" alt=\"Average get peer rate limits response time graph\" srcset=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss2.png 841w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss2-300x139.png 300w, https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/ss2-768x355.png 768w\" sizes=\"(max-width: 841px) 100vw, 841px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como muitas das nossas APIs voltadas para o p\u00fablico s\u00e3o escritas em Python, executamos v\u00e1rias inst\u00e2ncias do interpretador de Python em um \u00fanico n\u00f3. Essas inst\u00e2ncias em Python encaminhar\u00e3o as solicita\u00e7\u00f5es localmente para a inst\u00e2ncia do Gubernator que, em seguida, as agrupar\u00e1 em lote e encaminhar\u00e1 essas solicita\u00e7\u00f5es aos n\u00f3s propriet\u00e1rios.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Gubernator permite que os usu\u00e1rios optem por um comportamento sem lote, o que reduziria ainda mais a lat\u00eancia nas solicita\u00e7\u00f5es de limite de taxa do cliente. No entanto, devido aos requisitos de vaz\u00e3o, nosso ambiente de produ\u00e7\u00e3o usa o <code>Behaviour=BATCHING<\/code> com o per\u00edodo padr\u00e3o de 500 microssegundos. Em produ\u00e7\u00e3o, observamos tamanhos de lote de 1.000 durante o pico de uso da API. Outros usu\u00e1rios que n\u00e3o t\u00eam as mesmas altas demandas de tr\u00e1fego poderiam desativar os lotes para obter lat\u00eancias mais baixas, mas ao custo da vaz\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gubernator como uma biblioteca<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se estiver usando Golang, voc\u00ea pode usar o Gubernator como uma biblioteca. Isso \u00e9 \u00fatil se voc\u00ea desejar implementar um servi\u00e7o de limite de taxa com o seu pr\u00f3prio modelo espec\u00edfico da empresa sobre ele. Fazemos isso internamente na Mailgun com um servi\u00e7o que batizamos criativamente de <code>ratelimits<\/code>, que rastreia os limites impostos em cada conta. <b>Desta forma, voc\u00ea pode utilizar a pot\u00eancia e a velocidade do Gubernator, mas ainda criar n\u00edveis de l\u00f3gica de neg\u00f3cios e integrar problemas espec\u00edficos de um dom\u00ednio em seu servi\u00e7o de limite de taxa.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao usar a biblioteca, o seu servi\u00e7o se torna um membro integral do cluster que participa do mesmo cache e hash consistentes que um servidor aut\u00f4nomo do Gubernator faria. Tudo o que voc\u00ea precisa fazer \u00e9 fornecer a inst\u00e2ncia do servidor GRPC e informar ao Gubernator onde est\u00e3o localizados os n\u00f3s pares no seu cluster.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O uso do Gubernator como um servi\u00e7o de limite de taxa de prop\u00f3sito geral nos permite usar uma arquitetura de microsservi\u00e7o sem comprometer a independ\u00eancia dos servi\u00e7os ou a duplica\u00e7\u00e3o do trabalho exigida pelas solu\u00e7\u00f5es comuns de limita\u00e7\u00e3o de taxa. <b>Esperamos que, com a abertura do c\u00f3digo deste projeto, outras pessoas possam colaborar e se beneficiar do trabalho que iniciamos aqui.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tem interesse em trabalhar no Mailgun? Estamos contratando! E h\u00e1 v\u00e1rias vagas dispon\u00edveis para a equipe de desenvolvimento. <a href=\"https:\/\/apply.workable.com\/mailgun\/?lng=en\" target=\"_tabs\" rel=\"noopener noreferrer\">Confira nossas vagas atuais aqui.<\/a><\/p>\n\n\n\r\n    <aside data-content-type=\"longform\"  class=\"banner-block longform-spacings rounded-lg shadow-lg px-5 py-6 px-md-6 py-md-7 p-lg-7 bg-light\" data-theme=\"dark\" aria-labelledby=\"banner-block-block_a82a432504efe191215c6d9666373c3d\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Cadastre-se            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_a82a432504efe191215c6d9666373c3d\">\r\n                \u00c9 f\u00e1cil come\u00e7ar. E \u00e9 gr\u00e1tis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Veja o que voc\u00ea pode alcan\u00e7ar com a melhor plataforma de entrega de e-mail do mundo.<\/div>\r\n                            <\/div>\r\n        \r\n        <div class=\"text-start mt-5\"><a href=\"https:\/\/signup.mailgun.com\/new\/signup\"  class=\"btn btn-secondary\" >Get started<\/a><\/div>\r\n    <\/aside>\r\n\r\n","protected":false},"excerpt":{"rendered":"<p>Hoje, a Mailgun tem o prazer de disponibilizar o c\u00f3digo aberto do Gubernator, um microsservi\u00e7o de limita\u00e7\u00e3o de taxa distribu\u00edda de alto desempenho. O que o Gubernator faz? \u00d3tima pergunta.<\/p>\n","protected":false},"author":35,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24877","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-it-and-engineering"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/\",\"name\":\"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T17:52:52+00:00\",\"description\":\"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/it-and-engineering\\\/gubernator-cloud-native-distributed-rate-limiting-microservices\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/inicio\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun","description":"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013","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:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/","og_locale":"pt_BR","og_type":"article","og_title":"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun","og_description":"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013","og_url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/","url":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/","name":"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T17:52:52+00:00","description":"O Gubernator distribui as solicita\u00e7\u00f5es de limite de taxa uniformemente no cluster. Isso significa que voc\u00ea pode escalar o sistema apenas adicionando n\u00f3s. Leia mais \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/pt\/blog\/it-and-engineering\/gubernator-cloud-native-distributed-rate-limiting-microservices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/pt\/inicio\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/pt\/blog\/"},{"@type":"ListItem","position":3,"name":"Gubernator: limita\u00e7\u00e3o de taxa distribu\u00edda nativa da nuvem para microsservi\u00e7os"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/pt\/#website","url":"https:\/\/www.mailgun.com\/pt\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Poderosas APIs de e-mail transacional que permitem a voc\u00ea enviar, receber e rastrear e-mails, criadas com os desenvolvedores em mente. Saiba mais hoje mesmo!","publisher":{"@id":"https:\/\/www.mailgun.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/pt\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/users\/35"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog\/24877\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/media?parent=24877"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/pt\/wp-json\/wp\/v2\/blog_category?post=24877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}