LLRT JavaScript Runtime: Redefiniendo la Latencia Serverless

Rate this content
Bookmark

Descubre el tiempo de ejecución experimental de JavaScript de AWS, LLRT (Low Latency Runtime), diseñado específicamente para abordar la creciente demanda de aplicaciones Serverless rápidas y eficientes.

This talk has been presented at JSNation 2024, check out the latest edition of this JavaScript Conference.

Richard Davison
Richard Davison
20 min
17 Jun, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La capacidad de respuesta rápida es esencial, y LLRT es un nuevo tiempo de ejecución de JavaScript optimizado para entornos serverless que ofrece un rendimiento mejorado y ahorro de costos en comparación con otros tiempos de ejecución. LLRT logra un rendimiento rápido al eliminar complejidades, aprovechar Rust y optimizar el AWS SDK para Lambda. Se inicia casi seis veces más rápido que Node.js y proporciona un ahorro de costos de 2.9 veces y un ahorro de tiempo de 3.7 veces en comparación con Node.js.

1. Introducción a LLRT

Short description:

La capacidad de respuesta rápida es esencial. Los servicios sin servidor como AWS Lambda a veces introducen latencia. LLRT es un nuevo tiempo de ejecución de JavaScript específicamente diseñado para entornos sin servidor. LLRT no incorpora un compilador justo a tiempo, lo que conserva los recursos de CPU y memoria. LLRT ofrece prácticamente inicios en frío despreciables y admite ECMAScript 2020 con muchas API de Node.js.

Hola a todos. En el mundo actual de las aplicaciones modernas, la capacidad de respuesta rápida es esencial. Los desarrolladores esperan una experiencia excelente en la que cada acción desencadene una respuesta inmediata.

Los servicios sin servidor como AWS Lambda permiten a los desarrolladores construir aplicaciones modernas sin la necesidad de aprovisionar servidores o infraestructura adicional. Sin embargo, estos servicios a veces introducen o agregan un poco de latencia al aprovisionar un nuevo entorno de ejecución para ejecutar el código del cliente. A esto a veces se le llama inicio en frío. Y aunque las métricas de producción muestran que los inicios en frío generalmente ocurren en menos del 1% de todas las invocaciones, y a veces incluso menos, aún puede ser un poco destructivo para la experiencia de usuario fluida que estamos buscando.

¿Qué tal si les dijera que hay una solución para los inicios en frío? ¿Qué tal si les dijera que pueden ejecutar aplicaciones de JavaScript en AWS Lambda con prácticamente inicios en frío despreciables? Mi nombre es Richard Davison. Trabajo como arquitecto de soluciones asociado, ayudando a los socios a modernizar sus aplicaciones en AWS utilizando tecnologías sin servidor y de contenedores. Y estoy aquí para hablar sobre el proyecto que he estado construyendo durante algún tiempo llamado LLRT y cómo redefine la latencia sin servidor.

Entonces, LLRT es la abreviatura de Tiempo de Ejecución de Baja Latencia. Y es un nuevo tiempo de ejecución de JavaScript construido desde cero para abordar la creciente demanda de aplicaciones sin servidor rápidas y eficientes. ¿Por qué deberíamos construir un nuevo tiempo de ejecución de JavaScript? Entonces, JavaScript es una de las formas más populares de construir y ejecutar aplicaciones sin servidor. También a menudo ofrece consistencia de pila completa, lo que significa que la backend y la frontend de su aplicación pueden compartir un lenguaje unificado, lo cual es una ventaja adicional. JavaScript también ofrece un ecosistema de paquetes rico y una gran comunidad que puede ayudar a acelerar el desarrollo de sus aplicaciones. Además, JavaScript es reconocido por ser bastante amigable para el usuario, lo que hace que sea fácil de aprender, fácil de leer y fácil de escribir. También es un estándar abierto conocido como ECMAScript, que ha sido implementado por diferentes motores, lo cual es algo de lo que hablaremos más adelante en esta presentación.

