{"id":24560,"date":"2026-09-16T14:44:10","date_gmt":"2026-09-16T14:44:10","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/"},"modified":"2026-09-16T14:44:10","modified_gmt":"2026-09-16T14:44:10","slug":"gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/","title":{"rendered":"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hoy, a Mailgun le entusiasma lanzar como c\u00f3digo abierto <a href=\"https:\/\/github.com\/mailgun\/gubernator\" target=\"_tabs\" rel=\"noopener noreferrer\">Gubernator<\/a>, un microservicio de limitaci\u00f3n de tasa distribuido y de alto rendimiento. \u00bfQu\u00e9 hace Gubernator? Buena pregunta:<\/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-3261\"><p class=\"h5 m-0\" id=\"toc-title-3261\">\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=\"#caracteristicas-de-gubernator\">Caracter\u00edsticas de 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-no-usar-redis\">\u00bfPor qu\u00e9 no usar 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-un-microservicio\">\u00bfPor qu\u00e9 un microservicio?<\/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-gubernator-no-tiene-estado\">\u00bfPor qu\u00e9 Gubernator no tiene estado?<\/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-funciona-gubernator\">C\u00f3mo funciona Gubernator<\/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=\"#funcionamiento-de-gubernator\">Funcionamiento de 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=\"#comportamiento-global\">Comportamiento global<\/a><a class=\"scrollme link-body-color\" href=\"#efectos-secundarios-del-comportamiento-global\">Efectos secundarios del comportamiento global<\/a><a class=\"scrollme link-body-color\" href=\"#rendimiento-de-gubernator\">Rendimiento de 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-biblioteca\">Gubernator como 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=\"#conclusion\">Conclusi\u00f3n<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Caracter\u00edsticas de Gubernator<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos.\u00a0<\/li>\n\n\n\n<li>Gubernator no depende de cach\u00e9s externas como Memcache o Redis, por lo que no hay sincronizaci\u00f3n de implementaci\u00f3n con un servicio dependiente. Esto hace que aumentar o reducir din\u00e1micamente el cl\u00faster en un sistema de orquestaci\u00f3n como Kubernetes o Nomad sea trivial.<\/li>\n\n\n\n<li>Gubernator no mantiene ning\u00fan estado en el disco, el cliente le pasa su configuraci\u00f3n por cada petici\u00f3n.<\/li>\n\n\n\n<li>Gubernator proporciona acceso GRPC y HTTP a su API.<\/li>\n\n\n\n<li>Puede ejecutarse como sidecar para los servicios que necesitan limitaci\u00f3n de tasa o como un servicio independiente.<\/li>\n\n\n\n<li>Puede usarse como biblioteca para implementar un servicio de limitaci\u00f3n de tasa espec\u00edfico de dominio.<\/li>\n\n\n\n<li>Admite de forma opcional una distribuci\u00f3n de limitaci\u00f3n de tasa con consistencia eventual para entornos de rendimiento extremadamente alto.\u00a0<\/li>\n\n\n\n<li>Gubernator es la <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\">pronunciaci\u00f3n en ingl\u00e9s de \u201cgobernador\u201d en ruso<\/a>, y adem\u00e1s suena genial.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Seguro que tienes muchas preguntas sobre <b>por qu\u00e9 decidimos lanzar Gubernator como c\u00f3digo abierto<\/b>. As\u00ed que, antes de entrar en c\u00f3mo funciona Gubernator, vamos a responder primero a algunas de esas preguntas. Es probable que la m\u00e1s importante que te est\u00e9s haciendo sea&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 no usar Redis?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nos llamaron la atenci\u00f3n un par de cosas al evaluar Redis.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Usar la <a href=\"https:\/\/redislabs.com\/redis-best-practices\/basic-rate-limiting\/\" target=\"_tabs\" rel=\"noopener noreferrer\">implementaci\u00f3n b\u00e1sica de limitaci\u00f3n de tasa de Redis<\/a> supondr\u00eda idas y venidas de red adicionales incluso con <a href=\"https:\/\/redis.io\/topics\/pipelining\" target=\"_tabs\" rel=\"noopener noreferrer\">canalizaci\u00f3n<\/a>. <\/li>\n\n\n\n<li>Podr\u00edamos reducir las idas y venidas usando <a href=\"https:\/\/redis.io\/commands\/eval\" target=\"_tabs\" rel=\"noopener noreferrer\">https:\/\/redis.io\/commands\/eval<\/a> y escribiendo un script en LUA que tendr\u00edamos que mantener por cada algoritmo que implement\u00e1ramos.<\/li>\n\n\n\n<li>Cada petici\u00f3n dar\u00eda como resultado al menos una ida y vuelta a Redis. Si combinamos eso con al menos una ida y vuelta a nuestro microservicio, significa que hay al menos dos idas y venidas por petici\u00f3n a nuestro servicio.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">La soluci\u00f3n \u00f3ptima para Redis es escribir un script en LUA que implemente el algoritmo de limitaci\u00f3n de tasa.\u00a0 Ese script se almacena en el servidor de Redis y se llama por cada petici\u00f3n de limitaci\u00f3n de tasa. En este escenario, Redis hace la mayor parte del trabajo y nuestro microservicio es b\u00e1sicamente un proxy para acceder a Redis. Siendo as\u00ed, tenemos dos opciones:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Crear Gubernator como una biblioteca de limitaci\u00f3n de tasa que proporcione acceso a Redis. Todos los servicios que necesiten limitar la tasa utilizar\u00edan esta biblioteca.\u00a0<\/li>\n\n\n\n<li>Eliminar Redis e implementar los algoritmos de distribuci\u00f3n, almacenamiento en cach\u00e9 y limitaci\u00f3n en un microservicio de limitaci\u00f3n de tasa con un cliente GRPC ligero para que lo utilice cada servicio.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 un microservicio?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mailgun es una empresa pol\u00edglota, y Python y Golang conforman la mayor parte de nuestro c\u00f3digo fuente. Si decidimos implementar la limitaci\u00f3n de tasa como una biblioteca, se requiere como m\u00ednimo una versi\u00f3n de la biblioteca en Python y otra en Golang. <b>Ya hemos seguido este camino a nivel interno con una versi\u00f3n en Python y otra en Golang de la misma biblioteca.<\/b> Seg\u00fan nuestra experiencia, las bibliotecas compartidas entre servicios tienen las siguientes desventajas.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Las actualizaciones de errores y caracter\u00edsticas de la biblioteca pueden suponer, en el mejor de los casos, una actualizaci\u00f3n de la dependencia. En el peor de los casos, requiere modificar todos los servicios que usan la biblioteca en todos los lenguajes compatibles.<\/li>\n\n\n\n<li>Rara vez el equipo de desarrollo quiere mantener o escribir caracter\u00edsticas nuevas en ambos lenguajes. Esto suele traducirse en que una versi\u00f3n de la biblioteca tenga m\u00e1s caracter\u00edsticas o un mejor mantenimiento que la otra.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">A medida que el n\u00famero de microservicios y lenguajes de nuestro ecosistema sigue creciendo, estos problemas se acumulan y empeoran. En comparaci\u00f3n, las bibliotecas GRPC y HTTP se crean y mantienen f\u00e1cilmente para cada lenguaje que necesite acceder a Gubernator.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para los microservicios, <b>se pueden a\u00f1adir actualizaciones de errores y nuevas caracter\u00edsticas sin interrumpir los servicios dependientes<\/b>. Siempre y cuando no se permitan cambios que rompan la API, los servicios dependientes pueden optar por las nuevas caracter\u00edsticas sin necesidad de actualizar todos los servicios dependientes.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La caracter\u00edstica clave de Gubernator como microservicio es que crea un punto de sincronizaci\u00f3n para las m\u00faltiples peticiones que entran en el sistema. Las peticiones que se reciben con pocos microsegundos de diferencia pueden optimizarse y coordinarse en lotes, lo que reduce el ancho de banda general y la latencia de ida y vuelta que utiliza el servicio bajo una carga pesada. Varios servicios que se ejecutan en un \u00fanico host con la misma biblioteca ejecut\u00e1ndose en sus respectivos procesos no tienen esta capacidad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 Gubernator no tiene estado?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gubernator no tiene estado en el sentido de que no requiere espacio en el disco para funcionar. Ning\u00fan dato de configuraci\u00f3n o cach\u00e9 se sincroniza nunca en el disco, y esto se debe a que cada petici\u00f3n a Gubernator incluye la configuraci\u00f3n para la limitaci\u00f3n de tasa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al principio, podr\u00edas pensar que esto supone una sobrecarga innecesaria para cada petici\u00f3n. Sin embargo, en realidad, la configuraci\u00f3n de limitaci\u00f3n de tasa se compone de solo cuatro n\u00fameros enteros de 64 bits. La configuraci\u00f3n se compone de l\u00edmite, duraci\u00f3n, algoritmo y comportamiento (consulta m\u00e1s abajo los detalles sobre c\u00f3mo funciona). Debido a esta sencilla configuraci\u00f3n, <b>Gubernator se puede utilizar para proporcionar una gran variedad de casos de uso de limitaci\u00f3n de tasa que pueden emplear los clientes<\/b>. Algunos de estos casos de uso son:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><b>Limitaci\u00f3n de entrada<\/b>: limitaci\u00f3n t\u00edpica basada en HTTP del tipo 402 demasiadas peticiones<\/li>\n\n\n\n<li><b>Descarte de tr\u00e1fico<\/b>: deniega solo las peticiones nuevas o sin autenticar cuando tu API est\u00e9 en mal estado.<\/li>\n\n\n\n<li><b>Limitaci\u00f3n de salida<\/b>: bombardear servidores SMTP externos con millones de mensajes no es bueno.<\/li>\n\n\n\n<li><b>Procesamiento de colas<\/b>: sabe cu\u00e1ndo una petici\u00f3n se puede gestionar de inmediato o si debe ponerse en cola y procesarse en el orden en que se recibi\u00f3.<\/li>\n\n\n\n<li><b>Gesti\u00f3n de capacidad de la API<\/b>: establece l\u00edmites globales sobre el n\u00famero total de peticiones que puede gestionar un sistema API colectivo. Deniega o pone en cola las peticiones que superen la capacidad de funcionamiento normal del sistema.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de los casos de uso mencionados, un dise\u00f1o sin configuraci\u00f3n tiene implicaciones importantes para el dise\u00f1o y la implementaci\u00f3n de microservicios:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sin sincronizaci\u00f3n de la configuraci\u00f3n en la implementaci\u00f3n. Cuando se implementa un servicio que usa Gubernator, no hay ninguna configuraci\u00f3n de limitaci\u00f3n de tasa que se deba implementar previamente en Gubernator.<\/li>\n\n\n\n<li>Los servicios que usan Gubernator poseen su modelo de dominio de limitaci\u00f3n de tasa para su \u00e1mbito del problema. Esto mantiene el conocimiento espec\u00edfico del dominio fuera de Gubernator, para que Gubernator pueda centrarse en lo que mejor hace: \u00a1limitar tasas!<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Dejando a un lado esas preguntas, vamos a hablar m\u00e1s sobre Gubernator en su conjunto, empezando por <b>c\u00f3mo funciona<\/b>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo funciona Gubernator<\/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\">Gubernator est\u00e1 dise\u00f1ado para ejecutarse como un cl\u00faster distribuido de pares que utilizan una cach\u00e9 en memoria de todos los l\u00edmites de tasa actualmente activos, por lo que nunca se sincronizan datos en el disco. Dado que la mayor\u00eda de las duraciones de l\u00edmites de tasa basadas en la red se mantienen solo durante unos segundos, perder la cach\u00e9 en memoria durante un reinicio o un tiempo de inactividad programado no es un gran problema. Para Gubernator, <b>elegimos el rendimiento por encima de la precisi\u00f3n, ya que es aceptable que un peque\u00f1o subconjunto de tr\u00e1fico haga demasiadas peticiones durante un corto periodo de tiempo (generalmente segundos) en caso de p\u00e9rdida de cach\u00e9.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se hace una petici\u00f3n de limitaci\u00f3n de tasa a Gubernator, la petici\u00f3n recibe una clave y se aplica un algoritmo de hash consistente para determinar cu\u00e1l de los pares ser\u00e1 el propietario de la petici\u00f3n de limitaci\u00f3n de tasa. Elegir un \u00fanico propietario para un l\u00edmite de tasa hace que los incrementos at\u00f3micos de los recuentos sean muy r\u00e1pidos y evita la complejidad y latencia que supone distribuir recuentos de forma consistente en un cl\u00faster de pares.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque es sencillo y tiene un buen rendimiento, <b>este dise\u00f1o podr\u00eda ser susceptible a una avalancha de peticiones<\/b>, ya que un \u00fanico coordinador es responsable de, posiblemente, cientos de miles de peticiones hacia un l\u00edmite de tasa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para combatir esto, los clientes pueden solicitar `Behaviour=BATCHING`, lo que permite a los pares tomar m\u00faltiples peticiones en un margen especificado (500 microsegundos por defecto) y agruparlas en una \u00fanica petici\u00f3n al par, lo que reduce dr\u00e1sticamente el n\u00famero total de peticiones a trav\u00e9s de la red a un solo par de Gubernator.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para garantizar que cada par del cl\u00faster calcule con precisi\u00f3n el hash correcto para una clave de l\u00edmite de tasa, <b>la lista de pares del cl\u00faster se debe distribuir a cada uno de ellos de forma oportuna y coherente.<\/b> En la actualidad, Gubernator admite el uso de etcd o la API de puntos de conexi\u00f3n de Kubernetes para descubrir pares de Gubernator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Funcionamiento de Gubernator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un cliente o servicio hace una petici\u00f3n a Gubernator, el cliente proporciona la configuraci\u00f3n del l\u00edmite de tasa con cada petici\u00f3n. La configuraci\u00f3n de limitaci\u00f3n de tasa se almacena entonces con el estado actual del l\u00edmite de tasa en la cach\u00e9 local del propietario del l\u00edmite de tasa. Los l\u00edmites de tasa y su configuraci\u00f3n que se almacenan en la cach\u00e9 local solo existir\u00e1n durante la duraci\u00f3n especificada de la configuraci\u00f3n del l\u00edmite de tasa.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez transcurrido el tiempo de duraci\u00f3n y si no se volvi\u00f3 a solicitar el l\u00edmite de tasa en ese periodo, se descarta de la cach\u00e9. <b>Las peticiones posteriores para el mismo par de nombre y clave \u00fanica volver\u00e1n a crear la configuraci\u00f3n y el l\u00edmite de tasa en la cach\u00e9 y el ciclo se repetir\u00e1<\/b>. Por otro lado, las peticiones posteriores con configuraciones diferentes sobrescribir\u00e1n la configuraci\u00f3n anterior y aplicar\u00e1n la nueva de inmediato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un ejemplo de petici\u00f3n de limitaci\u00f3n de tasa enviada a trav\u00e9s de GRPC ser\u00eda as\u00ed:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\">Un ejemplo de respuesta ser\u00eda:<\/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=\"Copia al portapapeles\" data-clipboard-success-label=\"\u00a1Copiado!\" data-clipboard-error-label=\"No se ha podido copiar\" data-tooltip=\"Copia al portapapeles\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copia al portapapeles\">\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\">Comportamiento global<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dado que a los l\u00edmites de tasa de Gubernator se les aplica un hash y los gestiona un \u00fanico par del cl\u00faster, los l\u00edmites de tasa que se aplican a todas las peticiones de un centro de datos har\u00edan que un solo par se encargara de la petici\u00f3n de limitaci\u00f3n de tasa para todo el centro de datos.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, considera un l\u00edmite de tasa con <code>name=requests_per_datacenter<\/code> y un <code>unique_id=us-east-1<\/code>. Imagina ahora que se hace una petici\u00f3n a Gubernator con este l\u00edmite de tasa por cada petici\u00f3n HTTP que entra en el centro de datos <code>us-east-1<\/code>. <b>Podr\u00edan ser cientos de miles, o incluso potencialmente millones de peticiones por segundo a las que un \u00fanico par del cl\u00faster aplica el hash y gestiona.<\/b> Debido a este posible problema de escalabilidad, Gubernator introduce un\u00a0 <code>behavior<\/code> configurable llamado <code>GLOBAL<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando se configura un l\u00edmite de tasa con <code>behavior=GLOBAL<\/code>, la petici\u00f3n de l\u00edmite de tasa que se recibe de un cliente no se reenviar\u00e1 al par propietario. En su lugar, se responder\u00e1 desde una cach\u00e9 interna gestionada por el par que recibi\u00f3 la petici\u00f3n. El par receptor agrupar\u00e1 los <code>Hits<\/code> hacia el l\u00edmite de tasa en lotes y los enviar\u00e1 de forma as\u00edncrona al par propietario, donde se sumar\u00e1n los impactos y se calcular\u00e1 el <code>OVER_LIMIT<\/code>. A continuaci\u00f3n, es responsabilidad del par propietario actualizar cada par del cl\u00faster con el estado actual del l\u00edmite de tasa, de manera que <b>las cach\u00e9s internas de los pares se actualicen de forma rutinaria<\/b> con el estado del l\u00edmite de tasa m\u00e1s reciente del propietario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Efectos secundarios del comportamiento global<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dado que los <code>Hits<\/code> se agrupan en lotes y se reenv\u00edan al par propietario de forma as\u00edncrona, la respuesta inmediata al cliente no incluir\u00e1 el recuento restante (<code>remaining<\/code>) m\u00e1s preciso. Ese recuento solo se actualizar\u00e1 una vez que se haya completado la llamada as\u00edncrona al par propietario y este haya tenido tiempo de actualizar todos los pares del cl\u00faster. Como resultado, el uso de <code>GLOBAL<\/code> permite una mayor escalabilidad, pero a costa de la consistencia. Usar <code>GLOBAL<\/code> puede aumentar la cantidad de tr\u00e1fico por petici\u00f3n de l\u00edmite de tasa si el cl\u00faster es lo suficientemente grande. <b><code>GLOBAL<\/code><\/b><b> solo se debe usar para l\u00edmites de tasa de volumen extremadamente alto que no escalan bien con el comportamiento no <\/b><b><code>GLOBAL<\/code><\/b><b> tradicional.<\/b><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rendimiento de Gubernator<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En nuestro entorno de producci\u00f3n, por cada petici\u00f3n a nuestra API, enviamos dos peticiones de l\u00edmite de tasa a Gubernator para que eval\u00fae el l\u00edmite de tasa; una para evaluar la petici\u00f3n HTTP y la otra para evaluar el n\u00famero de destinatarios a los que un usuario puede enviar un email dentro de la duraci\u00f3n espec\u00edfica. Bajo esta configuraci\u00f3n, un solo nodo de Gubernator responde a m\u00e1s de 2000 peticiones por segundo y la mayor\u00eda de las respuestas por lotes se devuelven en menos de un milisegundo.\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\">Las peticiones de pares que se reenv\u00edan a los nodos propietarios suelen responder en menos de 30 microsegundos.\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\">Puesto que muchas de nuestras API p\u00fablicas est\u00e1n escritas en Python, ejecutamos muchas instancias del int\u00e9rprete de Python en un solo nodo. Esas instancias de Python reenviar\u00e1n las peticiones a nivel local a la instancia de Gubernator, que luego agrupa en lotes y reenv\u00eda las peticiones a los nodos propietarios.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gubernator permite a los usuarios elegir un comportamiento sin procesamiento por lotes, lo que reducir\u00eda a\u00fan m\u00e1s la latencia de las peticiones de l\u00edmite de tasa del cliente. Sin embargo, debido a los requisitos de rendimiento, nuestro entorno de producci\u00f3n usa <code>Behaviour=BATCHING<\/code> con el margen predeterminado de 500 microsegundos. En producci\u00f3n, hemos observado tama\u00f1os de lotes de 1000 durante el uso m\u00e1ximo de la API. Otros usuarios que no tengan las mismas exigencias de tr\u00e1fico alto podr\u00edan desactivar el procesamiento por lotes y ver\u00edan latencias m\u00e1s bajas, pero a costa del rendimiento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gubernator como biblioteca<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si est\u00e1s usando Golang, puedes usar Gubernator como biblioteca. Esto es \u00fatil si quieres implementar encima un servicio de limitaci\u00f3n de tasa con tu propio modelo espec\u00edfico de la empresa. Hacemos esto internamente aqu\u00ed en Mailgun con un servicio que, de forma creativa, hemos llamado <code>ratelimits<\/code> y que hace un seguimiento de los l\u00edmites impuestos a cada cuenta. <b>De esta manera, puedes aprovechar la potencia y velocidad de Gubernator, pero seguir a\u00f1adiendo l\u00f3gica comercial e integrando problemas espec\u00edficos del dominio en tu servicio de limitaci\u00f3n de tasa.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando usas la biblioteca, tu servicio se convierte en un miembro de pleno derecho del cl\u00faster que participa en el mismo hashing y almacenamiento en cach\u00e9 consistentes que lo har\u00eda un servidor Gubernator independiente. Lo \u00fanico que tienes que hacer es proporcionar la instancia del servidor GRPC e indicar a Gubernator d\u00f3nde se encuentran los pares de tu cl\u00faster.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Usar Gubernator como un servicio de limitaci\u00f3n de tasa de prop\u00f3sito general nos permite confiar en la arquitectura de microservicios sin comprometer la independencia del servicio ni duplicar el trabajo que requieren las soluciones de limitaci\u00f3n de tasa habituales. <b>Esperamos que, al lanzar este proyecto como c\u00f3digo abierto, todo el mundo pueda colaborar y beneficiarse del trabajo que hemos empezado aqu\u00ed.<\/b><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfTe interesa trabajar en Mailgun? \u00a1Buscamos gente! Y tenemos varios puestos de desarrollo disponibles. <a href=\"https:\/\/apply.workable.com\/mailgun\/?lng=en\" target=\"_tabs\" rel=\"noopener noreferrer\">Echa un vistazo a nuestras ofertas de trabajo actuales aqu\u00ed.<\/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_bcf7818d3641a865888dd08597283844\">\r\n                    <p class=\"text-uppercase section-caption text-body-color\">\r\n                Reg\u00edstrate            <\/p>\r\n                            <p class=\"h4 text-accent fw-bold\" id=\"banner-block-block_bcf7818d3641a865888dd08597283844\">\r\n                Empezar es facil\u00edsimo. Y gratis.            <\/p>\r\n                            <div class=\"mb-0 text-body-color\">\r\n                                    <div class=\"content-body mb-0 text-body-color\">Descubre todo lo que puedes lograr con la mejor plataforma de entrega de emails del 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>Hoy, a Mailgun le entusiasma lanzar Gubernator como c\u00f3digo abierto, un microservicio de limitaci\u00f3n de tasa distribuido y de alto rendimiento. \u00bfQu\u00e9 hace Gubernator? Buena pregunta.<\/p>\n","protected":false},"author":35,"featured_media":4843,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[23],"class_list":["post-24560","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: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \u2013\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/\" \/>\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\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/\",\"name\":\"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-IT-Engineering.png\",\"datePublished\":\"2026-09-16T14:44:10+00:00\",\"description\":\"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \u2013\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/#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\\\/es\\\/blog\\\/it-and-engineering\\\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/es\\\/#\\\/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\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun","description":"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \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\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/","og_locale":"es_ES","og_type":"article","og_title":"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun","og_description":"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \u2013","og_url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/","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\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/","url":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/","name":"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-IT-Engineering.png","datePublished":"2026-09-16T14:44:10+00:00","description":"Gubernator distribuye uniformemente las peticiones de limitaci\u00f3n de tasa en todo el cl\u00faster, lo que significa que puedes escalar el sistema con solo a\u00f1adir m\u00e1s nodos. M\u00e1s informaci\u00f3n \u2013","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/#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\/es\/blog\/it-and-engineering\/gubernator-limitacion-tasa-distribuida-nativa-nube-microservicios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/es\/blog\/"},{"@type":"ListItem","position":3,"name":"Gubernator: limitaci\u00f3n de tasa distribuida y nativa de la nube para microservicios"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/es\/#website","url":"https:\/\/www.mailgun.com\/es\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Potentes API de email transaccional que te permiten enviar, recibir y hacer seguimiento de emails, creadas pensando en los desarrolladores. \u00a1Descubre m\u00e1s!","publisher":{"@id":"https:\/\/www.mailgun.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/es\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.mailgun.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/users\/35"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog\/24560\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media\/4843"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/media?parent=24560"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/es\/wp-json\/wp\/v2\/blog_category?post=24560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}