A finales de marzo de 2024, Mike Stonebraker anunciado en una publicación de blog el lanzamiento de Nube DBOS, «una plataforma informática transaccional sin servidor, posible gracias a un nuevo y revolucionario sistema operativo, DBOS, que implementa servicios del sistema operativo sobre una base de datos distribuida». Suena extraño, por decirlo suavemente, pero tiene más sentido cuando lees la historia del origen:
La idea de DBOS (sistema operativo orientado a bases de datos) se originó hace 3 años cuando me di cuenta de que el estado que debe mantener un sistema operativo (archivos, procesos, subprocesos, mensajes, etc.) ha aumentado en tamaño en aproximadamente 6 órdenes de magnitud desde que comencé. usando Unix en un PDP-11/40 en 1973. Como tal, almacenar el estado del sistema operativo es un problema de base de datos. Además, Linux es un código heredado en la actualidad y está teniendo dificultades para avanzar. Por ejemplo, no existe una versión de Linux de múltiples nodos, lo que requiere que las personas ejecuten un orquestador como Kubernetes. Cuando escuché una charla de Matei Zaharia en la que dijo que Databricks no podía usar la tecnología de programación del sistema operativo tradicional a la escala que estaban ejecutando y que en su lugar había recurrido a una solución DBMS, quedó claro que era hora de mover el DBMS al kernel y construir un nuevo sistema operativo”.
Si no lo sabes rompepiedrasha sido un científico informático (y profesor) centrado en bases de datos desde principios de la década de 1970, cuando él y sus colegas de UC Berkeley, Eugene Wong y Larry Rowe, fundaron Ingre. Más tarde, Ingres inspiró Sybase, que finalmente fue la base de Microsoft SQL Server. Después de vender Ingres a Computer Associates, Stonebraker y Rowe comenzaron a investigar Postgres, que más tarde se convirtió en PostgreSQL y también evolucionó a Illustra, que fue comprada por Informix.
Escuché a Stonebraker hablar sobre Postgres en una conferencia DBMS en 1980. Lo que saqué de esa charla, aparte de una imagen de «tambores de la jungla» que pedían SQL, fue la idea de que se podía agregar soporte para tipos de datos complejos a la base de datos implementando nuevos tipos de índice, extendiendo el lenguaje de consulta y agregando soporte para eso al analizador y optimizador de consultas. El ejemplo que usó fue información geoespacial y explicó un tipo de estructura de índice que haría que las consultas de bases de datos geométricas 2D fueran muy rápidas. (Esta instalación finalmente se convirtió PostGIS. El árbol R Los índices GiST utilizados actualmente de forma predeterminada en PostGIS no se inventaron hasta 1984, por lo que Mike probablemente estaba hablando del antiguo árbol cuádruple índice.)
Avanzando 44 años, no debería sorprender a nadie en el campo de las bases de datos que DBOS utilice una versión distribuida de PostgreSQL como capa de base de datos del núcleo.
El diagrama del sistema DBOS deja claro que una base de datos es parte del kernel del sistema operativo. La base de datos distribuida se basa en un núcleo mínimo, pero se encuentra bajo los servicios del sistema operativo en lugar de ejecutarse en la capa de aplicación como lo haría una base de datos normal.
Funciones DBOS
DBO Transact, un código abierto Mecanografiado framework, compatible con Postgres actasconfiable orquestación del flujo de trabajo, Servicio HTTP usando OBTENER y POST, comunicación con servicios externos y API de terceros, solicitudes idempotentes usando claves UUID, autenticacion y autorizacion, Integración Kafka con semántica exactamente una vez, examen de la unidady autohospedaje. DBOS Cloud, una plataforma transaccional sin servidor para implementar aplicaciones DBOS Transact, admite implementación de aplicaciones sin servidor, depuración de viajes en el tiempo, gestión de bases de datos en la nubey observabilidad.
Resaltemos algunas áreas importantes de interés.
Transacción DBOS
El código que se muestra en la captura de pantalla siguiente muestra las transacciones, así como el servicio HTTP mediante GET. Vale la pena leer el código con atención. Son sólo 18 líneas, sin contar las líneas en blanco.
La primera importación (línea 1) incluye las clases DBOS SDK que necesitaremos. La segunda importación (línea 2) trae el Generador de consultas SQL Knex.js, que maneja el envío de la consulta parametrizada a la base de datos de Postgres y devuelve las filas resultantes. El esquema de la tabla de la base de datos se define en las líneas 4 a 8; las únicas columnas son una name
cuerda y un greet_count
entero.
Sólo existe un método en el Hello
clase, helloTransaction
. esta envuelto en @GetApi
y @Transaction
decoradores, que respectivamente hacen que el método se sirva en respuesta a una HTTP GET
petición en el camino /greeting/
seguido del parámetro de nombre de usuario que desea pasar y envuelve la llamada de la base de datos en una transacción, de modo que dos instancias no puedan actualizar la base de datos simultáneamente.
La cadena de consulta de la base de datos (línea 16) utiliza la sintaxis de PostgreSQL para intentar insertar una fila en la base de datos para el nombre proporcionado y un recuento inicial de 1. Si la fila ya existe, entonces la ON CONFLICT
El disparador ejecuta una operación de actualización que incrementa el recuento en la base de datos.
La línea 17 usa Knex.js para enviar la consulta SQL a la base de datos del sistema DBOS y recupera el resultado. La línea 18 extrae el conteo de la primera fila de resultados y devuelve la cadena de saludo al programa que realiza la llamada.
El uso de SQL y una base de datos para lo que parece ser una API central del sistema en memoria, como un contador atómico de Linux o una variable entrelazada de Windows, parece profundamente extraño. Sin embargo, funciona.
Este código TypeScript para una clase Hello se genera cuando realiza una operación de creación de DBOS. Como puede ver, se basa en los decoradores @GetApi y @Transaction para ejecutar la función a partir de solicitudes HTTP GET y ejecutar la función como una transacción de base de datos.
Depurador de viajes en el tiempo DBOS
Cuando ejecuta una aplicación en DBOS Cloud, registra cada paso y cambio que realiza (el flujo de trabajo) en la base de datos. Puedes depurarlo usando Código de estudio visual y el Extensión del depurador de viajes en el tiempo DBOS. El depurador de viaje en el tiempo le permite depurar su aplicación DBOS con la base de datos tal como existía en el momento en que se ejecutó originalmente el flujo de trabajo seleccionado.
Para realizar la depuración de viajes en el tiempo, primero comience con CodeLens para enumerar los flujos de trabajo de seguimiento guardados. Una vez que elijas el que deseas, puedes depurarlo usando Visual Studio Code con un complemento o desde la línea de comandos.
La depuración en el tiempo con un flujo de trabajo guardado se parece mucho a la depuración normal en Visual Studio Code. El código que se está depurando es la misma clase Hello que viste antes.
Inicio rápido de DBOS
El tutorial de inicio rápido de DBOS requiere Node.js 20 o posterior y una base de datos PostgreSQL a la que pueda conectarse, ya sea localmente, en un contenedor Docker o de forma remota. Ya tenía Node.js v20.9.0 instalado en mi MacBook M1, pero lo actualicé a v20.12.1 desde el sitio web de Node.js.
No tenía PostgreSQL instalado, así que descargué y ejecuté el instalador interactivo para v16.2 desde EnterpriseDB. Este instalador crea un servidor y aplicaciones macOS completos. Si hubiera usado Homebrew en su lugar, habría creado aplicaciones de línea de comandos, y si hubiera usado Postgres.app, habría obtenido una aplicación de barra de menús.
El inicio rápido propiamente dicho comienza creando un directorio de aplicaciones DBOS usando Node.js.
martinheller@Martins-M1-MBP ~ % npx -y @dbos-inc/create@latest -n myapp Merged .gitignore files saved to myapp/.gitignore added 590 packages, and audited 591 packages in 25s found 0 vulnerabilities added 1 package, and audited 592 packages in 1s found 0 vulnerabilities added 129 packages, and audited 721 packages in 5s found 0 vulnerabilities Application initialized successfully!
Luego configura la aplicación para usar su servidor Postgres y exporta su contraseña de Postgres a una variable de entorno.
martinheller@Martins-M1-MBP ~ % cd myapp martinheller@Martins-M1-MBP myapp % npx dbos configure ? What is the hostname of your Postgres server? localhost ? What is the port of your Postgres server? 5432 ? What is your Postgres username? postgres martinheller@Martins-M1-MBP myapp % export PGPASSWORD=*********
Después de eso, crea una base de datos «Hola» usando Node.js y Knex.js.
martinheller@Martins-M1-MBP myapp % npx dbos migrate 2024-04-09 15:01:42 [info]: Starting migration: creating database hello if it does not exist 2024-04-09 15:01:42 [info]: Database hello does not exist, creating... 2024-04-09 15:01:42 [info]: Executing migration command: npx knex migrate:latest 2024-04-09 15:01:43 [info]: Batch 1 run: 1 migrations 2024-04-09 15:01:43 [info]: Creating DBOS tables and system database. 2024-04-09 15:01:43 [info]: Migration successful!
Una vez completado esto, puede compilar y ejecutar la aplicación DBOS localmente.
martinheller@Martins-M1-MBP myapp % npm run build npx dbos start > myapp@0.0.1 build > tsc 2024-04-09 15:02:30 [info]: Workflow executor initialized 2024-04-09 15:02:30 [info]: HTTP endpoints supported: 2024-04-09 15:02:30 [info]: GET : /greeting/:user 2024-04-09 15:02:30 [info]: DBOS Server is running at http://localhost:3000 2024-04-09 15:02:30 [info]: DBOS Admin Server is running at http://localhost:3001 ^C
En este punto, puede navegar hasta http://localhost:3000 para probar la aplicación. Una vez hecho esto, se registra en DBOS Cloud y proporciona su propia base de datos allí.
martinheller@Martins-M1-MBP myapp % npx dbos-cloud register -u meheller 2024-04-09 15:11:35 [info]: Welcome to DBOS Cloud! 2024-04-09 15:11:35 [info]: Before creating an account, please tell us a bit about yourself! Enter First/Given Name: Martin Enter Last/Family Name: Heller Enter Company: self 2024-04-09 15:12:06 [info]: Please authenticate with DBOS Cloud! Login URL: https://login.dbos.dev/activate?user_code=QWKW-TXTB 2024-04-09 15:12:12 [info]: Waiting for login... 2024-04-09 15:12:17 [info]: Waiting for login... 2024-04-09 15:12:22 [info]: Waiting for login... 2024-04-09 15:12:27 [info]: Waiting for login... 2024-04-09 15:12:32 [info]: Waiting for login... 2024-04-09 15:12:38 [info]: Waiting for login... 2024-04-09 15:12:44 [info]: meheller successfully registered! martinheller@Martins-M1-MBP myapp % npx dbos-cloud db provision iw_db -U meheller Database Password: ******** 2024-04-09 15:19:22 [info]: Successfully started provisioning database: iw_db 2024-04-09 15:19:28 [info]: {"PostgresInstanceName":"iw_db","HostName":"userdb-51fcc211-6ed3-4450-a90e-0f864fc1066c.cvc4gmaa6qm9.us-east-1.rds.amazonaws.com","Status":"available","Port":5432,"DatabaseUsername":"meheller","AdminUsername":"meheller"} 2024-04-09 15:19:28 [info]: Database successfully provisioned!
Finalmente, puede registrar e implementar su aplicación en DBOS Cloud.
martinheller@Martins-M1-MBP myapp % npx dbos-cloud app register -d iw_db 2024-04-09 15:20:09 [info]: Loaded application name from package.json: myapp 2024-04-09 15:20:09 [info]: Registering application: myapp 2024-04-09 15:20:11 [info]: myapp ID: d8806829-c5b8-4df0-8b5a-2d1bf87c3322 2024-04-09 15:20:11 [info]: Successfully registered myapp! martinheller@Martins-M1-MBP myapp % npx dbos-cloud app deploy 2024-04-09 15:20:35 [info]: Loaded application name from package.json: myapp 2024-04-09 15:20:35 [info]: Submitting deploy request for myapp 2024-04-09 15:21:09 [info]: Submitted deploy request for myapp. Assigned version: 1712676035 2024-04-09 15:21:13 [info]: Waiting for myapp with version 1712676035 to be available 2024-04-09 15:21:21 [info]: Successfully deployed myapp! 2024-04-09 15:21:21 [info]: Access your application at https://meheller-myapp.cloud.dbos.dev/
La aplicación «Hola» que se ejecuta en DBOS Cloud cuenta cada saludo. Utiliza el código que viste antes.
aplicaciones DBOS
La aplicación «Hello» ilustra algunas de las características principales de DBOS Transact y DBOS Cloud, pero es tan básica que apenas es un juguete. El Inicio rápido de programación agrega algunos detalles más y vale la pena revisarlo. Aprenderá a utilizar las funciones del comunicador para acceder a servicios de terceros (correo electrónico, en este ejemplo), así como a crear flujos de trabajo confiables. Literalmente interrumpirá el flujo de trabajo y lo reiniciará sin volver a enviar el correo electrónico: los flujos de trabajo DBOS siempre se ejecutan hasta su finalización y cada una de sus operaciones se ejecuta una vez y solo una vez. Esto es posible porque DBOS conserva el resultado de cada paso en su base de datos.
Una vez que haya comprendido el inicio rápido de programación, estará listo para probar los dos Aplicaciones de demostración DBOScual hacer elevarse al nivel de ser juguetes. Ambas demostraciones usan Siguiente.js para sus interfaces, y ambos utilizan flujos de trabajo, transacciones y comunicadores DBOS.
La primera demostración, Comercio electrónico, es un sistema web de procesamiento de compras y pagos. Vale la pena leer el Debajo de las sábanas del archivo README en el repositorio de la demostración para comprender cómo funciona y cómo es posible que desee actualizarlo para, por ejemplo, utilizar un proveedor de pagos real.
La segunda demostración, YKY Socialsimula una red social simple y utiliza TipoORM en lugar de Knex.js por su código de base de datos. También utiliza Amazon S3 para fotos de perfil. Si realmente quieres usar DBOS, deberías trabajar con ambas aplicaciones de demostración.
Una mirada tentadora
Debo decir que DBOS y DBOS Cloud parecen muy interesantes. Por ejemplo, son bastante deseables una ejecución confiable y una depuración del viaje en el tiempo. Por otro lado, no me gustaría crear una aplicación real en DBOS o DBOS Cloud en este momento. Tengo muchas preguntas, empezando por «¿Cómo se escala en la práctica?» y probablemente termine con «¿Cuánto costará en la escala X?»
Mencioné anteriormente que el código DBOS parece extraño pero funciona. Me imagino que cualquier taller de programación que considere escribir una aplicación en él se desanimaría o incluso rechacería la parte de «parece extraño», ya que los desarrolladores tienden a limitarse a sus costumbres hasta que lo que están haciendo ya no funciona.
También debo señalar que la implementación actual de DBOS está muy lejos del diagrama del sistema que vio al comienzo de esta revisión. ¿Dónde está el núcleo mínimo? DBOS actualmente se ejecuta en macOS, Linux y Windows. Ninguno de esos son núcleos mínimos. DBOS Cloud actualmente se ejecuta en AWS. Una vez más, no es un núcleo mínimo.
Entonces, en general, DBOS es una visión tentadora de algo que eventualmente puede resultar genial. Es nuevo y brillante, y proviene de gente inteligente, pero pasará un tiempo antes de que pueda convertirse en un sistema generalizado.
—
Costo: Gratis con límites de uso; Los planes pagos requieren que contacto ventas.
Plataforma: macOS, Linux, Windows, AWS.
Copyright © 2024 IDG Communications, Inc.