{"id":34383,"date":"2025-11-07T13:54:26","date_gmt":"2025-11-07T12:54:26","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=34383"},"modified":"2025-11-07T14:22:47","modified_gmt":"2025-11-07T13:22:47","slug":"microsoft-azure-el-miercoles-negro-que-detuvo-la-red","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/","title":{"rendered":"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red"},"content":{"rendered":"\n<p>El pasado <strong>mi\u00e9rcoles 29 de octubre de 2025<\/strong>, el mundo digital experiment\u00f3 un par\u00f3n dram\u00e1tico que afect\u00f3 a millones, una <strong>falla global masiva<\/strong> en la plataforma de servicios en la nube de <strong>Microsoft Azure<\/strong>. Lo que comenz\u00f3 como un problema de latencia pronto escal\u00f3 a una interrupci\u00f3n a gran escala, paralizando servicios esenciales y reavivando el debate sobre nuestra dependencia de las infraestructuras <em>cloud<\/em>.&nbsp;<\/p>\n\n\n\n<p>Millones de usuarios y empresas vieron interrumpidas sus operaciones, afectando desde videojuegos hasta plataformas cr\u00edticas de productividad. El origen del problema fue identificado en <strong>Azure Front Door<\/strong>, el servicio encargado de distribuir el tr\u00e1fico global y garantizar que aplicaciones y sitios web est\u00e9n siempre disponibles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"h-cual-fue-el-epicentro-de-la-nbsp-falla-de-microsoft-azure-nbsp\"><strong>\u00bfCu\u00e1l fue el epicentro de la&nbsp;falla de Microsoft Azure?&nbsp;<\/strong><\/h2>\n\n\n\n<p>Microsoft no tard\u00f3 en confirmar la ra\u00edz del problema, apuntando a <strong>Azure Front Door (AFD)<\/strong>.<\/p>\n\n\n\n<p>Azure Front Door funciona como un <strong>\u201cportero digital\u201d.<\/strong> Es el sistema de distribuci\u00f3n de contenido (CDN) global y punto de entrada de red de Microsoft. Act\u00faa como la \u201cpuerta principal\u201d de muchos de los servicios m\u00e1s grandes y cr\u00edticos alojados en Azure y m\u00e1s all\u00e1 (incluyendo a menudo el acceso a <strong>Microsoft 365<\/strong>).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Distribuye el tr\u00e1fico<\/strong>: redirige a los usuarios al servidor m\u00e1s cercano y disponible.<\/li>\n\n\n\n<li><strong>Optimiza la velocidad<\/strong>: reduce la latencia al usar la red global de Microsoft.<\/li>\n\n\n\n<li><strong>Protege contra ataques<\/strong>: incluye firewalls y mitigaci\u00f3n de DDoS.<\/li>\n<\/ul>\n\n\n\n<p>En otras palabras, si piensas en internet como una autopista, <strong>Front Door es el sistema de peajes y desv\u00edos inteligentes<\/strong> que asegura que los autos (usuarios) lleguen r\u00e1pido y sin congesti\u00f3n a su destino (aplicaciones).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-que-ocurrio-en-el-miercoles-negro-con-microsoft-azure\"><strong>\u00bfQu\u00e9 ocurri\u00f3 en el \u201cmi\u00e9rcoles negro\u201dcon Microsoft Azure?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Hora del fallo<\/strong>: alrededor del mediod\u00eda, los reportes en <a href=\"https:\/\/downdetector.com\/\">Downdetector<\/a> se dispararon en cuesti\u00f3n de minutos.<\/li>\n\n\n\n<li><strong>Servicios afectados<\/strong>: <strong>Microsoft 365<\/strong> (Outlook, Teams, OneDrive). <strong>Xbox y juegos en l\u00ednea<\/strong> como <em>Minecraft<\/em> y <em>Sea of Thieves<\/em>. <strong>Microsoft Store<\/strong> y servicios empresariales cr\u00edticos.<\/li>\n\n\n\n<li><strong>Impacto global<\/strong>: usuarios en <strong>EE. UU., Europa y Am\u00e9rica Latina<\/strong> reportaron interrupciones simult\u00e1neas.<\/li>\n<\/ul>\n\n\n\n<p>El problema fue tan severo que incluso empresas que dependen de Azure para alojar sus sitios web y aplicaciones quedaron fuera de l\u00ednea, generando p\u00e9rdidas econ\u00f3micas y de productividad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-la-causa-confirmada\"><strong>La causa confirmada<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un <strong>defecto de software<\/strong> en el plano de control de AFD, introducido semanas antes, fue el catalizador. Este fallo desencaden\u00f3 una <strong>p\u00e9rdida de capacidad<\/strong> en las instancias subyacentes de Kubernetes que gestionan el tr\u00e1fico, resultando en:<\/li>\n\n\n\n<li>Fallo en la gesti\u00f3n y resoluci\u00f3n de solicitudes DNS (para dominios cr\u00edticos como <code>azureedge.net<\/code>).<\/li>\n\n\n\n<li>Tiempos de espera (timeouts) y latencia masiva.<\/li>\n\n\n\n<li>Fallo intermitente para acceder a portales de administraci\u00f3n y para iniciar sesi\u00f3n en m\u00faltiples servicios.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ejemplos-infraestructura-como-codigo-azure-front-door-standard-premium\"><strong>Ejemplos\u200a\u2014\u200ainfraestructura como c\u00f3digo: Azure Front Door Standard\/Premium<\/strong><\/h3>\n\n\n\n<p>C\u00f3mo configurar <a href=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/a-first-web-app-on-microsoft-azure\/\">Azure<\/a> Front Door, dise\u00f1ar rutas de failover activo-activo, aplicar reglas para manejar errores 503\/504, y endurecer el cliente con reintentos y circuit breakers. Todo pensado para minimizar el impacto de una ca\u00edda similar.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-terraform-azure-front-door-standard-premium-con-dos-backends-y-failover-por-latencia\"><strong><em>Terraform\u200a\u2014\u200aAzure Front Door (Standard\/Premium) con dos backends y failover por latencia<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">terraform {\n  required_providers {\n    azurerm = {\n      source  = <span class=\"hljs-string\">\"hashicorp\/azurerm\"<\/span>\n      version = <span class=\"hljs-string\">\"~&gt; 3.75\"<\/span>\n    }\n  }\n}\n\nprovider <span class=\"hljs-string\">\"azurerm\"<\/span> {\n  features {}\n}\n\nresource <span class=\"hljs-string\">\"azurerm_resource_group\"<\/span> <span class=\"hljs-string\">\"rg\"<\/span> {\n  name     = <span class=\"hljs-string\">\"rg-frontdoor\"<\/span>\n  location = <span class=\"hljs-string\">\"eastus\"<\/span>\n  tags = {\n    project = <span class=\"hljs-string\">\"edge-resilience\"<\/span>\n    owner   = <span class=\"hljs-string\">\"team-plat\"<\/span>\n  }\n}\n\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_profile\"<\/span> <span class=\"hljs-string\">\"fdp\"<\/span> {\n  name                = <span class=\"hljs-string\">\"fd-global-profile\"<\/span>\n  resource_group_name = azurerm_resource_group.rg.name\n  sku_name            = <span class=\"hljs-string\">\"Standard_AzureFrontDoor\"<\/span>\n  tags = {\n    env = <span class=\"hljs-string\">\"prod\"<\/span>\n  }\n}\n\n<span class=\"hljs-comment\"># Origin Group (agrupar or\u00edgenes, probe y restore policy)<\/span>\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_origin_group\"<\/span> <span class=\"hljs-string\">\"og\"<\/span> {\n  name                          = <span class=\"hljs-string\">\"og-prod\"<\/span>\n  cdn_frontdoor_profile_id      = azurerm_cdn_frontdoor_profile.fdp.id\n  session_affinity_enabled      = <span class=\"hljs-keyword\">false<\/span>\n  restore_traffic_time_to_healed_origins_in_minutes = <span class=\"hljs-number\">1<\/span>\n  tags = { purpose = <span class=\"hljs-string\">\"failover\"<\/span> }\n\n  health_probe {\n    interval_in_seconds = <span class=\"hljs-number\">10<\/span>\n    path                = <span class=\"hljs-string\">\"\/healthz\"<\/span>\n    protocol            = <span class=\"hljs-string\">\"Https\"<\/span>\n    request_type        = <span class=\"hljs-string\">\"GET\"<\/span>\n  }\n}\n\n<span class=\"hljs-comment\"># Origen East US<\/span>\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_origin\"<\/span> <span class=\"hljs-string\">\"origin_eastus\"<\/span> {\n  name                           = <span class=\"hljs-string\">\"api-eastus\"<\/span>\n  cdn_frontdoor_origin_group_id  = azurerm_cdn_frontdoor_origin_group.og.id\n  host_name                      = <span class=\"hljs-string\">\"api-eastus.contoso.com\"<\/span>\n  http_port                      = <span class=\"hljs-number\">80<\/span>\n  https_port                     = <span class=\"hljs-number\">443<\/span>\n  origin_host_header             = <span class=\"hljs-string\">\"api-eastus.contoso.com\"<\/span>\n  priority                       = <span class=\"hljs-number\">1<\/span>\n  weight                         = <span class=\"hljs-number\">50<\/span>\n  enabled                        = <span class=\"hljs-keyword\">true<\/span>\n  tags = { region = <span class=\"hljs-string\">\"eastus\"<\/span> }\n}\n\n<span class=\"hljs-comment\"># Origen West Europe<\/span>\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_origin\"<\/span> <span class=\"hljs-string\">\"origin_westeurope\"<\/span> {\n  name                           = <span class=\"hljs-string\">\"api-westeurope\"<\/span>\n  cdn_frontdoor_origin_group_id  = azurerm_cdn_frontdoor_origin_group.og.id\n  host_name                      = <span class=\"hljs-string\">\"api-weu.contoso.com\"<\/span>\n  http_port                      = <span class=\"hljs-number\">80<\/span>\n  https_port                     = <span class=\"hljs-number\">443<\/span>\n  origin_host_header             = <span class=\"hljs-string\">\"api-weu.contoso.com\"<\/span>\n  priority                       = <span class=\"hljs-number\">1<\/span>\n  weight                         = <span class=\"hljs-number\">50<\/span>\n  enabled                        = <span class=\"hljs-keyword\">true<\/span>\n  tags = { region = <span class=\"hljs-string\">\"westeurope\"<\/span> }\n}\n\n<span class=\"hljs-comment\"># Endpoint p\u00fablico (Front Door endpoint)<\/span>\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_endpoint\"<\/span> <span class=\"hljs-string\">\"fde\"<\/span> {\n  name                     = <span class=\"hljs-string\">\"edge-contoso\"<\/span>\n  cdn_frontdoor_profile_id = azurerm_cdn_frontdoor_profile.fdp.id\n  enabled                  = <span class=\"hljs-keyword\">true<\/span>\n  tags = { <span class=\"hljs-keyword\">public<\/span> = <span class=\"hljs-string\">\"true\"<\/span> }\n}\n\n<span class=\"hljs-comment\"># Route: enruta todo el tr\u00e1fico a la origin group con failover<\/span>\nresource <span class=\"hljs-string\">\"azurerm_cdn_frontdoor_route\"<\/span> <span class=\"hljs-string\">\"route_all\"<\/span> {\n  name                          = <span class=\"hljs-string\">\"route-all\"<\/span>\n  cdn_frontdoor_endpoint_id     = azurerm_cdn_frontdoor_endpoint.fde.id\n  cdn_frontdoor_origin_group_id = azurerm_cdn_frontdoor_origin_group.og.id\n\n  supported_protocols    = &#91;<span class=\"hljs-string\">\"Http\"<\/span>, <span class=\"hljs-string\">\"Https\"<\/span>]\n  https_redirect_enabled = <span class=\"hljs-keyword\">true<\/span>\n  patterns_to_match      = &#91;<span class=\"hljs-string\">\"\/*\"<\/span>]\n  forwarding_protocol    = <span class=\"hljs-string\">\"HttpsOnly\"<\/span>\n  cache_enabled          = <span class=\"hljs-keyword\">true<\/span>\n  enabled                = <span class=\"hljs-keyword\">true<\/span>\n\n  <span class=\"hljs-comment\"># Opcional: define caching defaults a nivel de ruta<\/span>\n  origin_request_policy = {\n    <span class=\"hljs-comment\"># dejar por defecto o definir headers, cookies que pasar<\/span>\n  }\n\n  tags = { route = <span class=\"hljs-string\">\"global\"<\/span> }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a class=\"alt=&quot;Microsoft Azure y Front Door&quot;\" href=\"https:\/\/aistudio.google.com\/311cbf56-8cba-48a5-b1cf-f653a7538bc5\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*E_0oEnSvCqeBENQjfXwtOQ.png\" alt=\"\"\/><\/a><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-rules-engine-json-degradacion-elegante-ante-503-504-throttle-simple\"><strong><em>Rules Engine\u200a\u2014\u200aJSON (degradaci\u00f3n elegante ante 503\/504 + throttle simple)<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"rules-degradacion\"<\/span>,\n  <span class=\"hljs-attr\">\"properties\"<\/span>: {\n    <span class=\"hljs-attr\">\"rules\"<\/span>: &#91;\n      {\n        <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"fallback-503\"<\/span>,\n        <span class=\"hljs-attr\">\"conditions\"<\/span>: &#91;\n          {\n            <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"ResponseStatusCode\"<\/span>,\n            <span class=\"hljs-attr\">\"parameters\"<\/span>: {\n              <span class=\"hljs-attr\">\"matchValues\"<\/span>: &#91;<span class=\"hljs-string\">\"503\"<\/span>, <span class=\"hljs-string\">\"504\"<\/span>],\n              <span class=\"hljs-attr\">\"operator\"<\/span>: <span class=\"hljs-string\">\"Equals\"<\/span>\n            }\n          }\n        ],\n        <span class=\"hljs-attr\">\"actions\"<\/span>: &#91;\n          {\n            <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"UrlRewrite\"<\/span>,\n            <span class=\"hljs-attr\">\"parameters\"<\/span>: {\n              <span class=\"hljs-attr\">\"sourcePattern\"<\/span>: <span class=\"hljs-string\">\"\/.*\"<\/span>,\n              <span class=\"hljs-attr\">\"destination\"<\/span>: <span class=\"hljs-string\">\"\/fallback\/index.html\"<\/span>,\n              <span class=\"hljs-attr\">\"preserveUnmatchedPath\"<\/span>: <span class=\"hljs-literal\">false<\/span>\n            }\n          },\n          {\n            <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"Cache\"<\/span>,\n            <span class=\"hljs-attr\">\"parameters\"<\/span>: {\n              <span class=\"hljs-attr\">\"cacheBehavior\"<\/span>: <span class=\"hljs-string\">\"Override\"<\/span>,\n              <span class=\"hljs-attr\">\"cacheDuration\"<\/span>: <span class=\"hljs-string\">\"600\"<\/span>\n            }\n          }\n        ],\n        <span class=\"hljs-attr\">\"priority\"<\/span>: <span class=\"hljs-number\">1<\/span>,\n        <span class=\"hljs-attr\">\"enabledState\"<\/span>: <span class=\"hljs-string\">\"Enabled\"<\/span>\n      },\n      {\n        <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"throttle-burst\"<\/span>,\n        <span class=\"hljs-attr\">\"conditions\"<\/span>: &#91;\n          {\n            <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"RequestRate\"<\/span>,\n            <span class=\"hljs-attr\">\"parameters\"<\/span>: {\n              <span class=\"hljs-attr\">\"operator\"<\/span>: <span class=\"hljs-string\">\"GreaterThan\"<\/span>,\n              <span class=\"hljs-attr\">\"matchValues\"<\/span>: &#91;<span class=\"hljs-string\">\"1000\"<\/span>],\n              <span class=\"hljs-attr\">\"transform\"<\/span>: <span class=\"hljs-string\">\"None\"<\/span>,\n              <span class=\"hljs-attr\">\"aggregationIntervalInSeconds\"<\/span>: <span class=\"hljs-number\">60<\/span>\n            }\n          }\n        ],\n        <span class=\"hljs-attr\">\"actions\"<\/span>: &#91;\n          {\n            <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"ModifyResponseHeader\"<\/span>,\n            <span class=\"hljs-attr\">\"parameters\"<\/span>: {\n              <span class=\"hljs-attr\">\"headerAction\"<\/span>: <span class=\"hljs-string\">\"Append\"<\/span>,\n              <span class=\"hljs-attr\">\"headerName\"<\/span>: <span class=\"hljs-string\">\"Retry-After\"<\/span>,\n              <span class=\"hljs-attr\">\"value\"<\/span>: <span class=\"hljs-string\">\"5\"<\/span>\n            }\n          }\n        ],\n        <span class=\"hljs-attr\">\"priority\"<\/span>: <span class=\"hljs-number\">2<\/span>,\n        <span class=\"hljs-attr\">\"enabledState\"<\/span>: <span class=\"hljs-string\">\"Enabled\"<\/span>\n      }\n    ]\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong><em>Explicaci\u00f3n<\/em>: <\/strong><code>Cache<\/code> en Rules Engine sirve para overrides puntuales, para caching por defecto lo ideal es usar settings de Route\/Endpoint. Aqu\u00ed lo dejo expl\u00edcito como mecanismo de contingencia.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-cliente-node-js-axios-retry-exponencial-opossum-circuit-breaker\"><strong><em>Cliente Node.js\u200a\u2014\u200aAxios + retry exponencial + Opossum (circuit breaker)<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/\/ resilientClient.js<\/span>\n<span class=\"hljs-keyword\">import<\/span> axios <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"axios\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> CircuitBreaker <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"opossum\"<\/span>;\n\n<span class=\"hljs-keyword\">const<\/span> client = axios.create({\n  <span class=\"hljs-attr\">baseURL<\/span>: <span class=\"hljs-string\">\"https:\/\/edge-contoso.azurefd.net\"<\/span>,\n  <span class=\"hljs-attr\">timeout<\/span>: <span class=\"hljs-number\">3000<\/span>,\n  <span class=\"hljs-attr\">validateStatus<\/span>: <span class=\"hljs-function\"><span class=\"hljs-params\">status<\/span> =&gt;<\/span> status &lt; <span class=\"hljs-number\">500<\/span> <span class=\"hljs-comment\">\/\/ deja pasar 2xx\/3xx\/4xx; 5xx -&gt; catch<\/span>\n});\n\n<span class=\"hljs-comment\">\/\/ Funci\u00f3n que realizar\u00e1 la petici\u00f3n \u2014 retorna una Promise<\/span>\n<span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">callApi<\/span>(<span class=\"hljs-params\">path<\/span>) <\/span>{\n  <span class=\"hljs-keyword\">const<\/span> maxRetries = <span class=\"hljs-number\">5<\/span>;\n  <span class=\"hljs-keyword\">let<\/span> attempt = <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-keyword\">let<\/span> delay = <span class=\"hljs-number\">200<\/span>;\n\n  <span class=\"hljs-keyword\">while<\/span> (attempt &lt; maxRetries) {\n    <span class=\"hljs-keyword\">try<\/span> {\n      <span class=\"hljs-keyword\">const<\/span> res = <span class=\"hljs-keyword\">await<\/span> client.get(path);\n      <span class=\"hljs-keyword\">return<\/span> res.data;\n    } <span class=\"hljs-keyword\">catch<\/span> (err) {\n      attempt++;\n      <span class=\"hljs-keyword\">if<\/span> (attempt &gt;= maxRetries) <span class=\"hljs-keyword\">throw<\/span> err;\n      <span class=\"hljs-keyword\">await<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Promise<\/span>(<span class=\"hljs-function\"><span class=\"hljs-params\">r<\/span> =&gt;<\/span> setTimeout(r, delay));\n      delay = <span class=\"hljs-built_in\">Math<\/span>.min(delay * <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">4000<\/span>);\n    }\n  }\n}\n\n<span class=\"hljs-comment\">\/\/ Opossum espera una funci\u00f3n que retorne una promesa.<\/span>\n<span class=\"hljs-comment\">\/\/ Envolveremos callApi en una funci\u00f3n que reciba el argumento \"path\".<\/span>\n<span class=\"hljs-keyword\">const<\/span> breakerOptions = {\n  <span class=\"hljs-attr\">timeout<\/span>: <span class=\"hljs-number\">5000<\/span>, <span class=\"hljs-comment\">\/\/ timepo m\u00e1ximo para la funci\u00f3n del breaker<\/span>\n  <span class=\"hljs-attr\">errorThresholdPercentage<\/span>: <span class=\"hljs-number\">50<\/span>,\n  <span class=\"hljs-attr\">resetTimeout<\/span>: <span class=\"hljs-number\">10000<\/span>,\n  <span class=\"hljs-attr\">rollingCountTimeout<\/span>: <span class=\"hljs-number\">10000<\/span>\n};\n\n<span class=\"hljs-keyword\">const<\/span> breaker = <span class=\"hljs-keyword\">new<\/span> CircuitBreaker(<span class=\"hljs-function\">(<span class=\"hljs-params\">path<\/span>) =&gt;<\/span> callApi(path), breakerOptions);\n\nbreaker.on(<span class=\"hljs-string\">\"open\"<\/span>, () =&gt; <span class=\"hljs-built_in\">console<\/span>.warn(<span class=\"hljs-string\">\"Circuito ABIERTO: degradando\"<\/span>));\nbreaker.on(<span class=\"hljs-string\">\"halfOpen\"<\/span>, () =&gt; <span class=\"hljs-built_in\">console<\/span>.info(<span class=\"hljs-string\">\"Circuito HALF-OPEN: probando\"<\/span>));\nbreaker.on(<span class=\"hljs-string\">\"close\"<\/span>, () =&gt; <span class=\"hljs-built_in\">console<\/span>.info(<span class=\"hljs-string\">\"Circuito CERRADO: normal\"<\/span>));\nbreaker.on(<span class=\"hljs-string\">\"fallback\"<\/span>, (data) =&gt; <span class=\"hljs-built_in\">console<\/span>.info(<span class=\"hljs-string\">\"fallback invoked\"<\/span>, data));\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">getProfile<\/span>(<span class=\"hljs-params\"><\/span>) <\/span>{\n  <span class=\"hljs-keyword\">try<\/span> {\n    <span class=\"hljs-comment\">\/\/ breaker.fire acepta argumentos que se pasar\u00e1n a la funci\u00f3n envuelta<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">await<\/span> breaker.fire(<span class=\"hljs-string\">\"\/api\/profile\"<\/span>);\n  } <span class=\"hljs-keyword\">catch<\/span> (err) {\n    <span class=\"hljs-comment\">\/\/ Degradaci\u00f3n: devolver datos m\u00ednimos o cache local<\/span>\n    <span class=\"hljs-built_in\">console<\/span>.error(<span class=\"hljs-string\">\"Fallo al obtener profile:\"<\/span>, err.message || err);\n    <span class=\"hljs-keyword\">return<\/span> { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Offline\"<\/span>, <span class=\"hljs-attr\">features<\/span>: &#91;] };\n  }\n}\n\n<span class=\"hljs-comment\">\/\/ Ejemplo de uso<\/span>\n<span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-built_in\">require<\/span>.main === <span class=\"hljs-built_in\">module<\/span>) {\n  (<span class=\"hljs-keyword\">async<\/span> () =&gt; {\n    <span class=\"hljs-keyword\">const<\/span> p = <span class=\"hljs-keyword\">await<\/span> getProfile();\n    <span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Profile:\"<\/span>, p);\n    process.exit(<span class=\"hljs-number\">0<\/span>);\n  })();\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-c-net-polly-con-jitter-reintentos-y-circuit-breaker-program-cs\"><strong><em>C# (.NET)\u200a\u2014\u200aPolly con jitter, reintentos y circuit breaker (Program.cs)<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Polly;\nusing Polly.CircuitBreaker;\nusing Polly.Extensions.Http;\nusing Polly.Contrib.WaitAndRetry;\nusing Microsoft.Extensions.Logging;\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Program<\/span>\n<\/span>{\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">async<\/span> Task&lt;int&gt; Main(string&#91;] args)\n    {\n        <span class=\"hljs-keyword\">var<\/span> loggerFactory = LoggerFactory.Create(<span class=\"hljs-function\"><span class=\"hljs-params\">b<\/span> =&gt;<\/span> b.AddConsole());\n        <span class=\"hljs-keyword\">var<\/span> logger = loggerFactory.CreateLogger(<span class=\"hljs-string\">\"resilience\"<\/span>);\n\n        using <span class=\"hljs-keyword\">var<\/span> http = <span class=\"hljs-keyword\">new<\/span> HttpClient {\n            BaseAddress = <span class=\"hljs-keyword\">new<\/span> Uri(<span class=\"hljs-string\">\"https:\/\/edge-contoso.azurefd.net\"<\/span>),\n            Timeout = TimeSpan.FromSeconds(<span class=\"hljs-number\">3<\/span>)\n        };\n\n        <span class=\"hljs-comment\">\/\/ Backoff con jitter (Polly.Contrib.WaitAndRetry)<\/span>\n        <span class=\"hljs-keyword\">var<\/span> jitter = Backoff.DecorrelatedJitterBackoffV2(TimeSpan.FromMilliseconds(<span class=\"hljs-number\">200<\/span>), <span class=\"hljs-attr\">retryCount<\/span>: <span class=\"hljs-number\">5<\/span>);\n\n        <span class=\"hljs-keyword\">var<\/span> retryPolicy = HttpPolicyExtensions\n            .HandleTransientHttpError() <span class=\"hljs-comment\">\/\/ 5xx, 408, HttpRequestException<\/span>\n            .OrResult(<span class=\"hljs-function\"><span class=\"hljs-params\">msg<\/span> =&gt;<\/span> (int)msg.StatusCode &gt;= <span class=\"hljs-number\">500<\/span>)\n            .WaitAndRetryAsync(\n                jitter,\n                <span class=\"hljs-attr\">onRetry<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">outcome, timespan, retryAttempt, context<\/span>) =&gt;<\/span>\n                {\n                    logger.LogWarning(<span class=\"hljs-string\">\"Retry {attempt} after {delay} due to {reason}\"<\/span>, retryAttempt, timespan, outcome.Exception?.Message ?? outcome.Result?.StatusCode.ToString());\n                }\n            );\n\n        <span class=\"hljs-keyword\">var<\/span> breakerPolicy = Policy\n            .Handle&lt;HttpRequestException&gt;()\n            .OrResult&lt;HttpResponseMessage&gt;(<span class=\"hljs-function\"><span class=\"hljs-params\">r<\/span> =&gt;<\/span> (int)r.StatusCode &gt;= <span class=\"hljs-number\">500<\/span>)\n            .CircuitBreakerAsync(\n                exceptionsAllowedBeforeBreaking: <span class=\"hljs-number\">5<\/span>,\n                <span class=\"hljs-attr\">durationOfBreak<\/span>: TimeSpan.FromSeconds(<span class=\"hljs-number\">10<\/span>),\n                <span class=\"hljs-attr\">onBreak<\/span>: <span class=\"hljs-function\">(<span class=\"hljs-params\">outcome, timespan<\/span>) =&gt;<\/span>\n                {\n                    logger.LogError(<span class=\"hljs-string\">\"Circuit broken for {duration} because {reason}\"<\/span>, timespan, outcome.Exception?.Message ?? outcome.Result?.StatusCode.ToString());\n                },\n                <span class=\"hljs-attr\">onReset<\/span>: <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> logger.LogInformation(<span class=\"hljs-string\">\"Circuit reset.\"<\/span>),\n                <span class=\"hljs-attr\">onHalfOpen<\/span>: <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> logger.LogInformation(<span class=\"hljs-string\">\"Circuit half-open: testing.\"<\/span>)\n            );\n\n        <span class=\"hljs-keyword\">var<\/span> resilientPolicy = Policy.WrapAsync(retryPolicy, breakerPolicy);\n\n        <span class=\"hljs-keyword\">try<\/span>\n        {\n            <span class=\"hljs-keyword\">var<\/span> res = <span class=\"hljs-keyword\">await<\/span> resilientPolicy.ExecuteAsync(<span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> http.GetAsync(<span class=\"hljs-string\">\"\/api\/orders\"<\/span>));\n            <span class=\"hljs-keyword\">if<\/span> (!res.IsSuccessStatusCode)\n            {\n                logger.LogWarning(<span class=\"hljs-string\">\"Request returned non-success: {code}\"<\/span>, res.StatusCode);\n                Console.WriteLine(<span class=\"hljs-string\">\"offline\"<\/span>);\n            }\n            <span class=\"hljs-keyword\">else<\/span>\n            {\n                <span class=\"hljs-keyword\">var<\/span> content = <span class=\"hljs-keyword\">await<\/span> res.Content.ReadAsStringAsync();\n                Console.WriteLine(content);\n            }\n        }\n        <span class=\"hljs-keyword\">catch<\/span> (BrokenCircuitException)\n        {\n            logger.LogWarning(<span class=\"hljs-string\">\"Circuit is open - returning degraded response\"<\/span>);\n            Console.WriteLine(<span class=\"hljs-string\">\"offline\"<\/span>);\n        }\n        <span class=\"hljs-keyword\">catch<\/span> (Exception ex)\n        {\n            logger.LogError(<span class=\"hljs-string\">\"Unexpected error: {err}\"<\/span>, ex.Message);\n            Console.WriteLine(<span class=\"hljs-string\">\"offline\"<\/span>);\n        }\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a class=\"alt=&quot;interrupci\u00f3n masiva en Azure mi\u00e9rcoles negro&quot;\" href=\"https:\/\/aistudio.google.com\/1eee15ff-c67a-4521-b2ac-d5901ecf9925\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*0xkvXnVkYdIb4ayNfHd_uQ.png\" alt=\"\"\/><\/a><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"h-cdn-cache-y-stale-while-revalidate-para-absorber-picos-cabeceras-recomendadas-en-respuestas-del-backend\"><strong><em>CDN cache y \u201cstale-while-revalidate\u201d para absorber picos: <\/em><\/strong>cabeceras recomendadas en respuestas del backend<\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\">HTTP\/1.1 <span class=\"hljs-number\">200<\/span> OK\n<span class=\"hljs-attribute\">Cache-Control<\/span>: public, max-age=300, stale-while-revalidate=60, stale-if-error=300\n<span class=\"hljs-attribute\">ETag<\/span>: \"v1-orders-71f9\"<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong><em>Explicaci\u00f3n: <\/em>Label &#8211;<\/strong> stale-while-revalidate: sirve contenido \u201cviejo\u201d mientras se recalienta el cach\u00e9. stale-if-error: si el backend falla, Front Door devuelve la versi\u00f3n cacheada.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-waf-azure-application-gateway-front-door-politica-json-de-ejemplo-rate-limit-owasp\"><strong><em>WAF (Azure Application Gateway \/ Front Door)\u200a\u2014\u200apol\u00edtica JSON de ejemplo (rate limit + OWASP)<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"policySettings\"<\/span>: { <span class=\"hljs-attr\">\"enabledState\"<\/span>: <span class=\"hljs-string\">\"Enabled\"<\/span>, <span class=\"hljs-attr\">\"mode\"<\/span>: <span class=\"hljs-string\">\"Prevention\"<\/span> },\n  <span class=\"hljs-attr\">\"customRules\"<\/span>: &#91;\n    {\n      <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"limit-rapid-requests\"<\/span>,\n      <span class=\"hljs-attr\">\"priority\"<\/span>: <span class=\"hljs-number\">10<\/span>,\n      <span class=\"hljs-attr\">\"ruleType\"<\/span>: <span class=\"hljs-string\">\"RateLimitRule\"<\/span>,\n      <span class=\"hljs-attr\">\"rateLimitDurationInMinutes\"<\/span>: <span class=\"hljs-number\">1<\/span>,\n      <span class=\"hljs-attr\">\"rateLimitThreshold\"<\/span>: <span class=\"hljs-number\">300<\/span>,\n      <span class=\"hljs-attr\">\"matchConditions\"<\/span>: &#91;\n        {\n          <span class=\"hljs-attr\">\"matchVariable\"<\/span>: <span class=\"hljs-string\">\"RemoteAddr\"<\/span>,\n          <span class=\"hljs-attr\">\"operator\"<\/span>: <span class=\"hljs-string\">\"IPMatch\"<\/span>,\n          <span class=\"hljs-attr\">\"matchValues\"<\/span>: &#91;<span class=\"hljs-string\">\"0.0.0.0\/0\"<\/span>]\n        }\n      ],\n      <span class=\"hljs-attr\">\"action\"<\/span>: <span class=\"hljs-string\">\"Block\"<\/span>,\n      <span class=\"hljs-attr\">\"enabledState\"<\/span>: <span class=\"hljs-string\">\"Enabled\"<\/span>\n    }\n  ],\n  <span class=\"hljs-attr\">\"managedRules\"<\/span>: {\n    <span class=\"hljs-attr\">\"managedRuleSets\"<\/span>: &#91;\n      { <span class=\"hljs-attr\">\"ruleSetType\"<\/span>: <span class=\"hljs-string\">\"OWASP\"<\/span>, <span class=\"hljs-attr\">\"ruleSetVersion\"<\/span>: <span class=\"hljs-string\">\"3.2\"<\/span> }\n    ]\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong><em>Nota: <\/em><\/strong>para producci\u00f3n, en lugar de IP <code>0.0.0.0\/0<\/code> suele emplearse combinaci\u00f3n con encabezados o fingerprinting; aqu\u00ed se usa<code>0.0.0.0\/0<\/code> solo como ejemplo global (bloquea picos masivos).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-azure-monitor-metric-alert-arm-json-simplificado-con-ventana-amp-evaluacion\"><strong><em>Azure Monitor\u200a\u2014\u200aMetric Alert (ARM JSON simplificado con ventana &amp; evaluaci\u00f3n)<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"type\"<\/span>: <span class=\"hljs-string\">\"Microsoft.Insights\/metricAlerts\"<\/span>,\n  <span class=\"hljs-attr\">\"apiVersion\"<\/span>: <span class=\"hljs-string\">\"2018-03-01\"<\/span>,\n  <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"fd-5xx-spike\"<\/span>,\n  <span class=\"hljs-attr\">\"location\"<\/span>: <span class=\"hljs-string\">\"global\"<\/span>,\n  <span class=\"hljs-attr\">\"properties\"<\/span>: {\n    <span class=\"hljs-attr\">\"description\"<\/span>: <span class=\"hljs-string\">\"Alerta ante incremento de 5xx en Front Door\"<\/span>,\n    <span class=\"hljs-attr\">\"severity\"<\/span>: <span class=\"hljs-number\">2<\/span>,\n    <span class=\"hljs-attr\">\"enabled\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n    <span class=\"hljs-attr\">\"scopes\"<\/span>: &#91;\n      <span class=\"hljs-string\">\"\/subscriptions\/&lt;SUB&gt;\/resourceGroups\/rg-frontdoor\/providers\/Microsoft.Cdn\/profiles\/fd-global-profile\"<\/span>\n    ],\n    <span class=\"hljs-attr\">\"evaluationFrequency\"<\/span>: <span class=\"hljs-string\">\"PT1M\"<\/span>,\n    <span class=\"hljs-attr\">\"windowSize\"<\/span>: <span class=\"hljs-string\">\"PT5M\"<\/span>,\n    <span class=\"hljs-attr\">\"criteria\"<\/span>: {\n      <span class=\"hljs-attr\">\"odata.type\"<\/span>: <span class=\"hljs-string\">\"Microsoft.Azure.Monitor.MultipleResourceMultipleMetricCriteria\"<\/span>,\n      <span class=\"hljs-attr\">\"allOf\"<\/span>: &#91;\n        {\n          <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"5xx-rate\"<\/span>,\n          <span class=\"hljs-attr\">\"metricName\"<\/span>: <span class=\"hljs-string\">\"TotalRequests\"<\/span>,\n          <span class=\"hljs-attr\">\"metricNamespace\"<\/span>: <span class=\"hljs-string\">\"\"<\/span>,\n          <span class=\"hljs-attr\">\"operator\"<\/span>: <span class=\"hljs-string\">\"GreaterThan\"<\/span>,\n          <span class=\"hljs-attr\">\"timeAggregation\"<\/span>: <span class=\"hljs-string\">\"Count\"<\/span>,\n          <span class=\"hljs-attr\">\"threshold\"<\/span>: <span class=\"hljs-number\">1000<\/span>,\n          <span class=\"hljs-attr\">\"dimensions\"<\/span>: &#91;\n            {\n              <span class=\"hljs-attr\">\"name\"<\/span>: <span class=\"hljs-string\">\"ResponseCodeGroup\"<\/span>,\n              <span class=\"hljs-attr\">\"operator\"<\/span>: <span class=\"hljs-string\">\"Include\"<\/span>,\n              <span class=\"hljs-attr\">\"values\"<\/span>: &#91;<span class=\"hljs-string\">\"5xx\"<\/span>]\n            }\n          ]\n        }\n      ]\n    },\n    <span class=\"hljs-attr\">\"autoMitigate\"<\/span>: <span class=\"hljs-literal\">true<\/span>,\n    <span class=\"hljs-attr\">\"actions\"<\/span>: &#91;\n      {\n        <span class=\"hljs-attr\">\"actionGroupId\"<\/span>: <span class=\"hljs-string\">\"\/subscriptions\/&lt;SUB&gt;\/resourceGroups\/rg-monitor\/providers\/microsoft.insights\/actiongroups\/pagerduty\"<\/span>\n      }\n    ]\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ajustar <code>threshold<\/code> y <code>windowSize<\/code> a la realidad de tu tr\u00e1fico para evitar <em>false positives<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-nginx-fallback-a-pagina-estatica-si-upstream-falla\"><strong><em>NGINX\u200a\u2014\u200afallback a p\u00e1gina est\u00e1tica si upstream falla<\/em><\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># \/etc\/nginx\/conf.d\/edge-origin.conf<\/span>\nupstream app_pool {\n  server api-eastus.contoso.com:<span class=\"hljs-number\">443<\/span> max_fails=<span class=\"hljs-number\">1<\/span> fail_timeout=<span class=\"hljs-number\">5<\/span>s;\n  server api-weu.contoso.com:<span class=\"hljs-number\">443<\/span> backup;\n}\n\nserver {\n  listen <span class=\"hljs-number\">443<\/span> ssl;\n  server_name edge-origin.contoso.com;\n\n  ssl_certificate     \/etc\/ssl\/certs\/edge-origin.crt;\n  ssl_certificate_key \/etc\/ssl\/<span class=\"hljs-keyword\">private<\/span>\/edge-origin.key;\n\n  location \/ {\n    proxy_pass https:<span class=\"hljs-comment\">\/\/app_pool;<\/span>\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-<span class=\"hljs-keyword\">For<\/span> $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n\n    proxy_next_upstream error timeout http_502 http_503 http_504;\n    proxy_connect_timeout <span class=\"hljs-number\">3<\/span>s;\n    proxy_read_timeout <span class=\"hljs-number\">10<\/span>s;\n  }\n\n  error_page <span class=\"hljs-number\">502<\/span> <span class=\"hljs-number\">503<\/span> <span class=\"hljs-number\">504<\/span> \/fallback.html;\n  location = \/fallback.html {\n    root \/<span class=\"hljs-keyword\">var<\/span>\/www\/<span class=\"hljs-keyword\">static<\/span>;\n    add_header Cache-Control <span class=\"hljs-string\">\"public, max-age=300, stale-if-error=300\"<\/span>;\n    internal;\n  }\n\n  <span class=\"hljs-comment\"># opcional: servir healthz local<\/span>\n  location = \/healthz {\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">200<\/span> <span class=\"hljs-string\">\"OK\"<\/span>;\n    add_header Content-Type text\/plain;\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Estos snippets son <strong>operativos<\/strong> y reflejan las mejores pr\u00e1cticas: tolerancia a fallos en cliente y servidor, caching estrat\u00e9gico, pol\u00edticas WAF y alertas operativas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"h-resiliencia-en-la-era-nbsp-cloud\"><strong>Resiliencia en la era&nbsp;cloud<\/strong><\/h2>\n\n\n\n<p>Este \u201cmi\u00e9rcoles negro\u201d ha impulsado una reflexi\u00f3n cr\u00edtica en la industria tecnol\u00f3gica:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Diversificaci\u00f3n es Clave:<\/strong> La dependencia en un solo proveedor de nube, incluso uno tan grande como Microsoft, introduce un riesgo sist\u00e9mico. Se refuerza la necesidad de estrategias <strong>multi-nube<\/strong> o de <strong>redundancia entre regiones<\/strong> para servicios cr\u00edticos.<\/li>\n\n\n\n<li><strong>La Importancia del Edge:<\/strong> El fallo se origin\u00f3 en la capa m\u00e1s externa, el <strong>CDN global (Front Door)<\/strong>. Esto subraya que la cadena de suministro de la infraestructura de internet es tan fuerte como su eslab\u00f3n m\u00e1s d\u00e9bil.<\/li>\n\n\n\n<li><strong>Pruebas de Recuperaci\u00f3n ante Desastres:<\/strong> Las organizaciones deben realizar pruebas de penetraci\u00f3n y recuperaci\u00f3n de desastres robustas, simulando no solo fallos de servidores, sino fallos en los <strong>servicios de gesti\u00f3n de tr\u00e1fico globales<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"h-el-camino-hacia-la-recuperacion\"><strong>El camino hacia la recuperaci\u00f3n<\/strong><\/h2>\n\n\n\n<p>Microsoft moviliz\u00f3 r\u00e1pidamente a sus equipos, priorizando el reinicio de las instancias de Kubernetes afectadas y la activaci\u00f3n de mecanismos de <em>failover<\/em>. Si bien la disponibilidad fue <strong>restaurada en un 98%<\/strong> en pocas horas, la latencia residual persisti\u00f3.<\/p>\n\n\n\n<p>El incidente de Azure Front Door es un caso de estudio crucial. Nos recuerda que, aunque la nube ofrece una escalabilidad y confiabilidad sin igual, la complejidad inherente a estos sistemas gigantescos siempre contendr\u00e1 el riesgo de un <strong>fallo \u00fanico<\/strong> con un <strong>impacto global<\/strong>. Aunque el servicio fue restablecido progresivamente, el incidente dej\u00f3 en evidencia la <strong>dependencia global de la nube<\/strong> y la fragilidad de un ecosistema donde un solo punto de falla puede afectar a millones.<\/p>\n\n\n\n<p>El panorama digital global se ha visto sacudido por dos incidentes monumentales: la&nbsp;<strong>falla global de Microsoft Azure<\/strong>&nbsp;y el colapso masivo de&nbsp;<strong>Amazon Web Services (<a href=\"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/aws-la-fragilidad-del-internet-en-la-nube\/\">AWS<\/a>)<\/strong>. Estos eventos, que paralizaron una parte significativa de internet, no son meros fallos t\u00e9cnicos; son el&nbsp;<strong>\u201cMi\u00e9rcoles Negro\u201d<\/strong>&nbsp;y la se\u00f1al de alarma que expone la fragilidad de nuestra hiperconectada dependencia en la infraestructura de la nube.<\/p>\n\n\n\n<p>La nube no falla a menudo, pero cuando lo hace, nos recuerda que la <a href=\"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/cloud-es\/ingenieria-de-la-resiliencia-y-del-caos\/\">resiliencia<\/a> no se dise\u00f1a en tiempos de crisis, sino en la calma. La ingenier\u00eda moderna no es solo c\u00f3digo: es prever la ca\u00edda y asegurar la recuperaci\u00f3n.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a class=\"alt=&quot;Falla en Azure, un mi\u00e9rcoles negro&quot;\" href=\"https:\/\/aistudio.google.com\/d2642278-d5ac-4b54-9ac2-dbf70b6cc3ae\" target=\"_blank\" rel=\" noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/800\/1*PG28KxGjVA_czzNokQs6GQ.png\" alt=\"\"\/><\/a><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>El pasado mi\u00e9rcoles 29 de octubre de 2025, el mundo digital experiment\u00f3 un par\u00f3n dram\u00e1tico que afect\u00f3 a millones, una falla global masiva en la plataforma de servicios en la nube de Microsoft Azure. Lo que comenz\u00f3 como un problema de latencia pronto escal\u00f3 a una interrupci\u00f3n a gran escala, paralizando servicios esenciales y reavivando&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/\">Read more<\/a><\/p>\n","protected":false},"author":313,"featured_media":34421,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10628],"tags":[10747],"collections":[13012],"class_list":{"0":"post-34383","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-computacion-en-la-nube","8":"tag-desarrollo-web","9":"collections-top-of-the-week-es","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Falla global de Microsoft Azure: el mi\u00e9rcoles negro digital<\/title>\n<meta name=\"description\" content=\"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.\" \/>\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.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red\" \/>\n<meta property=\"og:description\" content=\"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-07T12:54:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-07T13:22:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Orli Dun\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Orli Dun\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/\"},\"author\":{\"name\":\"Orli Dun\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/37ca255c359cc54110ac89eb4fa7db42\"},\"headline\":\"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red\",\"datePublished\":\"2025-11-07T12:54:26+00:00\",\"dateModified\":\"2025-11-07T13:22:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/\"},\"wordCount\":1108,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/ChatGPT-Image-7-nov-2025-14_05_30.png\",\"keywords\":[\"Desarrollo web\"],\"articleSection\":[\"Computacion en la nube\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/\",\"name\":\"Falla global de Microsoft Azure: el mi\u00e9rcoles negro digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/ChatGPT-Image-7-nov-2025-14_05_30.png\",\"datePublished\":\"2025-11-07T12:54:26+00:00\",\"dateModified\":\"2025-11-07T13:22:47+00:00\",\"description\":\"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/ChatGPT-Image-7-nov-2025-14_05_30.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/ChatGPT-Image-7-nov-2025-14_05_30.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Computacion en la nube\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/devops-es\\\/computacion-en-la-nube\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/37ca255c359cc54110ac89eb4fa7db42\",\"name\":\"Orli Dun\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/alura-profile-100x100.png\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/alura-profile-100x100.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/alura-profile-100x100.png\",\"caption\":\"Orli Dun\"},\"description\":\"From finance to the digital revolution! Systems Engineer | Cloud &amp; AI | Tech Creator | Community Manager at Alura Latam #foramillionfriends\",\"sameAs\":[\"https:\\\/\\\/orlidun.vercel.app\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/orlibetdungonzalez\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/orli-dun\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Falla global de Microsoft Azure: el mi\u00e9rcoles negro digital","description":"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.","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.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/","og_locale":"en_US","og_type":"article","og_title":"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red","og_description":"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-11-07T12:54:26+00:00","article_modified_time":"2025-11-07T13:22:47+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","type":"image\/png"}],"author":"Orli Dun","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Orli Dun","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/"},"author":{"name":"Orli Dun","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/37ca255c359cc54110ac89eb4fa7db42"},"headline":"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red","datePublished":"2025-11-07T12:54:26+00:00","dateModified":"2025-11-07T13:22:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/"},"wordCount":1108,"commentCount":0,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","keywords":["Desarrollo web"],"articleSection":["Computacion en la nube"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/","name":"Falla global de Microsoft Azure: el mi\u00e9rcoles negro digital","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","datePublished":"2025-11-07T12:54:26+00:00","dateModified":"2025-11-07T13:22:47+00:00","description":"La falla global de Microsoft Azure de octubre 2025 paraliz\u00f3 internet. Conoce qu\u00e9 ocurri\u00f3, los servicios afectados y las lecciones aprendidas.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/microsoft-azure-el-miercoles-negro-que-detuvo-la-red\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/"},{"@type":"ListItem","position":3,"name":"Computacion en la nube","item":"https:\/\/www.codemotion.com\/magazine\/es\/devops-es\/computacion-en-la-nube\/"},{"@type":"ListItem","position":4,"name":"Microsoft Azure: el mi\u00e9rcoles negro que detuvo la\u00a0red"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/37ca255c359cc54110ac89eb4fa7db42","name":"Orli Dun","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/04\/alura-profile-100x100.png","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/04\/alura-profile-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/04\/alura-profile-100x100.png","caption":"Orli Dun"},"description":"From finance to the digital revolution! Systems Engineer | Cloud &amp; AI | Tech Creator | Community Manager at Alura Latam #foramillionfriends","sameAs":["https:\/\/orlidun.vercel.app\/","https:\/\/www.linkedin.com\/in\/orlibetdungonzalez"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/orli-dun\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png","author_info":{"display_name":"Orli Dun","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/orli-dun\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",1536,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",150,100,false],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30-300x200.png",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",768,512,false],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",1024,683,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",1536,1024,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",1536,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",180,120,false],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",756,504,false],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",338,225,false],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",600,400,false],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/11\/ChatGPT-Image-7-nov-2025-14_05_30.png",600,400,false]},"uagb_author_info":{"display_name":"Orli Dun","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/orli-dun\/"},"uagb_comment_info":0,"uagb_excerpt":"El pasado mi\u00e9rcoles 29 de octubre de 2025, el mundo digital experiment\u00f3 un par\u00f3n dram\u00e1tico que afect\u00f3 a millones, una falla global masiva en la plataforma de servicios en la nube de Microsoft Azure. Lo que comenz\u00f3 como un problema de latencia pronto escal\u00f3 a una interrupci\u00f3n a gran escala, paralizando servicios esenciales y reavivando&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/313"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=34383"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34383\/revisions"}],"predecessor-version":[{"id":34422,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34383\/revisions\/34422"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/34421"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=34383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=34383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=34383"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=34383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}