DAPR – simplify cloud-native application development

26.03.2021

DAPR (Distributed Application Runtime) ist eine eine quelloffene, portable, ereignisgesteuerte Runtime, welche es Entwicklern erleichtern soll, Microservices umzusetzen.

Viele haben Erfahrung mit klassischen 3-Tier Architekturen. Microservices, welche skalierbar, schnell veränderbar und resilient sein sollen, stellen jedoch zum Teil eine Herausforderung dar. Es wird nicht nur viel Zusatzwissen von verschiedensten Technologien der Cloud und Microservice Entwicklung benötigt, sondern oftmals auch zusätzlicher runtime Code zur Kommunikation zwischen den Microservices. DAPR setzt an dieser Problemstellung an und vereinfacht die Handhabung und Kommunikation verteilter Anwendungen. DAPR Anwendungen sind plattform-agnostisch wodurch diese sowohl lokal, in einem Kubernetes-Cluster als auch Cloud basiert gestartet werden können.

 

dapr - Architekturschaubild

Quelle: https://github.com/dapr/dapr

DAPR verwendet eine Sidecar-Architektur: Jeder Service erhält ein eigenes DAPR-Sidecar, welches in einem eigenen Container läuft. Dieses kommuniziert über eine API mit der Anwendung. Der Datenaustausch erfolgt über HTTP oder gRPC. Das Sidecar übernimmt Aufgaben, die sonst in der Geschäftslogik enthalten sind. Dazu gehört die Kommunikation mit anderen Services, Datenbankzugriffe und Secrets, aber auch das Veröffentlichen von Diagnosedaten. Die Kommunikation zwischen DAPR Sidecars erfolgt über gRPC und ist standardmäßig per mTLS verschlüsselt.

Jedes Sidecar hat eine Service-URL welche unabhängig von der Instanz und Umgebung erreichbar ist. Das Routing erfolgt hierbei über die DAPR-Instanz. Die Anwendungen selber kennt nur die localhost Umgebung, sprich alles innerhalb des jeweiligen Pods. Diese hören auch nur auf lokale Routen. DAPR verspricht, mit dieser Architektur mit minimalem Konfigurationsaufwand migrierbar zu sein und resistent gegen Adressänderungen, da in der Geschäftslogik nur persistente lokale URLs verwendet werden.

Invoke-Beispiel

Quelle: eigene Darstellung

Erste Schritte mit DAPR

Installation DAPR CLI

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

→ Installiert unter C:\dapr (Nicht vergessen PATH zu ergänzen)

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash

→ Installiert unter /usr/local/bin

$ dapr
 
         __
    ____/ /___ _____  _____
   / __  / __ '/ __ \/ ___/
  / /_/ / /_/ / /_/ / /
  \__,_/\__,_/ .___/_/
              /_/
 
===============================
Distributed Application Runtime
 
Usage:
  dapr [command]
 
Available Commands:
  completion     Generates shell completion scripts
  components     List all Dapr components. Supported platforms: Kubernetes
  configurations List all Dapr configurations. Supported platforms: Kubernetes
  dashboard      Start Dapr dashboard. Supported platforms: Kubernetes and self-hosted
  help           Help about any command
  init           Install Dapr on supported hosting platforms. Supported platforms: Kubernetes and self-hosted
  invoke         Invoke a method on a given Dapr application. Supported platforms: Self-hosted
  list           List all Dapr instances. Supported platforms: Kubernetes and self-hosted
  logs           Get Dapr sidecar logs for an application. Supported platforms: Kubernetes
  mtls           Check if mTLS is enabled. Supported platforms: Kubernetes
  publish        Publish a pub-sub event. Supported platforms: Self-hosted
  run            Run Dapr and (optionally) your application side by side. Supported platforms: Self-hosted
  status         Show the health status of Dapr services. Supported platforms: Kubernetes
  stop           Stop Dapr instances and their associated apps. . Supported platforms: Self-hosted
  uninstall      Uninstall Dapr runtime. Supported platforms: Kubernetes and self-hosted
  upgrade        Upgrades a Dapr control plane installation in a cluster. Supported platforms: Kubernetes
 
Flags:
  -h, --help      help for dapr
  -v, --version   version for dapr
 
Use "dapr [command] --help" for more information about a command.

Initialisieren von lokaler Umgebung

DAPR kann lokal an Prozesse gebunden werden oder in ein lokales Kubernetes Cluster (Minikube, Kind, …) installiert werden. Siehe DAPR Initialisieren.

Fazit

Der Einstieg in DAPR an sich ist einfach, da die Runtime logisch aufgebaut ist. Außerdem bietet die Dokumentation zu fast allem eine verständliche Erklärung. Schwierigkeiten gibt es lediglich bei spezifischen Nachforschungen und Fragen: DAPR ist ein aktuelles Cutting Edge Tool, weshalb die Community noch recht neu ist und das Know-how dementsprechend kleiner als bei etablierten Technologien.

Die Programmiersprache ist frei wählbar und die REST API weitestgehend bekannt, was das Entwickeln von Microservices ohne zusätzliche Einarbeitungszeit ermöglicht. Für die meisten gängigen Programmiersprachen sind bereits anschauliche Beispiele in der Dokumentation. Wenn REST gemieden werden soll gibt es alternativ ein SDK für die meisten Sprachen. Damit lässt sich die Kommunikation zwischen App und Sidecar per gRPC mit einfachen Hilfsmethoden realisieren.

Die Migration der lokalen Anwendung zu einem anderen Host ist trivial und bei entsprechenden Kenntnissen des Ziel in kürzester Zeit umgesetzt. Innerhalb der Geschäftslogik muss keine einzige Zeile Code und keine URL angepasst werden, da die verwendeten Docker Images identisch sind und unabhängig vom Cloudvendor betrieben werden. Lediglich die Image Location muss im Deployment File auf das entsprechende Repository angepasst werden.

Erwähnenswert ist, dass die DAPR Instanz selber Overhead mit sich bringt. So benötigt diese alleine pro DAPR System 5 Pods, jeder weitere Microservice einen zusätzlichen Container per Pod.
Gerade bei kleinen Anwendungen ist dies schnell ein vielfaches der eigentlichen Logik, was eventuell zusätzliche Kosten birgt, welche ohne DAPR und mit manuellem Entwicklungsaufwand gespart werden können.

Für größere verteilte System eignet sich ein Einsatz von DAPR aber auf jeden Fall, da keine Routing Logik in den eigentlichen Implementierungen verbaut werden muss.

In einem weiteren Teil gehen wir noch darauf ein, wie sich DAPR in der Azure und AWS Cloud verwenden lässt.

 

Co-Autor: Jacob Zeising

 

Mehr über Frontend Entwicklung erfahren


Quellen: 
dapr.io
github.com/dapr

Zurück zur Übersicht

Ein Kommentar zur “DAPR – simplify cloud-native application development

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*