Computerhaus Quickborn

Database Oriented Operating System (DBOS): Der bessere Weg, Cloud-Apps zu entwickeln?​

DBOS stellt eine drastische (und auf den ersten Blick unter Umständen absonderliche) Abkehr von bisherigen Konzepten der App-Entwicklung in der Cloud dar. Foto: Tattoboo | shutterstock.com Das Open-Source-Projekt Database Oriented Operating System (DBOS) wurde von Wissenschaftlern des MIT und der Stanford University im Rahmen eines kooperativen Forschungsprojekts auf die Beine gestellt. DBOS stellt Entwicklern in Aussicht, stabile Cloud-Native-Applikationen bei hoher Fehlertoleranz schneller, einfacher und sicherer erstellen zu können. Im Folgenden werfen wir einen detaillierten Blick auf die Entstehungsgeschichte, Komponenten und Funktionen von DBOS – und sagen Ihnen, wie Sie erste Schritte in der Praxis gehen. Was ist DBOS? Ende März 2024 verkündete Postgres-Schöpfer und DBOS-Mitbegründer Mike Stonebraker im Rahmen eines Blogbeitrags die Veröffentlichung von DBOS Cloud, “einer transaktionalen, Serverless-Computing-Plattform, die durch das revolutionäre, neue Betriebssystem DBOS ermöglicht wird und Betriebssystem-Services auf einer verteilten Datenbank implementiert”. Das klingt bei initialem Konsum – gelinde gesagt – ein wenig seltsam, ergibt aber mit Blick auf die Entstehungsgeschichte von DBOS durchaus Sinn. Die erläutert Stonebraker ebenfalls in besagtem Blogbeitrag: “Die Idee für DBOS entstand vor drei Jahren, als ich erkannte, dass der State, den ein Betriebssystem aufrechterhalten muss (Dateien, Prozesse, Threads, Nachrichten etcetera), um etwa sechs Größenordnungen gewachsen ist, seit ich 1973 mit Unix auf einer PDP-11/40 meine ersten Schritte tat. Aus dieser Perspektive ist es in erster Linie ein Datenbankproblem, den OS-State zu speichern. Dazu kommt, dass es sich bei Linux um Legacy-Code handelt, der sich nur schwer weiterentwickeln lässt. So gibt es zum Beispiel keine Multi-Node-Version – ein Orchestrierungs-Tool wie Kubernetes ist also obligatorisch. Als ich dann einen Vortrag von Matei Zaharia hörte, in dem er sagte, dass Databricks für seine Zwecke herkömmliche OS-Scheduling-Technologien nicht nutzen konnte und stattdessen auf eine Datenbankmanagement-Lösung setzte, war mir klar: Es war an der Zeit, letztere in den Kernel zu verlagern und ein neues Betriebssystem zu entwickeln.” Die verteilte Datenbank fußt (auf dem Papier) auf einem Minimal-Kernel, ist aber unterhalb der OS Services angesiedelt – statt wie eine herkömmliche Datenbank im Applikations-Layer zu laufen. Foto: Martin Heller | IDG Falls Sie Mike Stonebraker noch nicht kannten: Er ist bereits seit den frühen 1970er Jahren als Informatiker mit Datenbank-Fokus tätig. Zu seinen Errungenschaften zählen unter anderem die Entwicklung des relationalen Datenbanksystems Ingres, das später Sybase inspirierte – was wiederum die Grundlage für Microsoft SQL Server bildete. Zudem leistete Stonebraker Grundlagenarbeit für Postgres, das sich später zu PostgreSQL (und Illustra) weiterentwickelte. Angesichts dieser Historie überrascht es nicht, dass DBOS eine verteilte PostgreSQL-Version als Kernel-Database-Layer nutzt. Introducing DBOS Cloud: transactional #serverless computing platform.DBOS Cloud enhances #TypeScript with auto-scaling, statefulness, fault-tolerance, & cyber-resilience.Learn more from DBOS CTO & #postgres creator, Mike Stonebrakerhttps://t.co/1TIOdgHrLI1/2— DBOS (@DBOS_Inc) March 12, 2024 DBOS-Funktionen Im Folgenden werfen wir einen Blick auf die wesentlichen Komponenten von DBOS und ihre Features. Im Anschluß betrachten wir einige besonders interessante Aspekte im Detail. Bei DBOS Transact handelt es sich um ein Open-Source-TypeScript-Framework. Dieses unterstützt unter anderem: Workflow-Orchestrierung, Authentifizierung und Autorisierung, und Unit-Testing. DBOS Cloud ist eine transaktionale Serverless-Plattform, um DBOS-Transact-Apps bereitzustellen. Sie bietet zum Beispiel Support für: Serverless App Deployment, Time Travel Debugging, Cloud-Datenbankmanagement und Observability. DBOS Transact Der Code im folgenden Screenshot demonstriert Transaktionen sowie HTTP-Serving mit GET. Es lohnt sich also, die 18 Zeilen genau zu analysieren. Dieser Typescript-Code für eine Hello-Klasse wird generiert, wenn Sie einen DBOS-Create-Prozess anstoßen. Foto: Martin Heller | IDG Der erste Import (Zeile 1) bringt die DBOS-SDK-Klassen ein, die wir benötigen. Der zweite Import (Zeile 2) beschert uns den Knex.js SQL Query Builder, der die parametrisierte Abfrage an die Postgres-Datenbank sendet und die resultierenden Zeilen zurückgibt. Das Datenbankschema wird schließlich in den Zeilen 4 bis 8 definiert. Die einzigen Spalten sind ein name-String und ein greet_count-Integer. Die einzige Methode innerhalb der Hello-Klasse ist helloTransaction. Sie wird mit den Decorators @GetApi und @Transaction verpackt. Diese bewirken jeweils, dass besagte Methode über den Pfad /greeting/ als Antwort auf einen HTTP GET-Request geliefert wird – gefolgt vom zu übergebenden Username-Parameter. Das stellt sicher, dass nicht zwei Instanzen parallel die Datenbank aktualisieren. Der Datenbank-Query-String in Zeile 16 nutzt PostgreSQL-Syntax, um für den zur Verfügung gestellten Namen eine Zeile in die Datenbank einzufügen und diese mit dem Initialwert 1 auszustatten. Sollte diese Zeile bereits existieren, führt der ON CONFLICT-Trigger eine Aktualisierungsoperation aus. Wie in Zeile 17 zu sehen, wird die SQL-Abfrage mit Knex.js an die DBOS-Systemdatenbank gesendet und ihr Ergebnis abgerufen. DBOS Time Travel Debugger Wenn Sie eine Anwendung in DBOS Cloud ausführen, wird jeder Schritt und jede Änderung in der Datenbank festgehalten. Debuggen können Sie dabei entweder mit Visual Studio Code oder der DBOS Time Travel Debugger Extension. Letztere erlaubt Ihnen, Ihre DBOS-Applikation anhand der Datenbank (so wie sie zum Zeitpunkt des ausgewählten Workflows aussah) zu debuggen. Um den Time Travel Debugger zu nutzen, starten Sie mit einer CodeLens, um aus einer Liste gespeicherter Workflows den betreffenden auszuwählen. Foto: Martin Heller | IDG Time-travel Debugging mit einem gespeicherten Workflow erinnert stark an rudimentäre Arbeit mit Visual Studio Code. Foto: Martin Heller | IDG DBOS Quickstart Tutorial Das folgende Quickstart-Tutorial erfordert Node.js 20 (oder höher) und eine PostgreSQL-Datenbank, zu der Sie entweder lokal, über einen Docker-Container oder remote eine Verbindung herstellen können. Der eigentliche Quickstart beginnt damit, ein DBOS-App-Verzeichnis mit Node.js zu erstellen. 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! Anschließend füttern Sie die Anwendung mit den Daten Ihres Postgres-Servers und exportieren Ihr Passwort in eine Umgebungsvariable. 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=********* Im nächsten Schritt erstellen Sie eine “Hello”-Datenbank mit Node.js und 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! Hiernach können Sie die DBOS-Applikation lokal erstellen und ausführen. 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 An diesem Punkt können Sie http://localhost:3000 aufrufen, um die Anwendung zu testen. Danach registrieren Sie sich für DBOS Cloud und stellen dort Ihre eigene Datenbank bereit. 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! Im letzten Schritt können Sie schließlich Ihre Applikation über DBOS Cloud registrieren und bereitstellen. 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/ Diese “Hello”-Anwendung resultiert aus dem obenstehenden Code. Foto: Martin Heller | IDG Diese Anwendung veranschaulicht einige Kernfunktionen von DBOS Transact und DBOS Cloud, ist dabei aber so einfach gestrickt, dass sie eher untauglich ist, um damit zu experimentieren. Das DBOS “Programming Quickstart“-Tutorial ist etwas tiefgehender angelegt. Hier lernen Sie zum Beispiel, wie Sie Communicator-Funktionen verwenden, um auf Dienste von Drittanbietern zuzugreifen oder wie Sie zuverlässige Workflows zusammenstellen. Fazit: DBOS (Cloud) verlockt! DBOS und DBOS Cloud sehen unserer Meinung nach sehr interessant aus, nicht zuletzt wegen der zuverlässigen Execution und der Möglichkeit des Time-Travel Debugging. Vor dem Real-World-Einsatz gilt es allerdings noch einige Fragen zu beantworten. Zum Beispiel mit Blick auf Skalierbarkeit und Kosten. Ob sich DBOS unter Entwicklern durchsetzt, bleibt ohnehin abzuwarten. Schließlich tendieren diese eher dazu, an Gewohnheiten festzuhalten – bis die nicht mehr funktionieren. Insofern könnte eine Umstellung auf DBOS und den auf den ersten Blick etwas extravagant anmutenden Code eine Herausforderung darstellen. Zu erwähnen ist auch, dass die aktuelle Implementierung von DBOS dem Schaubild am Anfang des Artikels eher fern als nah ist: DBOS läuft aktuell auf macOS, Linux, Windows – DBOS Cloud auf AWS. Von “Minimal Kernel” kann da eher keine Rede sein. Dennoch hat DBOS seinen Reiz und die Reputation der Köpfe hinter dem Projekt spricht für sich selbst. Bis DBOS Mainstream wird, könnte es trotzdem noch eine ganze Zeit lang dauern. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Database Oriented Operating System (DBOS): Der bessere Weg, Cloud-Apps zu entwickeln?​ DBOS stellt eine drastische (und auf den ersten Blick unter Umständen absonderliche) Abkehr von bisherigen Konzepten der App-Entwicklung in der Cloud dar. Foto: Tattoboo | shutterstock.com Das Open-Source-Projekt Database Oriented Operating System (DBOS) wurde von Wissenschaftlern des MIT und der Stanford University im Rahmen eines kooperativen Forschungsprojekts auf die Beine gestellt. DBOS stellt Entwicklern in Aussicht, stabile Cloud-Native-Applikationen bei hoher Fehlertoleranz schneller, einfacher und sicherer erstellen zu können. Im Folgenden werfen wir einen detaillierten Blick auf die Entstehungsgeschichte, Komponenten und Funktionen von DBOS – und sagen Ihnen, wie Sie erste Schritte in der Praxis gehen. Was ist DBOS? Ende März 2024 verkündete Postgres-Schöpfer und DBOS-Mitbegründer Mike Stonebraker im Rahmen eines Blogbeitrags die Veröffentlichung von DBOS Cloud, “einer transaktionalen, Serverless-Computing-Plattform, die durch das revolutionäre, neue Betriebssystem DBOS ermöglicht wird und Betriebssystem-Services auf einer verteilten Datenbank implementiert”. Das klingt bei initialem Konsum – gelinde gesagt – ein wenig seltsam, ergibt aber mit Blick auf die Entstehungsgeschichte von DBOS durchaus Sinn. Die erläutert Stonebraker ebenfalls in besagtem Blogbeitrag: “Die Idee für DBOS entstand vor drei Jahren, als ich erkannte, dass der State, den ein Betriebssystem aufrechterhalten muss (Dateien, Prozesse, Threads, Nachrichten etcetera), um etwa sechs Größenordnungen gewachsen ist, seit ich 1973 mit Unix auf einer PDP-11/40 meine ersten Schritte tat. Aus dieser Perspektive ist es in erster Linie ein Datenbankproblem, den OS-State zu speichern. Dazu kommt, dass es sich bei Linux um Legacy-Code handelt, der sich nur schwer weiterentwickeln lässt. So gibt es zum Beispiel keine Multi-Node-Version – ein Orchestrierungs-Tool wie Kubernetes ist also obligatorisch. Als ich dann einen Vortrag von Matei Zaharia hörte, in dem er sagte, dass Databricks für seine Zwecke herkömmliche OS-Scheduling-Technologien nicht nutzen konnte und stattdessen auf eine Datenbankmanagement-Lösung setzte, war mir klar: Es war an der Zeit, letztere in den Kernel zu verlagern und ein neues Betriebssystem zu entwickeln.” Die verteilte Datenbank fußt (auf dem Papier) auf einem Minimal-Kernel, ist aber unterhalb der OS Services angesiedelt – statt wie eine herkömmliche Datenbank im Applikations-Layer zu laufen. Foto: Martin Heller | IDG Falls Sie Mike Stonebraker noch nicht kannten: Er ist bereits seit den frühen 1970er Jahren als Informatiker mit Datenbank-Fokus tätig. Zu seinen Errungenschaften zählen unter anderem die Entwicklung des relationalen Datenbanksystems Ingres, das später Sybase inspirierte – was wiederum die Grundlage für Microsoft SQL Server bildete. Zudem leistete Stonebraker Grundlagenarbeit für Postgres, das sich später zu PostgreSQL (und Illustra) weiterentwickelte. Angesichts dieser Historie überrascht es nicht, dass DBOS eine verteilte PostgreSQL-Version als Kernel-Database-Layer nutzt. Introducing DBOS Cloud: transactional #serverless computing platform.DBOS Cloud enhances #TypeScript with auto-scaling, statefulness, fault-tolerance, & cyber-resilience.Learn more from DBOS CTO & #postgres creator, Mike Stonebrakerhttps://t.co/1TIOdgHrLI1/2— DBOS (@DBOS_Inc) March 12, 2024 DBOS-Funktionen Im Folgenden werfen wir einen Blick auf die wesentlichen Komponenten von DBOS und ihre Features. Im Anschluß betrachten wir einige besonders interessante Aspekte im Detail. Bei DBOS Transact handelt es sich um ein Open-Source-TypeScript-Framework. Dieses unterstützt unter anderem: Workflow-Orchestrierung, Authentifizierung und Autorisierung, und Unit-Testing. DBOS Cloud ist eine transaktionale Serverless-Plattform, um DBOS-Transact-Apps bereitzustellen. Sie bietet zum Beispiel Support für: Serverless App Deployment, Time Travel Debugging, Cloud-Datenbankmanagement und Observability. DBOS Transact Der Code im folgenden Screenshot demonstriert Transaktionen sowie HTTP-Serving mit GET. Es lohnt sich also, die 18 Zeilen genau zu analysieren. Dieser Typescript-Code für eine Hello-Klasse wird generiert, wenn Sie einen DBOS-Create-Prozess anstoßen. Foto: Martin Heller | IDG Der erste Import (Zeile 1) bringt die DBOS-SDK-Klassen ein, die wir benötigen. Der zweite Import (Zeile 2) beschert uns den Knex.js SQL Query Builder, der die parametrisierte Abfrage an die Postgres-Datenbank sendet und die resultierenden Zeilen zurückgibt. Das Datenbankschema wird schließlich in den Zeilen 4 bis 8 definiert. Die einzigen Spalten sind ein name-String und ein greet_count-Integer. Die einzige Methode innerhalb der Hello-Klasse ist helloTransaction. Sie wird mit den Decorators @GetApi und @Transaction verpackt. Diese bewirken jeweils, dass besagte Methode über den Pfad /greeting/ als Antwort auf einen HTTP GET-Request geliefert wird – gefolgt vom zu übergebenden Username-Parameter. Das stellt sicher, dass nicht zwei Instanzen parallel die Datenbank aktualisieren. Der Datenbank-Query-String in Zeile 16 nutzt PostgreSQL-Syntax, um für den zur Verfügung gestellten Namen eine Zeile in die Datenbank einzufügen und diese mit dem Initialwert 1 auszustatten. Sollte diese Zeile bereits existieren, führt der ON CONFLICT-Trigger eine Aktualisierungsoperation aus. Wie in Zeile 17 zu sehen, wird die SQL-Abfrage mit Knex.js an die DBOS-Systemdatenbank gesendet und ihr Ergebnis abgerufen. DBOS Time Travel Debugger Wenn Sie eine Anwendung in DBOS Cloud ausführen, wird jeder Schritt und jede Änderung in der Datenbank festgehalten. Debuggen können Sie dabei entweder mit Visual Studio Code oder der DBOS Time Travel Debugger Extension. Letztere erlaubt Ihnen, Ihre DBOS-Applikation anhand der Datenbank (so wie sie zum Zeitpunkt des ausgewählten Workflows aussah) zu debuggen. Um den Time Travel Debugger zu nutzen, starten Sie mit einer CodeLens, um aus einer Liste gespeicherter Workflows den betreffenden auszuwählen. Foto: Martin Heller | IDG Time-travel Debugging mit einem gespeicherten Workflow erinnert stark an rudimentäre Arbeit mit Visual Studio Code. Foto: Martin Heller | IDG DBOS Quickstart Tutorial Das folgende Quickstart-Tutorial erfordert Node.js 20 (oder höher) und eine PostgreSQL-Datenbank, zu der Sie entweder lokal, über einen Docker-Container oder remote eine Verbindung herstellen können. Der eigentliche Quickstart beginnt damit, ein DBOS-App-Verzeichnis mit Node.js zu erstellen. 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! Anschließend füttern Sie die Anwendung mit den Daten Ihres Postgres-Servers und exportieren Ihr Passwort in eine Umgebungsvariable. 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=********* Im nächsten Schritt erstellen Sie eine “Hello”-Datenbank mit Node.js und 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! Hiernach können Sie die DBOS-Applikation lokal erstellen und ausführen. 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 An diesem Punkt können Sie http://localhost:3000 aufrufen, um die Anwendung zu testen. Danach registrieren Sie sich für DBOS Cloud und stellen dort Ihre eigene Datenbank bereit. 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! Im letzten Schritt können Sie schließlich Ihre Applikation über DBOS Cloud registrieren und bereitstellen. 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/ Diese “Hello”-Anwendung resultiert aus dem obenstehenden Code. Foto: Martin Heller | IDG Diese Anwendung veranschaulicht einige Kernfunktionen von DBOS Transact und DBOS Cloud, ist dabei aber so einfach gestrickt, dass sie eher untauglich ist, um damit zu experimentieren. Das DBOS “Programming Quickstart“-Tutorial ist etwas tiefgehender angelegt. Hier lernen Sie zum Beispiel, wie Sie Communicator-Funktionen verwenden, um auf Dienste von Drittanbietern zuzugreifen oder wie Sie zuverlässige Workflows zusammenstellen. Fazit: DBOS (Cloud) verlockt! DBOS und DBOS Cloud sehen unserer Meinung nach sehr interessant aus, nicht zuletzt wegen der zuverlässigen Execution und der Möglichkeit des Time-Travel Debugging. Vor dem Real-World-Einsatz gilt es allerdings noch einige Fragen zu beantworten. Zum Beispiel mit Blick auf Skalierbarkeit und Kosten. Ob sich DBOS unter Entwicklern durchsetzt, bleibt ohnehin abzuwarten. Schließlich tendieren diese eher dazu, an Gewohnheiten festzuhalten – bis die nicht mehr funktionieren. Insofern könnte eine Umstellung auf DBOS und den auf den ersten Blick etwas extravagant anmutenden Code eine Herausforderung darstellen. Zu erwähnen ist auch, dass die aktuelle Implementierung von DBOS dem Schaubild am Anfang des Artikels eher fern als nah ist: DBOS läuft aktuell auf macOS, Linux, Windows – DBOS Cloud auf AWS. Von “Minimal Kernel” kann da eher keine Rede sein. Dennoch hat DBOS seinen Reiz und die Reputation der Köpfe hinter dem Projekt spricht für sich selbst. Bis DBOS Mainstream wird, könnte es trotzdem noch eine ganze Zeit lang dauern. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!

