
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/es-es/" rel="self" type="application/rss+xml"/>
        <language>es-es</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Thu, 09 Apr 2026 10:08:08 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Novedad: funciones avanzadas de auditoría de sesiones en Cloudflare One]]></title>
            <link>https://blog.cloudflare.com/es-es/introducing-advanced-session-audit-capabilities-in-cloudflare-one/</link>
            <pubDate>Thu, 16 Nov 2023 18:49:23 GMT</pubDate>
            <description><![CDATA[ : Ahora los administradores pueden auditar todas las sesiones de usuario activas y los datos asociados utilizados por sus políticas de Cloudflare One. Esto permite lo mejor de ambos mundos ]]></description>
            <content:encoded><![CDATA[ <p>Zero Trust se fundamenta en la definición de controles granulares y políticas de autorización por aplicación, usuario y dispositivo. Para ello, es imprescindible contar con un sistema con un nivel de granularidad suficiente, a fin de cumplir con los requisitos normativos y de seguridad. Sin embargo, un número tan elevado de controles supone un posible inconveniente: para resolver los problemas de los usuarios, un administrador debe tener en cuenta una compleja combinación de variables de las aplicaciones, la identidad de los usuarios y la información de los dispositivos, y todo esto puede requerir un análisis minucioso de los registros.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4pp2wSikAqdX5rt2i33Ngg/6fcd4139b1c3c3f25146342db2ff3f22/image5.png" />
            
            </figure><p>Creemos que hay una forma mejor de hacerlo. Por este motivo, a partir de hoy, los administradores pueden auditar fácilmente todas las sesiones de usuario activas y los datos asociados utilizados por sus políticas de Cloudflare One. Esto permite lo mejor de ambos mundos: controles muy granulares al mismo tiempo que se mantiene una capacidad mejorada de resolución y diagnóstico de problemas de las implementaciones <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/">Zero Trust</a> en un único y sencillo panel de control. Ahora los administradores pueden acceder a la información que anteriormente se encontraba en el navegador de un usuario o que cambiaba dinámicamente, sin necesidad de molestar a un usuario final o de analizar los registros.</p>
    <div>
      <h3><b>Una introducción rápida a la autenticación y la autorización de aplicaciones</b></h3>
      <a href="#una-introduccion-rapida-a-la-autenticacion-y-la-autorizacion-de-aplicaciones">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/vFhYqgPu1WXS7wrcp77u6/3169e065ed0e6780e67a218a5ae607c3/image4.png" />
            
            </figure><p>La <i>autenticación</i> y la <i>autorización</i> son los dos componentes que evalúa una política Zero Trust antes de permitir que un usuario acceda a un recurso.</p><p>La <b>autenticación</b> es el proceso de verificar la identidad de un usuario, un dispositivo o un sistema. Algunos de los métodos más comunes de <a href="https://www.cloudflare.com/learning/access-management/what-is-authentication/">autenticación</a> son la especificación de nombres de usuario y contraseñas, la presentación de un certificado digital o incluso factores biométricos como una huella dactilar o un reconocimiento facial. La <a href="https://www.cloudflare.com/learning/access-management/what-is-multi-factor-authentication/">autenticación multifactor (MFA)</a> requiere dos o más métodos independientes de autenticación para una mayor seguridad, por ejemplo, una clave de hardware junto con una contraseña.</p><p>La <b>autorización</b> es el proceso de otorgar o denegar el acceso a recursos o permisos específicos una vez que se ha autenticado con éxito una entidad. Define qué puede y no puede hacer la entidad autenticada en el sistema.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/38l3l06Dy248HUhhQ9R3WC/57c17a8279ca8cec195a4c6f67ff9686/image6.png" />
            
            </figure>
    <div>
      <h3><b>Mecanismos de autenticación/autorización de aplicaciones</b></h3>
      <a href="#mecanismos-de-autenticacion-autorizacion-de-aplicaciones">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3jvZdrdbJ1ucOx5niglvaR/ecfcf31cc7e1c9831b8ba15d0ef76e75/image1-3.png" />
            
            </figure><p>Las aplicaciones web, en las que nos centraremos, suelen utilizar cookies HTTP para gestionar la autenticación y la autorización.</p><p><b>Autenticación</b>:</p><ol><li><p><b>Inicio de sesión:</b> cuando un usuario inicia sesión en una aplicación web especificando su nombre de usuario y contraseña, la aplicación verifica estas credenciales respecto a su base de datos o en un <a href="https://www.cloudflare.com/learning/access-management/what-is-an-identity-provider/">proveedor de identidad (IdP)</a>. También es posible aplicar otros métodos de autenticación para un mecanismo de autenticación de varios factores. Si estos coinciden, el servidor o el servicio de seguridad externo (p. ej., Cloudflare Access) considera que el usuario se ha autenticado.</p></li><li><p><b>Creación de cookies/tokens:</b> el servidor crea a continuación una sesión para el usuario como una cookie o un token web JSON. La cookie es válida durante cierto tiempo, hasta que sea necesario que el usuario se vuelva a autenticar.</p></li><li><p><b>Envío y almacenamiento de cookies:</b> el servidor envía una respuesta al navegador del usuario, y esta incluye en la cookie el ID de sesión y otra información de identificación sobre el usuario. A continuación, el navegador almacena esta cookie, que se utiliza para reconocer el usuario en sus solicitudes posteriores.</p></li></ol><p><b>Autorización:</b></p><ol><li><p><b>Solicitudes posteriores:</b> para todas las solicitudes posteriores enviadas a la aplicación web, el navegador del usuario incluye automáticamente la cookie (con el ID de sesión y otra información de identificación) en la solicitud.</p></li><li><p><b>Verificación del lado del servidor:</b> el servidor recibe los datos del usuario de la cookie y comprueba si la sesión es válida. Si es válida, el servidor recupera también los detalles del usuario y sus permisos de acceso asociados con ese ID de sesión.</p></li><li><p><b>Decisión de autorización:</b> en función de los permisos de acceso del usuario, el servidor decide si se autoriza al usuario a realizar la operación solicitada o a acceder al recurso solicitado.</p></li></ol><p>De esta forma, el usuario se mantiene autenticado (y su autorización se puede comprobar) para todas las solicitudes posteriores a su inicio de sesión, hasta que esta caduque o hasta que el usuario cierre la sesión.</p><p>En las aplicaciones web modernas, este estado de la sesión se suele almacenar como un token web JSON (JWT).</p>
    <div>
      <h3><b>Depuración de la autenticación basada en JWT</b></h3>
      <a href="#depuracion-de-la-autenticacion-basada-en-jwt">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5xt08CvRjE8ONSrRf3HK1x/7eae0b1f82f3cd0f1858834d660e53ae/image8.png" />
            
            </figure><p>Los JWT se utilizan en muchas aplicaciones web modernas, y en soluciones de <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/">acceso a la red Zero Trust (ZTNA)</a> como Cloudflare Access, para la autenticación y la autorización. Un JWT incluye una carga que codifica la información acerca del usuario y posiblemente otros datos, e incluye la firma del servidor para evitar su manipulación. Los JWT se utilizan a menudo sin estado, lo que significa que el servidor no mantiene una copia de cada JWT (simplemente los verifica y descodifica cuando llegan con las solicitudes). Esta condición "sin estado" de los JWT significa que no tienes que depender de un sistema central para gestionar las sesiones de los usuarios, lo que evita que surjan problemas de escalabilidad cuando aumente el número de usuarios que accedan a un sistema.</p><p>No obstante, esta condición "sin estado" de los JWT hace que la depuración de la autenticación basada en JWT resulte complicada si no se dispone del JWT específico de un usuario. Estas son las razones:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ffaX3vfbgBu5rBy0H1gmR/cfb1f19ef8e6b6a7077997e23cd44e9e/image2-2.png" />
            
            </figure><p><b>1. Especificidad de los tokens:</b> cada JWT es específico de un usuario y de una sesión. Contiene información (afirmaciones) sobre el usuario, la autoridad emisora, la fecha y hora de emisión del token, la fecha de caducidad y posiblemente otros datos. Por lo tanto, para depurar un problema, a menudo necesitas el JWT exacto que causa el problema.</p><p><b>2. No hay registros del lado del servidor:</b> puesto que los JWT son sin estado, el servidor no almacena las sesiones por defecto. No puede buscar tokens anteriores o su estado asociado, a menos que se haya diseñado específicamente para registrarlos. Esto no suele ser el caso, debido a consideraciones acerca de la privacidad y la minimización de los datos.</p><p><b>3. Problemas temporales:</b> los problemas vinculados con los JWT pueden ser temporales (relacionados con el momento específico en que se ha utilizado el token). Por ejemplo, si un token había caducado cuando un usuario intentaba utilizarlo, necesitarías ese token específico para depurar el problema.</p><p><b>4. Privacidad y seguridad:</b> los JWT pueden contener información confidencial, por lo que se deben manejar cuidadosamente. Obtener un JWT de un usuario podría exponer su información personal o sus credenciales de seguridad a quienquiera que esté depurando el problema. Asimismo, si un usuario envía su JWT mediante un canal no seguro a un desarrollador o a un servicio de asistencia informática, este podría ser interceptado (Cloudflare lanzó recientemente una solución gratuita, <a href="/introducing-har-sanitizer-secure-har-sharing/">HAR Sanitizer</a>, para ayudar a mitigar este problema).</p><p>Estos factores dificultan la resolución de problemas vinculados con la autenticación basada en JWT si no se dispone del token específico.</p>
    <div>
      <h3><b>Una forma mejor de depurar los problemas de identidad</b></h3>
      <a href="#una-forma-mejor-de-depurar-los-problemas-de-identidad">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/31Aj21p1ndlk45ONfHg7n5/93425af409d59da01c5792f0a8b6b7d8/image3.png" />
            
            </figure><p>Nos propusimos desarrollar una forma mejor de depurar los problemas relacionados con la identidad de un usuario en Cloudflare Zero Trust sin necesidad de compartir los JWT o los archivos HAR. Ahora los administradores pueden ver la identidad del registro de un usuario (que se utiliza para las políticas de Gateway) y todas las sesiones de Access activas.</p><p>Esta información de la sesión incluye la identidad completa evaluada por Zero Trust, que incluye las afirmaciones del IdP, la información acerca de la postura del dispositivo, el contexto de red y más. Gracias a Cloudflare Workers KV, hemos podido desarrollar esta función sin añadir más carga a la lógica de autenticación de Access. Cuando un usuario se autentica con Access, su identidad asociada se guarda de inmediato en un par clave-valor en Workers KV. Todo esto tiene lugar en el contexto del evento de autenticación del usuario, lo que significa que el impacto en la latencia o la dependencia de un servicio externo son mínimos.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3a2IX9mPpFTqXHu7LrPNxf/6d15f879803248a4929686cefc79882a/image7.png" />
            
            </figure><p>Esta función está disponible para todos los clientes en todos los planes Zero Trust. Si deseas empezar con Cloudflare Zero Trust, <a href="https://dash.cloudflare.com/sign-up/teams">regístrate hoy mismo para conseguir una cuenta gratuita</a> para hasta 50 usuarios. O bien <a href="https://www.cloudflare.com/products/zero-trust/plans/enterprise/">colabora con los expertos de Cloudflare</a> para comentar las opciones SSE o SASE para tu organización y abordar tus casos Zero Trust paso a paso.</p> ]]></content:encoded>
            <category><![CDATA[SASE]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Noticias de productos]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Cloudflare Workers KV]]></category>
            <guid isPermaLink="false">7tg9mNqV9zSgFQ26BZ9d37</guid>
            <dc:creator>Kenny Johnson</dc:creator>
        </item>
        <item>
            <title><![CDATA[Workers Sites: Implemente su sitio web directamente en nuestra red]]></title>
            <link>https://blog.cloudflare.com/es-es/workers-sites/</link>
            <pubDate>Fri, 27 Sep 2019 13:00:00 GMT</pubDate>
            <description><![CDATA[ El rendimiento en la web siempre ha sido una batalla contra la velocidad de la luz: acceder a un sitio desde Londres que se sirve desde Seattle, WA, significa que cada solicitud de activos tiene que viajar más de once mil kilómetros.  ]]></description>
            <content:encoded><![CDATA[ <p>El rendimiento en la web siempre ha sido una batalla contra la velocidad de la luz: acceder a un sitio desde Londres que se sirve desde Seattle, WA, significa que cada solicitud de activos tiene que viajar más de once mil kilómetros. El primer avance en la batalla por el rendimiento web fue mantener la conexión HTTP/1.1 y los navegadores que abrían múltiples conexiones. El siguiente avance fue la red CDN, que acercaba sus activos estáticos a sus usuarios finales al almacenarlos en caché en los centros de datos más cercanos a ellos. Hoy, con Workers Sites, nos complace anunciar el próximo gran avance: sitios completos distribuidos directamente en el límite de Internet.</p>
    <div>
      <h2><b>Implementación al límite de la red</b></h2>
      <a href="#implementacion-al-limite-de-la-red">
        
      </a>
    </div>
    <p>¿Por qué no es suficiente el almacenamiento de activos en caché? Sí, el almacenamiento en caché mejora el rendimiento, pero una mejora significativa en ese aspecto también trae consigo dolores de cabeza. CDN puede adivinar qué activos debe almacenar en caché, pero solo mediante la suposición. Configurar su sitio para obtener el máximo rendimiento siempre ha sido un proceso propenso a errores que requiere una amplia colección de reglas y encabezados esotéricos. Incluso cuando está todo perfectamente configurado, casi nada se almacena en caché para siempre, y a menudo las preciadas solicitudes siguen teniendo que viajar hasta su origen (donde sea que esté). La invalidación de la memoria caché es, después de todo, uno de los <a href="https://twitter.com/secretgeek/status/7269997868">problemas más difíciles en la ciencia de la computación</a>.</p><p>Esto genera la pregunta: en lugar de mover bytes desde el origen al límite poco a poco de forma descoordinada, ¿por qué no empujar todo el origen al límite?</p>
    <div>
      <h2><b>Workers Sites: Ampliación de la plataforma Workers</b></h2>
      <a href="#workers-sites-ampliacion-de-la-plataforma-workers">
        
      </a>
    </div>
    <p>Hace dos años, para la Semana de Aniversario, anunciamos <a href="https://workers.cloudflare.com/">Cloudflare Workers</a>, una forma para que los desarrolladores escriban y ejecuten JavaScript y WebAssembly en nuestra red en 194 ciudades de todo el mundo. Un año después, lanzamos Workers KV, nuestra tienda distribuida de clave-valor que proporcionó a los desarrolladores la capacidad de almacenar el estado en el límite en esas mismas ciudades.</p><p>Workers Sites aprovecha el poder de Workers y Workers KV al permitir que los desarrolladores carguen sus sitios directamente al límite y más cerca de los usuarios finales. Nacido en el límite, Workers Sites es lo que creemos que debería ser el desarrollo moderno en la web, nativamente seguro, rápido y masivamente escalable. Se invierte menos tiempo en la configuración y se invierte más tiempo en el código y en el contenido en sí.</p>
    <div>
      <h2><b>Cómo funciona</b></h2>
      <a href="#como-funciona">
        
      </a>
    </div>
    <p>Los Workers Sites se implementan con unos pocos comandos de terminal y pueden servir para un sitio generado por cualquier generador de sitios estáticos, como Hugo, Gatsby o Jekyll. Con <a href="https://github.com/cloudflare/wrangler">Wrangler</a> (nuestra CLI), puede subir los activos de su sitio directamente a KV. Cuando llega una solicitud a su sitio Workers, el Cloudflare Worker generado por Wrangler leerá y servirá el activo de KV, con los encabezados apropiados (no es necesario preocuparse por el Content-Type ni por el Cache-Control; de eso nos ocupamos nosotros).</p><p>Los Workers Sites se pueden usar para implementar cualquier sitio estático, como un blog, sitios de marketing o un portafolio.  Si alguna vez decide que su sitio necesita volverse un poco menos estático, su Worker no es más que código; edítelo y extiéndalo hasta que tenga un sitio dinámico funcionando en todo el mundo.</p>
    <div>
      <h2><b>Cómo empezar</b></h2>
      <a href="#como-empezar">
        
      </a>
    </div>
    <p>Para comenzar a trabajar con los Workers Sites, primero debe <a href="https://dash.cloudflare.com/sign-up">registrarse en Workers</a>. Después de seleccionar su subdominio Workers.dev, elija el plan Workers Unlimited (desde $5/mes) para obtener acceso a Workers KV y tener la posibilidad de implementar los Workers Sites.</p><p>Después de registrarse en Workers Unlimited, deberá instalar la CLI para Workers: Wrangler. Wrangler se puede instalar desde NPM o Cargo:</p><p>Una vez que instale Wrangler, estará listo para implementar su sitio estático, con los siguientes pasos:</p>
            <pre><code># NPM Installation
npm i @cloudflare/wrangler -g
# Cargo Installation
cargo install wrangler</code></pre>
            <ol><li><p>Ejecute <code>wrangler init --site</code> en el directorio que contiene los activos creados de su sitio estático</p></li><li><p>Complete el archivo <code>wrangler.toml</code> recién creado con su cuenta y los detalles del proyecto</p></li><li><p>Publique su sitio con <code>wrangler publish</code></p></li></ol><p>También puede consultar nuestra <a href="https://developers.cloudflare.com/workers/sites">documentación de referencia</a> de los Workers Sites o seguir el tutorial completo para <a href="https://developers.cloudflare.com/workers/tutorials/deploy-a-react-app">create-react-app</a> en los documentos.</p><p>Si prefiere empezar con un video, ¡no hay ningún problema! <a href="https://watch.cloudflarestream.com/9943b400b59802b77f83a8a57f39d682">Este video</a> lo guiará a través de la creación e implementación de su primer sitio de Workers:</p>
    <div>
      <h2><b>Increíblemente rápido: de Atlanta a Zagreb</b></h2>
      <a href="#increiblemente-rapido-de-atlanta-a-zagreb">
        
      </a>
    </div>
    
<p>Además de mejorar la experiencia del desarrollador, trabajamos mucho tras bastidores al asegurarnos de que tanto las implementaciones como los sitios en sí sean increíblemente rápidos: nos complace compartir cómo lo hacemos con usted en nuestra <a href="/extending-the-workers-platform">publicación técnica de blog</a>.</p><p>Para probar el rendimiento de los Workers Sites tomamos uno de nuestros sitios personales y lo implementamos para ejecutar algunos puntos de referencia. Esta prueba fue hecha para nuestro sitio, pero sus resultados pueden variar.</p><p>Una forma común de comparar el rendimiento de su sitio es usar <a href="https://developers.google.com/web/tools/lighthouse">Google Lighthouse</a>, que puede hacer directamente desde la pestaña Auditorías de su navegador Chrome.</p><p>Así que pasamos la primera prueba con gran éxito: ¡100! Sin embargo, ejecutar un punto de referencia desde su propia computadora presenta un sesgo: sus usuarios no están necesariamente donde usted está. De hecho, cada vez más sus usuarios están donde usted <i>no</i> está.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1UOVn62zLc7zc549glFiTO/ceeab2a5a7bd731aa28d6020855beee1/image1-7.png" />
            
            </figure><p>Desde dónde se realiza la evaluación comparativa es realmente importante: realizar pruebas desde diferentes lugares producirá resultados diferentes. La evaluación comparativa desde Seattle y el contacto con un servidor en la costa oeste dice muy poco sobre su rendimiento global.</p><p>Decidimos usar una herramienta llamada Catchpoint para ejecutar puntos de referencia desde ciudades de todo el mundo. Para ver cómo nos comparamos, implementamos el sitio en tres plataformas de implementación de sitios estáticos diferentes, incluidos Workers Sites.</p><p>Dado que los proveedores ofrecen regiones de centros de datos en las costas de Estados Unidos o Europa central, es común ver un buen rendimiento en regiones como América del Norte, y en ellas todo funciona perfectamente:</p><p>Pero, ¿qué sucede con sus usuarios del resto del mundo? El rendimiento es aún más crítico en esas regiones: los primeros usuarios no se conectarán a su sitio en una MacBook Pro, cuya conexión es increíblemente rápida. Los Workers Sites le permiten llegar a esas regiones sin ningún esfuerzo adicional de su parte: cada vez que <a href="/scaling-the-cloudflare-global/">nuestro mapa crece</a>, su presencia global aumenta con él.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7C2l8XZO7Zb541CMMGGlmp/f9c75d30557d0b5f6b3e1c78a0a48994/Screen-Shot-2019-09-26-at-10.58.41-PM.png" />
            
            </figure><p>Llevamos a cabo la tarea de ejecutar algunos puntos de referencia desde diferentes partes del mundo para usted, y nos complace compartir los resultados:</p>
    <div>
      <h2><b>Una última cosa...</b></h2>
      <a href="#una-ultima-cosa">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6MWlNMQWy0ithl7CEi7C9o/2e5ce64bf0d018b720968f17e07c46dd/Screen-Shot-2019-09-26-at-10.58.24-PM.png" />
            
            </figure><p>Implementar su próximo sitio con los Workers Sites es fácil y conduce a un gran rendimiento, por lo que pensamos que era correcto que implementáramos los Workers Sites nosotros mismos. ¡Con este anuncio, también estamos suministrando los <a href="https://developers.cloudflare.com/workers">documentos de Cloudflare Workers</a>! Y ahora se les brinda servicio desde un centro de datos de Cloudflare cerca de usted usando los Workers Sites.</p><p>¡Estamos ansiosos por ver qué implementa con los <a href="https://workers.cloudflare.com/sites">Workers Sites</a>!</p><hr /><p><i>¿Ha creado algo interesante con Workers o Workers Sites? ¡Háganoslo saber @CloudflareDev!</i></p> ]]></content:encoded>
            <category><![CDATA[Semana aniversario]]></category>
            <category><![CDATA[Noticias de productos]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Sin servidor]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Cloudflare Workers KV]]></category>
            <category><![CDATA[Desarrolladores]]></category>
            <category><![CDATA[Plataforma para desarrolladores]]></category>
            <guid isPermaLink="false">3siPXgl85litpEz6zHNaDg</guid>
            <dc:creator>Rita Kozlov</dc:creator>
        </item>
        <item>
            <title><![CDATA[Workers KV - Base de datos distribuida de Cloudflare]]></title>
            <link>https://blog.cloudflare.com/es-es/workers-kv-is-ga/</link>
            <pubDate>Tue, 21 May 2019 13:00:00 GMT</pubDate>
            <description><![CDATA[ El día de hoy nos complace anunciar que Workers KV ya se encuentra disponible y listo para usar. ]]></description>
            <content:encoded><![CDATA[ <p>El día de hoy nos complace anunciar que Workers KV ya se encuentra disponible y listo para usar.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3188jggqN4vJJchIXvTReV/e9476e1e9e5783948d4255f92bcb2e47/Workers-KV-GA_2x.png" />
            
            </figure>
    <div>
      <h3><b>¿Qué es Workers KV?</b></h3>
      <a href="#que-es-workers-kv">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/products/workers-kv/">Workers KV</a> es una base de datos de clave-valor, altamente distribuida y de coherencia eventual que amplía el perímetro global de Cloudflare. Permite almacenar miles de millones de pares clave-valor y leerlos en una latencia ultrabaja en cualquier parte del mundo. Ahora puede crear aplicaciones completas con el rendimiento de una memoria caché estática de red de entrega de contenidos (CDN, _Content Delivery Networ_k).</p>
    <div>
      <h3><b>¿Por qué la creamos?</b></h3>
      <a href="#por-que-la-creamos">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/products/cloudflare-workers/">Workers</a> es una plataforma que le permite ejecutar JavaScript en el perímetro global de Cloudflare de más de 175 centros de datos. Con solo unas pocas líneas de código, puede enrutar solicitudes HTTP, modificar respuestas o incluso crear nuevas respuestas sin un servidor de origen.</p>
            <pre><code>// A Worker that handles a single redirect,
// such a humble beginning...
addEventListener("fetch", event =&gt; {
  event.respondWith(handleOneRedirect(event.request))
})

async function handleOneRedirect(request) {
  let url = new URL(request.url)
  let device = request.headers.get("CF-Device-Type")
  // If the device is mobile, add a prefix to the hostname.
  // (eg. example.com becomes mobile.example.com)
  if (device === "mobile") {
    url.hostname = "mobile." + url.hostname
    return Response.redirect(url, 302)
  }
  // Otherwise, send request to the original hostname.
  return await fetch(request)
}</code></pre>
            <p>Los clientes acudieron rápidamente a nosotros con casos prácticos que requerían una manera de almacenar datos permanentes. Siguiendo nuestro ejemplo anterior, es fácil manejar una redirección única, pero ¿qué sucede si quieren manejar miles de millones? Tendría que incrustar los datos directamente en el código fuente de su secuencia de comandos de Workers, adaptar todo a menos de un 1 MB y volver a implementarlo cada vez que quiera hacer un cambio: ¡de locos! Por eso creamos Workers KV.</p>
            <pre><code>// A Worker that can handle billions of redirects,
// now that's more like it!
addEventListener("fetch", event =&gt; {
  event.respondWith(handleBillionsOfRedirects(event.request))
})

async function handleBillionsOfRedirects(request) {
  let prefix = "/redirect"
  let url = new URL(request.url)
  // Check if the URL is a special redirect.
  // (eg. example.com/redirect/&lt;random-hash&gt;)
  if (url.pathname.startsWith(prefix)) {
    // REDIRECTS is a custom variable that you define,
    // it binds to a Workers KV "namespace." (aka. a storage bucket)
    let redirect = await REDIRECTS.get(url.pathname.replace(prefix, ""))
    if (redirect) {
      url.pathname = redirect
      return Response.redirect(url, 302)
    }
  }
  // Otherwise, send request to the original path.
  return await fetch(request)
}</code></pre>
            <p>Con unos pocos cambios de nuestro ejemplo anterior, escalamos de una redirección a miles de millones, y eso es solo una muestra de lo que se puede hacer con Workers KV.</p>
    <div>
      <h3><b>¿Cómo funciona?</b></h3>
      <a href="#como-funciona">
        
      </a>
    </div>
    <p>Los almacenes de datos distribuidos suelen seguir el modelo del <a href="https://en.wikipedia.org/wiki/CAP_theorem">teorema CAP</a>, que establece que los sistemas distribuidos solo pueden elegir entre 2 de las 3 siguientes garantías:</p><ul><li><p><b>C</b>onsistency (coherencia): ¿mis datos son los mismos en todas partes?</p></li><li><p><b>A</b>vailability (disponibilidad): ¿es posible acceder a mis datos en todo momento?</p></li><li><p><b>P</b>artition (tolerancia a particiones): ¿mis datos resisten las interrupciones regionales?</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2q0UXWQCbVcPVUX9nrkB88/2c384717f1db76f9ecdf7065c08b770f/workers-kv-venn-diagram_2x-1.png" />
            
            </figure><p>Con Workers KV preferimos garantizar la disponibilidad y la tolerancia a particiones. Esta combinación se conoce como<a href="https://en.wikipedia.org/wiki/Eventual_consistency">coherencia eventual</a>, que le da a Workers KV dos ventajas competitivas únicas:</p><ul><li><p>Las lecturas son ultrarrápidas (promedio de 12 ms), ya que se activan a través de nuestra tecnología de almacenamiento en caché.</p></li><li><p>Los datos están disponibles en más de 175 centros de datos perimetrales y son resistentes a las interrupciones regionales.</p></li></ul><p>Sin embargo, la coherencia eventual trae aparejadas ciertas desventajas. Si dos clientes escriben valores diferentes para la misma clave al mismo tiempo, el último cliente que escribe es el que termina “ganando”, y su <i>eventual</i> valor se vuelve coherente a nivel global. Esto también significa que si un cliente escribe a una clave y ese mismo cliente lee la misma clave, los valores pueden no ser coherentes durante un breve período de tiempo.</p><p>Para ayudar a entender esta situación, presentamos un ejemplo de la vida real entre tres amigos:</p><ul><li><p>Supongamos que Matthew, Michelle y Lee están planeando su almuerzo semanal.</p></li><li><p>Matthew decide que saldrán a comer sushi.</p></li><li><p>Matthew le cuenta a Michelle sus planes de comer sushi; Michelle está de acuerdo.</p></li><li><p>Lee, sin conocer los planes, le dice a Michelle que es pizza lo que comerán.</p></li></ul><p>Una hora más tarde, Michelle y Lee están esperando en la pizzería mientras Matthew está sentado solo en el restaurante de sushi, ¿qué sucedió? Podemos decir que se debió al carácter <i>eventual</i> de su acuerdo previo, porque después de esperar unos minutos, Matthew mira su calendario actualizado y se termina enterando del nuevo plan: salían a comer pizza.</p><p>Si bien en la vida real puede tardar unos minutos, Workers KV es mucho más rápida. Puede lograr la coherencia global en menos de 60 segundos. Además, cuando un Worker escribe a una clave y de <i>inmediato</i> lee esa misma clave, se espera que los valores sean coherentes si ambas operaciones proceden de la misma ubicación.</p>
    <div>
      <h3><b>¿Cuándo debo usarla?</b></h3>
      <a href="#cuando-debo-usarla">
        
      </a>
    </div>
    <p>Ahora que comprende los beneficios y las desventajas de usar la coherencia eventual, ¿cómo puede saber si es la solución de almacenamiento adecuada para su aplicación? En pocas palabras, si desea tener disponibilidad global con lecturas ultrarrápidas, Workers KV es la herramienta indicada para usted.</p><p>Sin embargo, si su aplicación escribe con frecuencia a la misma clave, hay que tener algo más en cuenta. Lo denominamos “el problema de Matthew”: ¿Está de acuerdo con que los Matthew del mundo en ocasiones vayan al restaurante equivocado?</p><p>Uno puede imaginar casos prácticos (como nuestro ejemplo de redirección de Worker) en los que esto no representa ninguna diferencia sustancial. Pero si quiere hacer un seguimiento del saldo de la cuenta bancaria de un usuario, no sería nada bueno que se mostraran dos saldos al mismo tiempo, ya que el cliente podría comprar algo con dinero que ya ha gastado.</p>
    <div>
      <h3><b>¿Qué puedo desarrollar con esta herramienta?</b></h3>
      <a href="#que-puedo-desarrollar-con-esta-herramienta">
        
      </a>
    </div>
    <p>A continuación presentamos ejemplos de aplicaciones que se han desarrollado con KV:</p><ul><li><p>Redirecciones masivas: maneje miles de millones de redirecciones HTTP.</p></li><li><p>Autenticación de usuario: valide las solicitudes de usuario a su API.</p></li><li><p>Claves de traducción: localice sus páginas web de manera dinámica.</p></li><li><p>Datos de configuración: establezca quién puede acceder a su origen.</p></li><li><p>Funciones de paso: sincronice datos de estado entre las funciones de varias API.</p></li><li><p>Almacén de archivos perimetrales: aloje grandes cantidades de archivos pequeños.</p></li></ul><p>Hemos destacado varios de esos casos prácticos en nuestro <a href="/building-with-workers-kv/">blog.post</a> anterior. También tenemos algunos tutoriales de código más detallados, que incluyen un artículo del blog recientemente publicado sobre cómo crear <a href="/building-a-to-do-list-with-workers-and-kv/">una lista de tareas con Worker KV</a> en línea.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3oQnAPwVXWgsjCuSXuYL7q/755458cfb741e45f78c468a4729f7fc7/GQ4hrfQ.png" />
            
            </figure>
    <div>
      <h3><b>¿Qué novedades hay desde la beta?</b></h3>
      <a href="#que-novedades-hay-desde-la-beta">
        
      </a>
    </div>
    <p>Por lejos, la solicitud más común era facilitar la escritura de datos a Workers KV. Por esa razón, estamos lanzando tres nuevos métodos para mejorar esa experiencia:</p>
    <div>
      <h4><b>1. Escritura masiva</b></h4>
      <a href="#1-escritura-masiva">
        
      </a>
    </div>
    <p>Si quiere importar los datos existentes en Workers KV, no querrá pasar por la tediosa tarea de enviar una solicitud HTTP por <i>cada</i> par clave-valor. Por esa razón, agregamos un <a href="https://api.cloudflare.com/#workers-kv-namespace-write-multiple-key-value-pairs">punto de conexión masivo</a> a la API de Cloudflare. Ahora, puede cargar hasta 10 000 pares (hasta 100 MB de datos) en una sola solicitud PUT.</p>
            <pre><code>curl "https://api.cloudflare.com/client/v4/accounts/ \
     $ACCOUNT_ID/storage/kv/namespaces/$NAMESPACE_ID/bulk" \
  -X PUT \
  -H "X-Auth-Key: $CLOUDFLARE_AUTH_KEY" \
  -H "X-Auth-Email: $CLOUDFLARE_AUTH_EMAIL" \
  -d '[
    {"key": "built_by",    value: "kyle, alex, charlie, andrew, and brett"},
    {"key": "reviewed_by", value: "joaquin"},
    {"key": "approved_by", value: "steve"}
  ]'</code></pre>
            <p>Analicemos un caso práctico de ejemplo: usted desea descargar la traducción de su sitio web a Workers. Como usted lee las claves de traducción con más frecuencia que cuando las actualiza, esta aplicación funciona bien con el modelo de coherencia eventual de Workers KV.</p><p>En este ejemplo, usamos <a href="https://crowdin.com/">Crowdin</a>, una famosa plataforma para administrar datos de traducción. Worker responde a un punto de conexión /translate, descarga todas sus claves de traducción y las escribe de forma masiva en Worker KV para que usted pueda leerlas más tarde en nuestro centro perimetral:</p>
            <pre><code>addEventListener("fetch", event =&gt; {
  if (event.request.url.pathname === "/translate") {
    event.respondWith(uploadTranslations())
  }
})

async function uploadTranslations() {
  // Ask crowdin for all of our translations.
  var response = await fetch(
    "https://api.crowdin.com/api/project" +
    "/:ci_project_id/download/all.zip?key=:ci_secret_key")
  // If crowdin is responding, parse the response into
  // a single json with all of our translations.
  if (response.ok) {
    var translations = await zipToJson(response)
    return await bulkWrite(translations)
  }
  // Return the errored response from crowdin.
  return response
}

async function bulkWrite(keyValuePairs) {
  return fetch(
    "https://api.cloudflare.com/client/v4/accounts" +
    "/:cf_account_id/storage/kv/namespaces/:cf_namespace_id/bulk",
    {
      method: "PUT",
      headers: {
        "Content-Type": "application/json",
        "X-Auth-Key": ":cf_auth_key",
        "X-Auth-Email": ":cf_email"
      },
      body: JSON.stringify(keyValuePairs)
    }
  )
}

async function zipToJson(response) {
  // ... omitted for brevity ...
  // (eg. https://stuk.github.io/jszip)
  return [
    {key: "hello.EN", value: "Hello World"},
    {key: "hello.ES", value: "Hola Mundo"}
  ]
}</code></pre>
            <p>Ahora, cuando quiere traducir una página, todo lo que tiene que hacer es leer en Workers KV:</p>
            <pre><code>async function translate(keys, lang) {
  // You bind your translations namespace to the TRANSLATIONS variable.
  return Promise.all(keys.map(key =&gt; TRANSLATIONS.get(key + "." + lang)))
}</code></pre>
            
    <div>
      <h4><b>2. Claves con vencimiento</b></h4>
      <a href="#2-claves-con-vencimiento">
        
      </a>
    </div>
    <p>De forma predeterminada, los pares clave-valor almacenados en Workers KV duran para siempre. Sin embargo, puede que a veces quiera que los datos se eliminen automáticamente después de un cierto período de tiempo. Es por eso que añadimos las opcionesexpiration y expirationTtl para las operaciones de escritura.</p>
            <pre><code>// Key expires 60 seconds from now.
NAMESPACE.put("myKey", "myValue", {expirationTtl: 60})

// Key expires if the UNIX epoch is in the past.
NAMESPACE.put("myKey", "myValue", {expiration: 1247788800})</code></pre>
            
            <pre><code># You can also set keys to expire from the Cloudflare API.
curl "https://api.cloudflare.com/client/v4/accounts/ \
     $ACCOUNT_ID/storage/kv/namespaces/$NAMESPACE_ID/ \
     values/$KEY?expiration_ttl=$EXPIRATION_IN_SECONDS"
  -X PUT \
  -H "X-Auth-Key: $CLOUDFLARE_AUTH_KEY" \
  -H "X-Auth-Email: $CLOUDFLARE_AUTH_EMAIL" \
  -d "$VALUE"</code></pre>
            <p>Supongamos que desea bloquear a los usuarios que se marcaron como inapropiados en su sitio web, pero solo quiere hacerlo por una semana. Con una clave con vencimiento, puede configurar el tiempo de vencimiento y no tener que preocuparse por eliminar el bloqueo más adelante.</p><p>En este ejemplo, asumimos que los usuarios y las direcciones IP son lo mismo. Si su aplicación tiene autenticación, puede usar <i>tokens</i> de acceso como identificador de clave.</p>
            <pre><code>addEventListener("fetch", event =&gt; {
  var url = new URL(event.request.url)
  // An internal API that blocks a new user IP.
  // (eg. example.com/block/1.2.3.4)
  if (url.pathname.startsWith("/block")) {
    var ip = url.pathname.split("/").pop()
    event.respondWith(blockIp(ip))
  } else {
    // Other requests check if the IP is blocked.
   event.respondWith(handleRequest(event.request))
  }
})

async function blockIp(ip) {
  // Values are allowed to be empty in KV,
  // we don't need to store any extra information anyway.
  await BLOCKED.put(ip, "", {expirationTtl: 60*60*24*7})
  return new Response("ok")
}

async function handleRequest(request) {
  var ip = request.headers.get("CF-Connecting-IP")
  if (ip) {
    var blocked = await BLOCKED.get(ip)
    // If we detect an IP and its blocked, respond with a 403 error.
    if (blocked) {
      return new Response({status: 403, statusText: "You are blocked!"})
    }
  }
  // Otherwise, passthrough the original request.
  return fetch(request)
}</code></pre>
            
    <div>
      <h4><b>3. Valores más grandes</b></h4>
      <a href="#3-valores-mas-grandes">
        
      </a>
    </div>
    <p>Aumentamos nuestro límite de tamaño en valores que van desde 64 kB a 2 MB. Resulta bastante útil si necesita almacenar datos basados en memoria temporal o archivos en Workers KV.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1cYcxKnB6nfE9lUg6aIUZK/4cefcd37832fc703602f0c8aa37c33d6/workers-kc-file-size-update_2x.png" />
            
            </figure><p>Observe este caso: usted desea permitir que los usuarios carguen su GIF favorito en su perfil sin tener que almacenar estos GIF como archivos binarios en la base de datos ni administrar <i>otro</i> cubo de almacenamiento en la nube.</p><p>Workers KV es la solución ideal para a este caso práctico. En Workers KV puede crear un espacio de nombres rápido y confiable para los GIF de los usuarios dondequiera que se encuentren sus clientes.</p><p>En este ejemplo, los usuarios cargan un vínculo a su GIF favorito, luego un Worker lo descarga y lo almacena en Workers KV.</p>
            <pre><code>addEventListener("fetch", event =&gt; {
  var url = event.request.url
  var arg = request.url.split("/").pop()
  // User sends a URI encoded link to the GIF they wish to upload.
  // (eg. example.com/api/upload_gif/&lt;encoded-uri&gt;)
  if (url.pathname.startsWith("/api/upload_gif")) {
    event.respondWith(uploadGif(arg))
    // Profile contains link to view the GIF.
    // (eg. example.com/api/view_gif/&lt;username&gt;)
  } else if (url.pathname.startsWith("/api/view_gif")) {
    event.respondWith(getGif(arg))
  }
})

async function uploadGif(url) {
  // Fetch the GIF from the Internet.
  var gif = await fetch(decodeURIComponent(url))
  var buffer = await gif.arrayBuffer()
  // Upload the GIF as a buffer to Workers KV.
  await GIFS.put(user.name, buffer)
  return gif
}

async function getGif(username) {
  var gif = await GIFS.get(username, "arrayBuffer")
  // If the user has set one, respond with the GIF.
  if (gif) {
    return new Response(gif, {headers: {"Content-Type": "image/gif"}})
  } else {
    return new Response({status: 404, statusText: "User has no GIF!"})
  }
}</code></pre>
            <p>Por último, queremos agradecer a todos nuestros clientes de la beta. Sus valiosos comentarios nos permitieron generar estos cambios en Workers KV. Manténgase en contacto con nosotros. Siempre estamos adelantándonos a lo que viene y nos encanta recibir noticias suyas.</p>
    <div>
      <h3><b>Precios</b></h3>
      <a href="#precios">
        
      </a>
    </div>
    <p>Ya estamos listos para anunciar los precios de disponibilidad general. Si usted es uno de nuestros clientes empresariales, su precio obviamente permanece sin cambios.</p><ul><li><p>$0,50/GB de datos almacenados, 1 GB incluido</p></li><li><p>$0,50/millones de lecturas, 10 millones incluidos</p></li><li><p>$5/millones de operaciones de escritura, listas y eliminación, 1 millón incluido</p></li></ul><p>Durante el período beta, supimos que los clientes no quieren simplemente leer valores en nuestros centros perimetrales, sino también escribir valores desde ellos. Como hay una alta demanda de estas operaciones perimetrales, que son más costosas, hemos comenzado a cobrar operaciones no leídas por mes.</p>
    <div>
      <h3><b>Límites</b></h3>
      <a href="#limites">
        
      </a>
    </div>
    <p>Como dijimos antes, aumentamos nuestro límite de tamaño de valor de 64 kB a 2 MB. También eliminamos nuestro límite en el número de claves por espacio de nombres, que ahora es ilimitado. Estos son nuestros límites de disponibilidad general:</p><ul><li><p>Hasta 20 espacios de nombres por cuenta, cada uno con claves ilimitadas</p></li><li><p>Claves de hasta 512 bytes y valores de hasta 2 MB</p></li><li><p>Escrituras ilimitadas por segundo para diferentes claves</p></li><li><p>Una escritura por segundo para la misma clave</p></li><li><p>Lecturas ilimitadas por segundo por clave</p></li></ul>
    <div>
      <h3><b>¡Pruébala ahora!</b></h3>
      <a href="#pruebala-ahora">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/products/workers-kv/">Workers KV</a> ya está abierta a todos los clientes, y puede empezar a usarla hoy mismo desde su panel de control de Cloudflare en la pestaña Workers. También puede consultar nuestra <a href="https://developers.cloudflare.com/workers/kv/">documentación actualizada.</a></p><p>¡Estamos ansiosos por descubrir todo lo que podrán crear los usuarios con Workers KV!</p> ]]></content:encoded>
            <category><![CDATA[Sin servidor]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Cloudflare Workers KV]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Noticias de productos]]></category>
            <category><![CDATA[Programming]]></category>
            <category><![CDATA[Desarrolladores]]></category>
            <category><![CDATA[Plataforma para desarrolladores]]></category>
            <guid isPermaLink="false">1btTnYVZRP9LCWLguf60eI</guid>
            <dc:creator>Ashcon Partovi</dc:creator>
        </item>
    </channel>
</rss>