23 VIEWS

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

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

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


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

*

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.