DBOS stellt eine drastische (und auf den ersten Blick unter Umständen absonderliche) Abkehr von bisherigen Konzepten der App-Entwicklung in der Cloud dar. Foto: Tattoboo | shutterstock.com Das Open-Source-Projekt Database Oriented Operating System (DBOS) wurde von Wissenschaftlern des MIT und der Stanford University im Rahmen eines kooperativen Forschungsprojekts auf die Beine gestellt. DBOS stellt Entwicklern in Aussicht, stabile Cloud-Native-Applikationen bei hoher Fehlertoleranz schneller, einfacher und sicherer erstellen zu können. Im Folgenden werfen wir einen detaillierten Blick auf die Entstehungsgeschichte, Komponenten und Funktionen von DBOS – und sagen Ihnen, wie Sie erste Schritte in der Praxis gehen. Was ist DBOS? Ende März 2024 verkündete Postgres-Schöpfer und DBOS-Mitbegründer Mike Stonebraker im Rahmen eines Blogbeitrags die Veröffentlichung von DBOS Cloud, “einer transaktionalen, Serverless-Computing-Plattform, die durch das revolutionäre, neue Betriebssystem DBOS ermöglicht wird und Betriebssystem-Services auf einer verteilten Datenbank implementiert”. Das klingt bei initialem Konsum – gelinde gesagt – ein wenig seltsam, ergibt aber mit Blick auf die Entstehungsgeschichte von DBOS durchaus Sinn. Die erläutert Stonebraker ebenfalls in besagtem Blogbeitrag: “Die Idee für DBOS entstand vor drei Jahren, als ich erkannte, dass der State, den ein Betriebssystem aufrechterhalten muss (Dateien, Prozesse, Threads, Nachrichten etcetera), um etwa sechs Größenordnungen gewachsen ist, seit ich 1973 mit Unix auf einer PDP-11/40 meine ersten Schritte tat. Aus dieser Perspektive ist es in erster Linie ein Datenbankproblem, den OS-State zu speichern. Dazu kommt, dass es sich bei Linux um Legacy-Code handelt, der sich nur schwer weiterentwickeln lässt. So gibt es zum Beispiel keine Multi-Node-Version – ein Orchestrierungs-Tool wie Kubernetes ist also obligatorisch. Als ich dann einen Vortrag von Matei Zaharia hörte, in dem er sagte, dass Databricks für seine Zwecke herkömmliche OS-Scheduling-Technologien nicht nutzen konnte und stattdessen auf eine Datenbankmanagement-Lösung setzte, war mir klar: Es war an der Zeit, letztere in den Kernel zu verlagern und ein neues Betriebssystem zu entwickeln.” Die verteilte Datenbank fußt (auf dem Papier) auf einem Minimal-Kernel, ist aber unterhalb der OS Services angesiedelt – statt wie eine herkömmliche Datenbank im Applikations-Layer zu laufen. Foto: Martin Heller | IDG Falls Sie Mike Stonebraker noch nicht kannten: Er ist bereits seit den frühen 1970er Jahren als Informatiker mit Datenbank-Fokus tätig. Zu seinen Errungenschaften zählen unter anderem die Entwicklung des relationalen Datenbanksystems Ingres, das später Sybase inspirierte – was wiederum die Grundlage für Microsoft SQL Server bildete. Zudem leistete Stonebraker Grundlagenarbeit für Postgres, das sich später zu PostgreSQL (und Illustra) weiterentwickelte. Angesichts dieser Historie überrascht es nicht, dass DBOS eine verteilte PostgreSQL-Version als Kernel-Database-Layer nutzt. Introducing DBOS Cloud: transactional #serverless computing platform.DBOS Cloud enhances #TypeScript with auto-scaling, statefulness, fault-tolerance, & cyber-resilience.Learn more from DBOS CTO & #postgres creator, Mike Stonebrakerhttps://t.co/1TIOdgHrLI1/2— DBOS (@DBOS_Inc) March 12, 2024 DBOS-Funktionen Im Folgenden werfen wir einen Blick auf die wesentlichen Komponenten von DBOS und ihre Features. Im Anschluß betrachten wir einige besonders interessante Aspekte im Detail. Bei DBOS Transact handelt es sich um ein Open-Source-TypeScript-Framework. Dieses unterstützt unter anderem: Workflow-Orchestrierung, Authentifizierung und Autorisierung, und Unit-Testing. DBOS Cloud ist eine transaktionale Serverless-Plattform, um DBOS-Transact-Apps bereitzustellen. Sie bietet zum Beispiel Support für: Serverless App Deployment, Time Travel Debugging, Cloud-Datenbankmanagement und Observability. DBOS Transact Der Code im folgenden Screenshot demonstriert Transaktionen sowie HTTP-Serving mit GET. Es lohnt sich also, die 18 Zeilen genau zu analysieren. Dieser Typescript-Code für eine Hello-Klasse wird generiert, wenn Sie einen DBOS-Create-Prozess anstoßen. Foto: Martin Heller | IDG Der erste Import (Zeile 1) bringt die DBOS-SDK-Klassen ein, die wir benötigen. Der zweite Import (Zeile 2) beschert uns den Knex.js SQL Query Builder, der die parametrisierte Abfrage an die Postgres-Datenbank sendet und die resultierenden Zeilen zurückgibt. Das Datenbankschema wird schließlich in den Zeilen 4 bis 8 definiert. Die einzigen Spalten sind ein name-String und ein greet_count-Integer. Die einzige Methode innerhalb der Hello-Klasse ist helloTransaction. Sie wird mit den Decorators @GetApi und @Transaction verpackt. Diese bewirken jeweils, dass besagte Methode über den Pfad /greeting/ als Antwort auf einen HTTP GET-Request geliefert wird – gefolgt vom zu übergebenden Username-Parameter. Das stellt sicher, dass nicht zwei Instanzen parallel die Datenbank aktualisieren. Der Datenbank-Query-String in Zeile 16 nutzt PostgreSQL-Syntax, um für den zur Verfügung gestellten Namen eine Zeile in die Datenbank einzufügen und diese mit dem Initialwert 1 auszustatten. Sollte diese Zeile bereits existieren, führt der ON CONFLICT-Trigger eine Aktualisierungsoperation aus. Wie in Zeile 17 zu sehen, wird die SQL-Abfrage mit Knex.js an die DBOS-Systemdatenbank gesendet und ihr Ergebnis abgerufen. DBOS Time Travel Debugger Wenn Sie eine Anwendung in DBOS Cloud ausführen, wird jeder Schritt und jede Änderung in der Datenbank festgehalten. Debuggen können Sie dabei entweder mit Visual Studio Code oder der DBOS Time Travel Debugger Extension. Letztere erlaubt Ihnen, Ihre DBOS-Applikation anhand der Datenbank (so wie sie zum Zeitpunkt des ausgewählten Workflows aussah) zu debuggen. Um den Time Travel Debugger zu nutzen, starten Sie mit einer CodeLens, um aus einer Liste gespeicherter Workflows den betreffenden auszuwählen. Foto: Martin Heller | IDG Time-travel Debugging mit einem gespeicherten Workflow erinnert stark an rudimentäre Arbeit mit Visual Studio Code. Foto: Martin Heller | IDG DBOS Quickstart Tutorial Das folgende Quickstart-Tutorial erfordert Node.js 20 (oder höher) und eine PostgreSQL-Datenbank, zu der Sie entweder lokal, über einen Docker-Container oder remote eine Verbindung herstellen können. Der eigentliche Quickstart beginnt damit, ein DBOS-App-Verzeichnis mit Node.js zu erstellen. 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! Anschließend füttern Sie die Anwendung mit den Daten Ihres Postgres-Servers und exportieren Ihr Passwort in eine Umgebungsvariable. 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=********* Im nächsten Schritt erstellen Sie eine “Hello”-Datenbank mit Node.js und 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! Hiernach können Sie die DBOS-Applikation lokal erstellen und ausführen. 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 An diesem Punkt können Sie http://localhost:3000 aufrufen, um die Anwendung zu testen. Danach registrieren Sie sich für DBOS Cloud und stellen dort Ihre eigene Datenbank bereit. 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! Im letzten Schritt können Sie schließlich Ihre Applikation über DBOS Cloud registrieren und bereitstellen. 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/ Diese “Hello”-Anwendung resultiert aus dem obenstehenden Code. Foto: Martin Heller | IDG Diese Anwendung veranschaulicht einige Kernfunktionen von DBOS Transact und DBOS Cloud, ist dabei aber so einfach gestrickt, dass sie eher untauglich ist, um damit zu experimentieren. Das DBOS “Programming Quickstart“-Tutorial ist etwas tiefgehender angelegt. Hier lernen Sie zum Beispiel, wie Sie Communicator-Funktionen verwenden, um auf Dienste von Drittanbietern zuzugreifen oder wie Sie zuverlässige Workflows zusammenstellen. Fazit: DBOS (Cloud) verlockt! DBOS und DBOS Cloud sehen unserer Meinung nach sehr interessant aus, nicht zuletzt wegen der zuverlässigen Execution und der Möglichkeit des Time-Travel Debugging. Vor dem Real-World-Einsatz gilt es allerdings noch einige Fragen zu beantworten. Zum Beispiel mit Blick auf Skalierbarkeit und Kosten. Ob sich DBOS unter Entwicklern durchsetzt, bleibt ohnehin abzuwarten. Schließlich tendieren diese eher dazu, an Gewohnheiten festzuhalten – bis die nicht mehr funktionieren. Insofern könnte eine Umstellung auf DBOS und den auf den ersten Blick etwas extravagant anmutenden Code eine Herausforderung darstellen. Zu erwähnen ist auch, dass die aktuelle Implementierung von DBOS dem Schaubild am Anfang des Artikels eher fern als nah ist: DBOS läuft aktuell auf macOS, Linux, Windows – DBOS Cloud auf AWS. Von “Minimal Kernel” kann da eher keine Rede sein. Dennoch hat DBOS seinen Reiz und die Reputation der Köpfe hinter dem Projekt spricht für sich selbst. Bis DBOS Mainstream wird, könnte es trotzdem noch eine ganze Zeit lang dauern. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox! 

Nach oben scrollen
×