Entonces, ¿cómo es LLRT diferente de Node, Ebbun y Ordino? ¿Qué justifica la introducción de otro tiempo de ejecución de JavaScript a la luz de estas alternativas existentes? Entonces, Node, Ebbun y Ordino, representan tiempos de ejecución de JavaScript altamente competentes. Son extremadamente capaces y tienen un rendimiento muy bueno. Sin embargo, están diseñados pensando en aplicaciones de propósito general. Y estos tiempos de ejecución no fueron diseñados específicamente para las demandas de los entornos sin servidor, que a menudo se caracterizan por instancias de tiempo de ejecución de corta duración con recursos limitados. También dependen de un compilador justo a tiempo, un componente tecnológico muy sofisticado que permite compilar y optimizar dinámicamente el código de JavaScript durante la ejecución. Y aunque un compilador justo a tiempo ofrece ventajas de rendimiento sustanciales a largo plazo, a menudo conlleva una sobrecarga computacional y de memoria, especialmente cuando se hace con recursos limitados. En contraste, LLRT se distingue por no incorporar un compilador justo a tiempo, lo cual es una decisión estratégica que ofrece dos ventajas significativas. La primera es que, nuevamente, un compilador justo a tiempo es un componente tecnológico notablemente sofisticado que introduce una mayor complejidad del sistema y contribuye sustancialmente al tamaño del tiempo de ejecución en general. Y sin la sobrecarga de un JIT, LLRT conserva tanto los recursos de CPU como de memoria que se pueden asignar de manera más efectiva para ejecutar el código que se ejecuta dentro de su función de Lambda, y así reducir los tiempos de inicio de la aplicación. Entonces, nuevamente, un compilador justo a tiempo ofrecería un aumento de rendimiento sustancial a largo plazo, mientras que la falta de un compilador justo a tiempo puede ofrecer beneficios de inicio. LLRT está construido desde cero con un enfoque principal, el rendimiento en AWS Lambda. Por lo tanto, tiene prácticamente inicios en frío despreciables, y la duración del inicio en frío es inferior a 100 milisegundos para muchos casos de uso y tareas, incluso al realizar llamadas a la versión 3 del SDK de AWS. Utiliza un estándar bastante reciente de ECMAScript, ECMAScript 2020, con muchas API de Node.js.

Read also

2. LLRT Performance

Short description:

LLRT es un tiempo de ejecución de JavaScript que ofrece un rendimiento mejorado y ahorro de costos en comparación con otros tiempos de ejecución. Utiliza un motor ligero llamado QuickJS, que tiene menos de un megabyte de tamaño. LLRT está construido en Rust y cumple con la especificación de Node.js. En una demostración, LLRT tuvo un rendimiento significativamente más rápido y consumió menos memoria en comparación con Node.js.

Y el objetivo de esto es hacer que sea una migración lo más simple posible desde Node. Viene con lo que llamamos baterías incluidas. Entonces LLRT y el binario en sí mismo ya tienen algunos SDK de AWS v3 incorporados, por lo que no es necesario enviar y proporcionar esos, lo que también tiene beneficios de rendimiento. Y hablando de beneficios de rendimiento, también hay un beneficio de costos. Y un rendimiento más estable, principalmente debido a la falta de un compilador justo a tiempo, puede llevar a una mejora de hasta 2 veces en el rendimiento en comparación con otros tiempos de ejecución de JavaScript y un ahorro de costos de 2 veces, incluso para inicios en caliente.

Entonces, ¿qué hace que esto sea tan, tan rápido? ¿Qué hay debajo del capó? Utiliza un motor de JavaScript diferente en comparación con Deno o BUN. Entonces, Deno y BUN utilizan motores llamados V8 y JavaScript Core. V8 proviene del navegador Chrome y del equipo de Chrome. El equipo de Chrome ha creado un motor de JavaScript para su navegador llamado V8, mientras que BUN utiliza un motor llamado JavaScript Core que se ha divergido de Safari. Pero QuickJS, por otro lado, es un motor muy ligero. Es muy capaz, pero también es muy ligero. El motor en sí, cuando se compila, tiene menos de un megabyte. Si lo comparamos con JavaScript Core y V8, tienen más de 50 megabytes dentro de Node y BUN. LLRT también está construido en Rust utilizando el tiempo de ejecución asincrónico de Tokyo. Muchas de sus API implementadas dentro del tiempo de ejecución cumplen con la especificación de Node.js y están implementadas en Rust. El ejecutable en sí tiene menos de tres megabytes, y eso incluye el SDK de AWS.

