Eine Serverless-Funktion ist eine einzelne deploybare Einheit von Backend-Logik; ein Microservice ist ein vollständiger, eigenständig betriebener Dienst. Dieser eine Satz enthält den gesamten Vergleich im Kleinen – alles andere (Betriebsaufwand, Kostenkurven, Cold Starts, Zustand) folgt daraus, was die Deployment-Einheit ist: eine Funktion, die Sie einer Plattform übergeben, oder ein Dienst, den Sie selbst betreiben.
Das Wichtigste in Kürze
| Frage | Antwort |
|---|---|
| Der Kernunterschied | Deployment-Einheit: eine Operation (Funktion) vs. eine verantwortete Fähigkeit (Dienst) |
| Wer sie betreibt | Funktionen: die Plattform. Microservices: Ihr Team, pro Dienst |
| Kosten im Leerlauf | Funktionen skalieren auf null; eine Dienst-Flotte kostet rund um die Uhr |
| Der Preis der Funktionen | Cold Starts, Ausführungszeitlimits, Zustandslosigkeit |
| Der Preis der Dienste | Pipelines, Orchestrierung, Monitoring, Rufbereitschaft – multipliziert pro Dienst |
Die Deployment-Einheit im Code
Das hier ist das gesamte Deployment-Artefakt für einen Checkout-Vorgang – eine Funktion, kein Repository pro Dienst, kein Container-Image, keine Pipeline:
// JavaScript / Node.js — the function is the whole deployable
// cloud/main.js — runs on the platform; there is no service to operate
Parse.Cloud.define('checkout', async (request) => {
const cart = await new Parse.Query('Cart').get(request.params.cartId, {
sessionToken: request.user.getSessionToken(),
});
// …price the cart, reserve stock, write the order…
return { orderId: cart.id, status: 'confirmed' };
});
// Any client calls it by name — no gateway, container, or pipeline
const result = await Parse.Cloud.run('checkout', { cartId }); // Flutter / Dart — Back4app Flutter SDK
// Calling the function: one named endpoint, no service discovery
final checkout = ParseCloudFunction('checkout');
final response = await checkout.execute(
parameters: {'cartId': cartId},
);
if (response.success) {
print(response.result['status']); // confirmed
} else {
print(response.error?.message);
} // iOS / Swift — Back4app Swift SDK
// Calling the function: one named endpoint, no service discovery
struct Checkout: ParseCloudable {
typealias ReturnType = [String: String]
var functionName: String = "checkout"
var cartId: String
}
let result = try await Checkout(cartId: cartId).runFunction()
print(result["status"] ?? "") // confirmed // Android / Kotlin — Back4app Android SDK
// Calling the function: one named endpoint, no service discovery
val params = hashMapOf("cartId" to cartId)
ParseCloud.callFunctionInBackground<Map<String, String>>(
"checkout", params
) { result, e ->
if (e == null) {
Log.i("Checkout", result["status"] ?: "")
} else {
Log.w("Checkout", "failed: ${e.code}")
}
} Das Microservice-Gegenstück zu diesem Snippet ist ein ganzes Repository: ein HTTP-Server, ein Container-Build, Deployment-Manifeste, Service Discovery, Health Checks, ein Dashboard und eine Rufbereitschaft – noch bevor die erste Zeile Checkout-Logik existiert.
Serverless-Funktionen vs. eigene Microservices
| Dimension | Serverless-Funktionen | Eigene Microservices |
|---|---|---|
| Deployment-Einheit | Eine Funktion | Ein Dienst (Prozess + API + Daten) |
| Infrastruktur, die Sie betreiben | Keine – von der Plattform verwaltet | Container, Orchestrierung, Netzwerk pro Dienst |
| Skalierung | Automatisch, pro Aufruf, bis auf null | Konfigurieren Sie selbst; Kapazität läuft auch im Leerlauf |
| Zustand | Per Vertrag zustandslos; Zustand liegt in der Datenbank | Kann Zustand im Arbeitsspeicher halten (mit Folgekosten) |
| Latenzprofil | Warme Aufrufe sind schnell; inaktive Instanzen zahlen einen Cold Start | Gleichbleibend – der Prozess läuft immer |
| Runtime | Von der Plattform bereitgestellt (typischerweise eine verwaltete JavaScript-Runtime) | Alles, was sich containerisieren lässt |
| Lang laufende Aufgaben | Durch Ausführungszeitlimits begrenzt | Unbegrenzt |
| Teamzuschnitt | Nur Produktentwickler | Plattform-/DevOps-Kapazität erforderlich |
| Kostenkurve | Pro Ausführung; unschlagbar bei Lastspitzen, bei Dauerlast teurer | Pauschal; effizient bei gleichmäßig hohem Volumen |
Die Fachliteratur zu Microservices sagt klar, dass die Vorteile dieser Architektur mit erheblicher betrieblicher Reife erkauft werden – automatisiertes Deployment, ausgefeiltes Monitoring, Design für den Fehlerfall. Funktionen lagern genau diese Rechnung an die Plattform aus, weshalb Mike Roberts’ Serverless-Analyse FaaS als Tausch beschreibt: Kontrolle gegen radikal weniger Betriebsaufwand. Keiner der beiden Tauschhandel ist kostenlos; die Frage ist, welchen Preis Ihr Team sich leisten kann.
Was mit einer Anfrage tatsächlich passiert
Achten Sie darauf, was die untere Hälfte hinzufügt, das die obere gar nicht ausdrücken kann: Aufrufe zwischen Diensten, Datenspeicher pro Dienst und ein Gateway – die Koordinationsfläche, auf der die Komplexität von Microservices tatsächlich sitzt. Verteilte Transaktionen, Retries und Teilausfälle zwischen Warenkorb- und Bestell-Dienst sind Ihr Code; im Funktionsmodell ist derselbe Workflow meist eine Funktion und eine Datenbank, und die ereignisgesteuerten Bausteine (Trigger, geplante Jobs) hängen an der Plattform statt an Queues, die Sie selbst betreiben.
Wann Funktionen eine Microservice-Flotte ersetzen – und wann nicht
Die ehrliche Beobachtung hinter dem BaaS-Muster: Die meisten Microservices in einem typischen Produkt sind dünn. Sie validieren Eingaben, setzen eine Regel durch, lesen oder schreiben eine Datenbank und rufen einen Nachbardienst auf – die betriebliche Hülle um diese Logik macht 90 % ihres Gewichts aus. Cloud-Funktionen innerhalb einer BaaS-Plattform streichen diese Hülle: Datenbank, Authentifizierung, Dateispeicher und APIs sind Plattformdienste, sodass jeder “Dienst” auf eine Handvoll Funktionen und Trigger zusammenschrumpft. Teams von einer bis zehn Personen, die Produkte aus CRUD plus Geschäftslogik ausliefern, brauchen selten mehr.
Die Obergrenze ist ebenso ehrlich benannt. Funktionen können kein Empfehlungsmodell hosten, das spezielle Hardware braucht, keinen Video-Transcoder, der eine Stunde läuft, keine speziell abgestimmte WebSocket-Fan-out-Engine und keine Komponente, deren Dauerdurchsatz die Abrechnung pro Aufruf zur teuren Option macht. Überschreitet eine Komponente diese Grenzen, lösen Sie sie als echten Dienst heraus und lassen sie mit den Funktionen zusammenarbeiten – einen nachweislichen Hotspot herauszulösen, ist eine weit günstigere Migration, als eine auf Verdacht zu früh gebaute Flotte zu zerlegen. Das ist dieselbe Lehre, die das Monolith-first-Argument eine Ebene höher vermittelt.
Typische Anwendungsfälle
- Funktionen: APIs und mobile Backends. Anfragegetriebene Logik über einer verwalteten Datenbank – der häufigste Fall und genau der, den BaaS-Plattformen durchgängig abdecken.
- Funktionen: Trigger und Glue-Code. Beim Speichern validieren, beim Upload skalieren, mit einer Drittanbieter-API synchronisieren, nächtliche Jobs ausführen – kurzlebige Reaktionen, für die ein eigener Dienst völlig überdimensioniert wäre.
- Funktionen: schwankender und unbekannter Traffic. Launches, Kampagnen, MVPs – die Skalierung auf null fängt sowohl die Spitze als auch die Flaute ab.
- Microservices: Komponenten mit dauerhaft hoher Last. Suche, Feeds, Preis-Engines – gleichmäßige Last, bei der ständig verfügbare Kapazität günstiger und feiner abstimmbar ist.
- Microservices: besondere Runtimes. Nicht standardmäßige Sprachen, native Abhängigkeiten, GPUs, lang laufende Prozesse.
- Die Hybridlösung. Funktionen für die API und für Ereignisse; ein oder zwei herausgelöste Dienste für die Komponenten, bei denen die Zahlen es verlangen.
Sollten Sie Funktionen oder Microservices bauen? Eine Entscheidungsmatrix
| Ihre Situation | Tendenz |
|---|---|
| Kleines Team, Produktlogik ist überwiegend CRUD + Regeln | Funktionen auf einer BaaS-Plattform – die Flotte bringt Kosten, keine Fähigkeiten |
| Traffic ist schwankend, gering oder unvorhersehbar | Funktionen – die Skalierung auf null ist das ganze Argument |
| Eine Komponente läuft pro Job Minuten bis Stunden | Microservice (oder ein System für Hintergrund-Jobs) – Timeouts schließen Funktionen aus |
| Dauerhaft hoher Durchsatz auf einem Hot Path | Microservice – Kapazität zum Pauschalpreis gewinnt bei der Kostenkurve |
| Strenges Budget für Tail-Latenzen bei jeder Anfrage | Microservice – keine Schwankung durch Cold Starts |
| Eigene Runtime, native Abhängigkeiten, spezielle Hardware | Microservice – Plattformen führen nur aus, was sie unterstützen |
| Sie haben keine eigenen Betriebskapazitäten | Funktionen – die Kosten einer Flotte fallen an, ob eingeplant oder nicht |
| Ein Hotspot in einem ansonsten funktionsgerechten Produkt | Hybrid – genau diesen einen Dienst herauslösen, den Rest als Funktionen belassen |
Grenzen und Trade-offs
- Funktionen: Ausführungslimits sind harte Grenzen. Lange Aufgaben müssen in Job-Systeme oder Dienste umziehen – kein noch so geschickter Kniff verlängert einen Timeout sauber.
- Funktionen: Cold Starts und Ketten. Pro Aufruf selten, aber Architekturen, in denen Funktionen Funktionen aufrufen, addieren sie; halten Sie Hot Paths flach.
- Funktionen: Plattformbindung. Die Runtime und ihre APIs gehören der Plattform – ein Open-Source-Fundament, das Sie selbst hosten können, ist die praktische Absicherung gegen Lock-in.
- Microservices: Die Betriebskosten fallen pro Dienst an. Pipelines, Monitoring, versionierte Schnittstellenverträge und Rufbereitschaft wachsen mit der Flotte; diesen Aufwand zu unterschätzen, ist der klassische Fehler.
- Microservices: Probleme verteilter Systeme gibt es vom ersten Tag an. Netzwerkpartitionen, Teilausfälle und dienstübergreifende Konsistenz sind architektonische Konstanten, keine Randfälle.
- Beide: Zustand wird ohnehin ausgelagert. Funktionen erzwingen es, gut betriebene Dienste entscheiden sich dafür. In beiden Designs hält am Ende die Datenbank die Wahrheit, nicht die Rechenschicht.
Serverless-Funktionen und Microservices mit Back4app
Back4app ist eine Open-Source-Plattform für Backend as a Service (BaaS), die eine verwaltete Datenbank, automatisch generierte REST- und GraphQL-APIs, Authentifizierung, Dateispeicher und Serverless-Funktionen mit Cloud Code kombiniert. Damit liefert Back4app die Funktionsseite dieses Vergleichs komplett: Cloud Code führt benannte Funktionen wie checkout oben sowie Datenbank-Trigger und geplante Jobs aus – direkt neben allem, wofür eine Microservice-Flotte überhaupt da ist. So wird aus der Flotte, die die meisten Produkte gebaut hätten, eine Reihe von Funktionen über verwalteten Diensten. Und weil das Fundament Open Source ist und sich selbst hosten lässt, bleibt der Weg zum Herauslösen offen: Wächst eine Komponente über das Funktionsmodell hinaus, kann sie zu einem eigenen Dienst werden, ohne dass Sie die Plattform drumherum aufgeben.
Häufige Fragen
Ist eine Serverless-Funktion ein Microservice?
Nicht ganz – die Granularität unterscheidet sich um eine Größenordnung. Ein Microservice verantwortet eine fachliche Fähigkeit: eigener Prozess, eigener Datenspeicher, eigene Deployment-Pipeline, eigene API. Eine Funktion verantwortet eine einzelne Operation. Ein Microservice zerfällt typischerweise in viele Funktionen, und Prozess, Skalierung und Runtime rund um jede davon stellt die Plattform bereit, nicht Ihr Team.
Können Serverless-Funktionen Microservices ersetzen?
Bei vielen Produkten ja – vor allem, wenn die Dienste im Wesentlichen eine Datenbank mit Validierung und etwas Workflow-Logik umhüllen würden. Funktionen auf einer BaaS-Plattform bringen Datenbank, Authentifizierung und APIs gleich mit, sodass nur die eigentliche Geschäftslogik zu schreiben bleibt. Die Ausnahmen sind real: Lang laufende Aufgaben, eigene Runtimes, dauerhaft hoher Durchsatz und strenge Latenzanforderungen sprechen weiterhin für einen selbst betriebenen Dienst.
Was ist günstiger: Funktionen oder Microservices?
Bei geringem oder schwankendem Volumen die Funktionen – Sie zahlen pro Ausführung, und im Leerlauf entstehen keine Kosten, während eine Microservice-Flotte rund um die Uhr Container abrechnet, dazu die Engineering-Zeit für ihren Betrieb. Bei dauerhaft hohem Volumen kreuzen sich die Kurven: Ständig verfügbare Kapazität wird pro Anfrage günstiger. Rechnen Sie die Personalkosten für den Betrieb mit ein; sie übersteigen meist den Posten für die Infrastruktur.
Machen Cold Starts Funktionen langsamer als Microservices?
Nur beim Anteil der Aufrufe, die auf eine inaktive Instanz treffen – typischerweise wenige Millisekunden bis etwa eine Sekunde, gegenüber der gleichbleibenden Latenz eines ständig warmen Dienstes. Gleichmäßiger Traffic hält Funktionsinstanzen warm; kritisch sind verkettete Funktionen, weil jeder Schritt einen eigenen Cold Start hinzufügen kann. Bei strengen Budgets für Tail-Latenzen gewinnt weiterhin ein ständig laufender Dienst.
Wann sind eigene Microservices klar im Vorteil?
Bei lang laufenden oder zustandsbehafteten Aufgaben, die Funktions-Timeouts überschreiten, bei eigenen Runtimes oder Systemabhängigkeiten, die die Plattform nicht bietet, bei spezieller Hardware, bei dauerhaft hohem Durchsatz, für den ständig verfügbare Kapazität günstiger ist, und bei Teams, die volle Kontrolle über Netzwerk und Deployment-Topologie brauchen. Treffen mehrere dieser Punkte auf eine Komponente zu, gehört diese Komponente in einen eigenen Dienst.
Können Serverless-Funktionen Zustand halten?
Nicht zwischen Aufrufen – jeder Funktionsaufruf beginnt bei null, und alles, was erhalten bleiben soll, muss in der Datenbank oder einem Cache liegen. Microservices können Zustand im Arbeitsspeicher halten, erschweren damit aber Skalierung und Failover. In der Praxis laufen beide Architekturen auf dieselbe Disziplin hinaus: Zustand auslagern, Rechenleistung als wegwerfbar behandeln.
Lassen sich Funktionen und Microservices kombinieren?
Ja, und ausgereifte Systeme tun das in der Regel. Die pragmatische Aufteilung: Funktionen übernehmen API-Logik nach dem Anfrage-Antwort-Muster, Datenbank-Trigger, geplante Jobs und Glue-Code für Ereignisse; eigene Dienste übernehmen die wenigen Komponenten mit hoher, gleichmäßiger Last oder besonderen Runtime-Anforderungen. Mit Funktionen zu beginnen und einen Dienst herauszulösen, sobald die Zahlen es verlangen, ist günstiger als die umgekehrte Migration.