Almacenamiento SQLite de latencia cero en cada Durable Object
(simonwillison.net)-
Zero-latency SQLite storage in every Durable Object
- Kenton Varda presenta la siguiente versión de la plataforma Durable Object de Cloudflare. Esta plataforma fue actualizada recientemente de un almacén clave/valor a un sistema relacional completo basado en SQLite
- Para información de contexto útil sobre la primera versión de Durable Objects, se puede consultar Cloudflare’s durable multiplayer moat de Paul Butler. Es popular para construir aplicaciones de colaboración en tiempo real basadas en WebSocket
- Los nuevos Durable Objects basados en SQLite son un elemento atractivo de diseño de sistemas distribuidos que propone una forma interesante de diseñar aplicaciones a gran escala
-
Idea central de Durable Objects
- Un Durable Object coloca la lógica de la aplicación en el mismo host físico que los datos, ofreciendo un rendimiento de lectura y escritura muy rápido
- Un solo objeto se ejecuta en un único hilo de una sola máquina, por lo que su rendimiento está limitado. Para manejar más tráfico, se crean más objetos. Esto es más sencillo cuando cada unidad de estado tiene un nivel de tráfico lo bastante bajo como para que un solo objeto pueda manejarla
-
Ejemplo de sistema de reservas de vuelos
- Cada vuelo puede mapearse a un Durable Object dedicado con su propia base de datos SQLite. Se crean miles de nuevas bases de datos por día para cada aerolínea
- Cada DO tiene un nombre único, y la red de Cloudflare enruta las solicitudes al objeto sin importar en qué parte del mundo se encuentre
-
Detalles técnicos
- Inspirado en Litestream, cada DO transmite continuamente una secuencia de entradas WAL hacia un almacenamiento de objetos. Esto se agrupa cada 16 MB o cada 10 segundos
- Para garantizar la durabilidad dentro de la ventana de 10 segundos, las escrituras se envían a cinco réplicas en centros de datos cercanos tan pronto como se confirman, y la escritura se reconoce cuando tres de ellas la validan
-
Diseño de la API de JavaScript
- Está diseñada para ser bloqueante, no asíncrona. Esto busca ofrecer operaciones de persistencia rápidas en un solo hilo
- Incluye ejemplos que muestran intencionalmente el patrón de consultas N+1, que SQLite puede manejar bien
-
Storage Relay Service
- Es el sistema subyacente de Durable Objects y ha estado respaldando el sistema SQLite D1 existente de Cloudflare durante más de un año
-
Dónde se crean los Durable Objects
- Los Durable Objects no cambian de ubicación después de ser creados. Por defecto, se instancian en el centro de datos donde se realiza la solicitud inicial
get() - Para crear manualmente Durable Objects en otra ubicación, se proporciona el parámetro opcional
locationHintaget()
- Los Durable Objects no cambian de ubicación después de ser creados. Por defecto, se instancian en el centro de datos donde se realiza la solicitud inicial
-
Sitio where.durableobjects.live
- Es un sitio que rastrea dónde se crean los DO dentro de la red de Cloudflare
Resumen de GN⁺
- Los Durable Objects de Cloudflare, basados en SQLite, abren nuevas posibilidades para diseñar aplicaciones a gran escala. Esto ofrece un rendimiento rápido al colocar los datos y la lógica de la aplicación en el mismo host físico
- Este sistema es especialmente útil para aplicaciones de colaboración en tiempo real y ofrece flexibilidad para manejar diversas unidades de estado
- Durable Objects crea réplicas en múltiples centros de datos para garantizar la durabilidad de los datos, lo que mejora la estabilidad y la confiabilidad
- Esta tecnología puede resultar interesante para desarrolladores interesados en el diseño de sistemas distribuidos a gran escala. Sistemas con capacidades similares incluyen DynamoDB de Amazon y Firestore de Google
1 comentarios
Opiniones en Hacker News
La API de escritura es sincrónica, pero tiene una capacidad oculta de espera asíncrona. Si una escritura falla, el runtime reemplaza la respuesta con un error HTTP, lo que permite agrupar automáticamente las escrituras y asumir que tuvieron éxito
Cada DO transmite una secuencia de entradas WAL al object storage, y esto se agrupa cada 16 MB o cada 10 segundos
Me gusta el diseño de Durable Objects. Es fácil entender cómo funciona internamente
Es difícil entender dónde están ubicados físicamente los Durable Objects
Es difícil entender las nuevas tecnologías cloud
Me pregunto cómo manejar las migraciones de esquema
El diseño de DO me parece interesante, pero creo que solo sirve para sistemas de alta carga o proyectos de juguete
El diseño de DO me impresionó. Creo que su forma de manejar tareas complejas a baja escala se parece a la estructura de un producto real
Me llama la atención que CF esté recomendando a los desarrolladores usar DO
Me pregunto si DO corresponde al "modelo" en una arquitectura MVC