Creo que es hora de echar un vistazo a una demostración rápida para ver cómo funciona en acción. Aquí estoy dentro de la consola de Lambda de AWS. En este ejemplo, he importado el cliente DynamoDB y el cliente de documentos DynamoDB para poner algunos eventos que llegan a Lambda de AWS en DynamoDB. También agrego una ID aleatoria y convierto el evento en una cadena, y simplemente devuelvo un código de estado de 200 y OK. Ahora ejecutemos esto usando el tiempo de ejecución regular de Node.js 20, y esta vez vemos un inicio de llamada. Vamos a la pestaña de pruebas aquí y hacemos clic en el botón de prueba. Ahora se ha ejecutado, y si examinamos los registros de ejecución aquí, podemos ver que Node.js se ejecutó con una duración de 988 milisegundos y una duración de compilación e inicio de 366 milisegundos. Entonces, en total, esto es aproximadamente un poco más de 1,2, 1,3 segundos, en realidad, y consumimos casi 88 megabytes de memoria al hacerlo. Lo que voy a hacer ahora es volver al código. Desplácese hacia abajo hasta la configuración del tiempo de ejecución, haga clic en editar y cambie a Amazon Linux 2023, siempre solo tiempo de ejecución. Guárdelo y ahora ejecutémoslo con LLRT. Como puede ver, esto fue casi instantáneo y al examinar los registros de ejecución, podemos ver que ahora tenemos una duración de 29 milisegundos y una duración de inicio de 38, lo que significa que tenemos una duración total de 69 milisegundos. Entonces, 69 milisegundos frente a 1.300 o un poco más para Node.js. Al hacerlo, solo consumimos alrededor de 20 megabytes de memoria.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
PlayCanvas is an open-source game engine used by game developers worldwide. Optimization is crucial for HTML5 games, focusing on load times and frame rate. Texture and mesh optimization can significantly reduce download sizes. GLTF and GLB formats offer smaller file sizes and faster parsing times. Compressing game resources and using efficient file formats can improve load times. Framerate optimization and resolution scaling are important for better performance. Managing draw calls and using batching techniques can optimize performance. Browser DevTools, such as Chrome and Firefox, are useful for debugging and profiling. Detecting device performance and optimizing based on specific devices can improve game performance. Apple is making progress with WebGPU implementation. HTML5 games can be shipped to the App Store using Cordova.
How React Compiler Performs on Real Code
React Advanced 2024React Advanced 2024
31 min
How React Compiler Performs on Real Code
Top Content
I'm Nadia, a developer experienced in performance, re-renders, and React. The React team released the React compiler, which eliminates the need for memoization. The compiler optimizes code by automatically memoizing components, props, and hook dependencies. It shows promise in managing changing references and improving performance. Real app testing and synthetic examples have been used to evaluate its effectiveness. The impact on initial load performance is minimal, but further investigation is needed for interactions performance. The React query library simplifies data fetching and caching. The compiler has limitations and may not catch every re-render, especially with external libraries. Enabling the compiler can improve performance but manual memorization is still necessary for optimal results. There are risks of overreliance and messy code, but the compiler can be used file by file or folder by folder with thorough testing. Practice makes incredible cats. Thank you, Nadia!

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Construye y Despliega un Backend con Fastify y Platformatic
JSNation 2023JSNation 2023
104 min
Construye y Despliega un Backend con Fastify y Platformatic
WorkshopFree
Matteo Collina
Matteo Collina
Platformatic te permite desarrollar rápidamente APIs GraphQL y REST con un esfuerzo mínimo. La mejor parte es que también te permite aprovechar todo el potencial de Node.js y Fastify cuando lo necesites. Puedes personalizar completamente una aplicación de Platformatic escribiendo tus propias características y complementos adicionales. En el masterclass, cubriremos tanto nuestros módulos de código abierto como nuestra oferta en la nube:- Platformatic OSS (open-source software) — Herramientas y bibliotecas para construir rápidamente aplicaciones robustas con Node.js (https://oss.platformatic.dev/).- Platformatic Cloud (actualmente en beta) — Nuestra plataforma de alojamiento que incluye características como aplicaciones de vista previa, métricas integradas e integración con tu flujo de Git (https://platformatic.dev/).
En este masterclass aprenderás cómo desarrollar APIs con Fastify y desplegarlas en la nube de Platformatic.
Depuración del Rendimiento de React
React Advanced 2023React Advanced 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos cómo analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Despliegue de aplicaciones React Native en la nube
React Summit 2023React Summit 2023
88 min
Despliegue de aplicaciones React Native en la nube
WorkshopFree
Cecelia Martinez
Cecelia Martinez
Desplegar aplicaciones React Native manualmente en una máquina local puede ser complejo. Las diferencias entre Android e iOS requieren que los desarrolladores utilicen herramientas y procesos específicos para cada plataforma, incluidos los requisitos de hardware para iOS. Los despliegues manuales también dificultan la gestión de las credenciales de firma, las configuraciones de entorno, el seguimiento de las versiones y la colaboración en equipo.
Appflow es la plataforma de DevOps móvil en la nube creada por Ionic. Utilizar un servicio como Appflow para construir aplicaciones React Native no solo proporciona acceso a potentes recursos informáticos, sino que también simplifica el proceso de despliegue al proporcionar un entorno centralizado para gestionar y distribuir tu aplicación en múltiples plataformas. Esto puede ahorrar tiempo y recursos, permitir la colaboración, así como mejorar la confiabilidad y escalabilidad general de una aplicación.
En este masterclass, desplegarás una aplicación React Native para su entrega en dispositivos de prueba Android e iOS utilizando Appflow. También aprenderás los pasos para publicar en Google Play y Apple App Stores. No se requiere experiencia previa en el despliegue de aplicaciones nativas, y obtendrás una comprensión más profunda del proceso de despliegue móvil y las mejores prácticas para utilizar una plataforma de DevOps móvil en la nube para enviar rápidamente a gran escala.