Bisher läuft alles an der Kladde ständig: die Webanwendung, der Worker für den Import aus Modul 3.5, beide als Container Apps mit mindestens einer Replik oder, mit Skalieren auf null, mit einem Ingress, der sie weckt. Serverless dreht die Sicht um: Sie schreiben Funktionen, die auf ein Ereignis reagieren (eine Anfrage, eine Nachricht, eine Uhrzeit), und die Plattform startet so viele Instanzen, wie gerade Ereignisse da sind, auch keine. Bezahlt wird für die Ausführung. Azure Functions ist dieser Dienst in Azure. In diesem Modul bauen Sie den Import der Ausschreibungen ein zweites Mal, als Functions, und entscheiden am Ende, welcher Weg für die Kladde der bessere ist.
Neu in dieser Lektion:
| Werkzeug oder Paket | Version | wofür |
|---|---|---|
Azure Functions Core Tools (func) |
4.16.0 | der Functions-Host lokal; Installation nach Learn, etwa mit winget oder npm |
| Azurite | 3.37.0 | der Speicher-Emulator für Blob, Queue und Table, den der Host lokal braucht; Open Source von Microsoft, per npm oder als Container |
Azure.Functions.Sdk |
1.0.2 | das Projekt-SDK einer Function App |
Microsoft.Azure.Functions.Worker |
2.52.0 | der Worker im eigenen Prozess |
Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore |
2.1.1 | HTTP-Trigger mit den Typen von ASP.NET Core |
Microsoft.Extensions.TimeProvider.Testing |
10.11.0 | FakeTimeProvider im Test, wie in Modul 3.8 |
Was Serverless heißt
Drei Eigenschaften machen einen Dienst „serverless“:
- Abrechnung nach Ausführung. Bezahlt wird für die Zeit und den Speicher, in denen Ihre Funktionen laufen, und für die Zahl der Aufrufe, nicht für bereitstehende Maschinen. Was das in Euro heißt, sagt der Preisrechner; Lektion 3.13.4 rechnet es für die Kladde durch.
- Skalieren auf null und zurück. Ohne Ereignisse läuft keine Instanz. Kommen viele, startet die Plattform viele, bei Flex Consumption bis zu 1.000. Wann und wie weit sie skaliert, entscheidet ein Skalierungscontroller, der die Quellen beobachtet (die Länge einer Warteschlange, die Zahl der Anfragen).
- Kaltstart. Läuft keine Instanz, muss die erste Anfrage warten, bis eine gestartet ist und Ihr Code geladen hat. Für einen nächtlichen Import ist das gleichgültig, für eine Seite, auf die ein Mensch wartet, nicht. Lektion 3.13.4 misst und mildert ihn.
Das passt gut zu Arbeit, die in Schüben kommt und auf Ereignisse reagiert: ein nächtlicher Import, Nachrichten aus einer Warteschlange, eine neue Datei im Blob Storage, ein Ablauf mit Wartezeiten. Es passt schlecht zu Arbeit, die ständig läuft, viel Speicher im Prozess hält oder lange Verbindungen braucht.