A todos nos han decepcionado alguna vez los sitios web que se cargan lentamente, o las aplicaciones que parecen bloquearse cuando necesitan llamar a una API para una actualización. Cualquier cosa que no sea instantánea, hace que tu imaginación comience a divagar...
Una forma de agilizar las cosas es acercar los recursos lo más posible al usuario, que es lo que Cloudflare ha estado haciendo con los procesos, que se ejecutan en milisegundos de la mayoría de la población mundial. Sin embargo, por contradictorio que parezca, a veces acercar los procesos al usuario puede ralentizar las aplicaciones. Si tu aplicación necesita conectarse a las API, bases de datos u otros recursos que no están ubicados cerca del usuario final, entonces puede ser más eficaz ejecutar la aplicación cerca de los recursos en lugar del usuario.
Por eso, hoy nos complace anunciar Smart Placement para Workers y Pages Functions, que agiliza al máximo cada interacción. Con Smart Placement, Cloudflare lleva la informática sin servidor a la supernube mediante el traslado de los recursos de procesos a ubicaciones óptimas para acelerar las aplicaciones. La mejor parte es que es completamente automático, sin necesidad de ninguna entrada adicional (como la temida "region").
Smart Placement ya está disponible, en versión beta abierta, para todos los clientes de Workers y Pages.
Echa un vistazo a nuestra demostración sobre el funcionamiento de Smart Placement.
El cambio de la informática sin servidor
La red Anycast de Cloudflare está diseñada para procesar las solicitudes al instante y cerca del usuario. Como desarrollador, eso es lo que hace que Cloudflare Workers, nuestra solución de informática sin servidor, sea tan atractiva. Los competidores están delimitados por "regiones", mientras que Workers se ejecuta en todas partes, por lo que tenemos una region: planeta Tierra. Las solicitudes gestionadas íntegramente por Workers se pueden procesar en ese mismo momento, sin tener que llegar a un servidor de origen.
Aunque este concepto de informática sin servidor se consideró originalmente para tareas ligeras, la informática sin servidor ha experimentado un cambio en los últimos años. Se está utilizando para sustituir la arquitectura tradicional, que se basa en servidores de origen e infraestructura autogestionada, en lugar de simplemente mejorarla. Cada vez vemos más casos de uso de este tipo con usuarios de Workers y Pages.
Estado de las necesidades de la informática sin servidor
Con la transición a la arquitectura sin servidor y la creación de aplicaciones completas en Workers surge la necesidad de datos. El almacenamiento de información sobre acciones o eventos anteriores te permite crear aplicaciones personalizadas e interactivas. Supongamos que necesitas crear perfiles de usuario, almacenar en qué página se quedó un usuario, qué unidades de mantenimiento de existencias (SKU) tiene un usuario en su carrito, todo esto se asigna a puntos de datos utilizados para mantener el estado. Los servicios de backend, como las bases de datos relacionales, los almacenes de pares clave-valor, el almacenamiento de blobs y las API, te permiten crear aplicaciones con estado.
Procesos + almacenamiento de Cloudflare, un dúo eficaz
Tenemos nuestro propio conjunto cada vez mayor de soluciones de almacenamiento: Workers KV, Durable Objects, D1, R2. A medida que vamos desarrollando nuestros productos de datos, examinamos a fondo sus interacciones con Workers para que tú no tengas que hacerlo. Por ejemplo, otro enfoque que tiene un mejor rendimiento en algunos casos es acercar el almacenamiento, en lugar de los procesos, a los usuarios. Si utilizas Durable Objects para crear un videojuego en tiempo real, podríamos mover Durable Objects para minimizar la latencia para todos los usuarios.
Nuestro objetivo para el estado futuro es que establezcas mode = "smart" y nosotros evaluemos la ubicación óptima de todos tus recursos sin necesidad de configuración adicional.
Procesos de Cloudflare + {backendService} $
Hoy en día, el caso de uso principal de Smart Placement es cuando utilizas servicios que no son de Cloudflare, como bases de datos externas o API de terceros para tus aplicaciones.
Muchos servicios de backend, ya sean autoalojados o gestionados, están centralizados, lo que significa que los datos se almacenan y gestionan en una única ubicación. Tus usuarios y Workers son globales, pero tu backend está centralizado.
Si tu código realiza varias solicitudes a tus servicios de backend, podrían estar cruzando el mundo varias veces, lo que afectaría gravemente al rendimiento. Algunos servicios ofrecen replicación de datos y almacenamiento en caché que ayudan a mejorar el rendimiento, pero implican desventajas como la coherencia de los datos y mayores costes que deben sopesarse en función de tu caso de uso.
La red de Cloudflare está a aproximadamente 50 m/s del 95 % de la población conectada a Internet. Dándole la vuelta a esto, también estamos muy cerca de tus servicios backend.
El rendimiento de las aplicaciones es la experiencia del usuario
Veamos con un ejemplo cómo acercar los procesos a tus servicios backend puede reducir la latencia de la aplicación:
Supongamos que tienes un usuario en Sídney (Australia) que accede a una aplicación que se ejecuta en Workers. Esta aplicación realiza tres viajes de ida y vuelta a una base de datos ubicada en Fráncfort (Alemania) para atender la solicitud del usuario.
Intuitivamente, puedes suponer que el cuello de botella será el tiempo que tarde el Worker en realizar varios viajes de ida y vuelta a tu base de datos. En lugar de que el Worker se invoque cerca del usuario, ¿qué pasaría si se invocara en un centro de datos más cercano a la base de datos?
Hagamos la prueba.
Medimos la duración de la solicitud de un Worker sin Smart Placement y la comparamos con una con Smart Placement activado. Para ambas pruebas, enviamos 3500 solicitudes desde Sídney a un Worker que realiza tres viajes de ida y vuelta a una instancia de Upstash (nivel gratuito) ubicada en eu-central-1 (Fráncfort).
¡Los resultados son claros! En este ejemplo, el hecho de acercar el Worker al backend mejoróel rendimiento de la aplicación entre 4 y 8 veces.
Las decisiones de red no deberían depender de los humanos
Como desarrollador, debes centrarte en lo que mejor sabes hacer – crear aplicaciones – sin tener que preocuparte por las decisiones de red que harán que tu aplicación sea más rápida.
Cloudflare tiene una ventaja única. Nuestra red recopila información sobre las rutas óptimas entre los usuarios, los centros de datos de Cloudflare y los servidores back-end. Tenemos mucha experiencia en este ámbito con Argo Smart Routing. Smart Placement tiene en cuenta estos factores para colocar automáticamente tu Worker en el mejor lugar para minimizar la duración total de la solicitud.
Entonces, ¿cómo funciona Smart Placement?
Smart Placement se puede activar para cada Worker en la pestaña "Configuración" o en tu archivo wrangler.toml:
[placement]
mode = "smart"
Una vez que habilitas Smart Placement en tu Worker o Pages Function, el algoritmo de Smart Placement analiza las solicitudes fetch (también conocidas como sub-solicitudes) que realiza tu Worker en tiempo real. A continuación, las compara con los datos de latencia agregados por nuestra red. Si detectamos que, de media, tu Worker realiza más de una sub-solicitud a un recurso de backend, tu Worker se invocará automáticamente desde el centro de datos óptimo.
Hay algunos servicios de backend que, por buenas razones, el algoritmo de Smart Place no tiene en cuenta:
Servicios distribuidos globalmente: si los servicios con los que se comunica tu Worker están geodistribuidos en muchas regiones, Smart Placement no es una buena opción. Los descartamos automáticamente de la optimización de Smart Placement.
Servicios de análisis o registro: no es necesario que las solicitudes a los servicios de análisis o registro estén en la ruta crítica de tu aplicación. Debe utilizarse
waitUntil()
para que la respuesta a los usuarios no se bloquee cuando implementes tu código. Dado quewaitUntil()
no afecta a la duración de la solicitud desde la perspectiva del usuario, descartamos automáticamente los servicios de análisis/registro de la optimización de Smart Placement.
Consulta nuestra documentación para ver la lista de los servicios que no tiene en cuenta el algoritmo de Smart Placement.
Una vez que se active Smart Placement, podrás ver una nueva pestaña "Duración de la solicitud" en tu Worker. Enrutamos el 1 % de las solicitudes sin Smart Placement habilitado para que puedas ver su impacto en la duración de la solicitud.
Y sí, ¡es así de fácil!
Prueba Smart Placement con nuestra demostración (¡es muy divertido interactuar con ella!). Para obtener más información, visita nuestra documentación para desarrolladores.
¿Cuál será el próximo avance de Smart Placement?
Esto no ha hecho más que empezar. Tenemos muchas ideas sobre cómo podemos mejorar Smart Placement:
Compatibilidad para calcular la ubicación óptima cuando la aplicación utiliza varios backends
Colocación precisa (por ejemplo, si tu Worker utiliza varios backends en función de la ruta. Calculamos la ubicación óptima por ruta en lugar de por Worker)
Compatibilidad con conexiones basadas en TCP
¡Queremos conocer tu opinión! Si tienes comentarios o solicitudes de funciones, ponte en contacto con Discord para desarrolladores de Cloudflare.