Serverless
Das Serverless-Computing-Modell ist der vollständig verwaltete Cloud-Service, bei dem der Cloud-Provider die zugrunde liegende Infrastruktur verwaltet und Ressourcen automatisch zuweist und die Zuweisung zur Ausführung und Skalierung für den unmittelbaren Bedarf der Anwendung rückgängig macht. Das bedeutet, dass Entwickler sich keine Gedanken darüber machen müssen, wie die zugrunde liegende Compute-Infrastruktur bereitgestellt wird. Stattdessen können sie sich auf die Implementierung von Geschäftsfunktionen und -funktionen in der Anwendung konzentrieren. Kurz gesagt, Entwickler müssen sich darauf konzentrieren, Code für ihre Anwendungslogik zu schreiben, der in Funktionen bereitgestellt und bei Ereignissen ausgeführt wird, die von der Anwendung oder dem Benutzer ausgelöst werden. Das Serverless-Computing-Modell wird je nach Nutzung abgerechnet und entsprechend abgerechnet. Dies macht es zu einer kostengünstigeren Wahl, wenn häufig unerwartete Änderungen bei der Anwendungslast auftreten.
Serverless Computing ist eine jüngste Entwicklung im Bereich Cloud Computing, die in den letzten Jahren an Popularität gewonnen hat. Es ist beliebt für das zugrunde liegende Konzept der Ausführung von Code, ohne Server zu verwalten oder bereitzustellen. Die Oracle Cloud Infrastructure-(OCI-)Funktionen für die Implementierung serverloser Plattformen basieren auf dem Open-Source-Fn-Projekt, das Open Source, containernativ und serverlos ist und in jeder Cloud und On Premise ausgeführt werden kann.
Leistungen
Serverless bietet mehrere Vorteile gegenüber anderen in der Cloud verfügbaren Services und verfügt über folgende Vorteile:
- Reduzierter Betriebsaufwand: Serverless Computing hat den Overhead für die Verwaltung von Infrastruktur, Servern und Netzwerken beseitigt und die Entwicklungsteams auf das Schreiben von Code und die Entwicklung neuer Geschäftsfunktionen konzentriert.
- Schnellere Markteinführungszeit: Serverless Computing ermöglicht eine schnellere Markteinführung, da Anwendungen schneller bereitgestellt werden können als andere in der Cloud angebotene Compute-Services.
- Erhöhte Skalierbarkeit: Serverless Computing skaliert automatisch basierend auf Workload-Anforderungen für vertikale und horizontale Skalierung. Jede Spitze in der Last kümmert sich um sich selbst.
- Kostengünstig: Serverless Computing ist kostengünstig, da Sie nur für die Zeit bezahlen müssen, für die der Anwendungscode ausgeführt wird, was zu Kosteneinsparungen gegenüber herkömmlichen Compute-Modellen führt.
- Verbesserte Zuverlässigkeit: Das serverlose Computing verfügt über integrierte Redundanz- und Failover-Mechanismen, die die Zuverlässigkeit von Anwendungen verbessern.
- Höhere Flexibilität: Serverless Computing unterstützt verschiedene gängige Programmiersprachen, um Entwicklern Flexibilität zu bieten. Es unterstützt auch Bereitstellungsmodelle wie Container und das Schreiben von Code, der auf serverlosem Computing bereitgestellt wird.
Funktionsweise
Serverless Computing, oft als Service bezeichnet, ermöglicht es Entwicklern, sich auf das Schreiben von Code und das Bereitstellen von Code zu konzentrieren, ohne sich um die zugrunde liegende Infrastruktur zu kümmern, die zum Ausführen von Anwendungscode erforderlich ist. Führen Sie den Code wie folgt auf serverlosen Implementierungen wie OCI-Funktionen aus.
- Schreiben Sie Ihren Code in der bevorzugten Programmiersprache und verpacken Sie ihn in ein Containerimage aus der Funktion.
- Geben Sie die Funktionsdefinition in func.yaml an, einschließlich der maximalen Ausführungszeit und des Speicherverbrauchs.
- Übertragen Sie das Containerimage an die Container-Registry, um es vor der Ausführung abzurufen.
- Laden Sie Funktionsmetadaten (Speicher- und Zeitbeschränkungen) auf den Fn-Server hoch.
- Fügen Sie die Funktion zur Liste der Funktionen in der Konsole hinzu.
- Trigger aus dem CLI-Befehl oder externen Trigger wie HTTP-Anforderung, Zeitplan und Ereignisservice
- Identifizieren Sie in der Triggerfunktion das Containerimage, und ziehen Sie es aus der Containerregistrierung.
- Führen Sie die im Containerimage definierte Logik auf einer Instanz in einem Subnetz aus, das mit der Anwendung verknüpft ist, zu der die Funktion gehört.
- Nach der Ausführung oder Leerlaufzeit wird das Containerimage entfernt, und Ressourcen werden freigegeben.
Plattformen
OCI unterstützt serverlose Funktionen als Service, die als OCI Functions- und OCI-Containerinstanzen bezeichnet werden.
- Functions: Functions ist eine vollständig verwaltete, mehrmandantenfähige, hochskalierbare, bedarfsgesteuerte Funktions-as-a-Service-Plattform, welche auf einer Infrastruktur der Unternehmensklasse basiert und von der Open Source-Engine Fn Project unterstützt wird. Mit Funktionen können Sie Code in Java, Python, Node, Go, Ruby und C# schreiben.
- Containerinstanzen: Containerinstanzen ist ein serverloser Compute-Service, mit dem Sie Container schnell und einfach ausführen können, ohne Server verwalten zu müssen. Sie bietet die gleiche Isolationsebene wie virtuelle Maschinen.
Best Practices
Serverless wurde entwickelt, um den unvorhersehbaren Bedarf an Workload-Ressourcen zu decken. Es muss jedoch mit empfohlenen Best Practices entwickelt und implementiert werden, um die Vorteile einer effizienten Nutzung zu nutzen.
- Schnell und optimiert: Es sollte implementiert werden, um schnell auszuführen, Ressourcen effizient zu nutzen und unnötige Abhängigkeiten zu vermeiden.
- Ereignisgesteuert: Serverless eignet sich am besten für eine ereignisgesteuerte Architektur, um die Verarbeitung vom Auslöser des Ereignisses aus zu initiieren, um Kosten zu senken und die Skalierbarkeit zu verbessern.
- Implementierung mit verwalteten Services: Die Integration von Serverless mit verwalteten Services reduziert die Komplexität und Skalierbarkeit. Verwaltete Services wie Datenbank, Speicher und Messaging interagieren häufig mit serverlosen Services.
- Monitoring: Überwachen Sie Performance und Kosten für Serverless, um langsame und teure Funktionen zu optimieren. Nutzen Sie die von OCI empfohlene Monitoringimplementierung.
- Sicherheit: Data at Rest und Transit müssen mit Zugriff auf die Kontrolle verschlüsselt werden, um Sicherheitsrisiken und -angriffe zu minimieren.
Anwendungsfälle
Serverless bietet mehrere Anwendungsfälle für individuelle geschäftliche und funktionale Anforderungen. Häufige Anwendungsfälle sind:
- Batchjobs: Prozess wird nach vordefiniertem Zeitplan und Häufigkeit ausgelöst.
- Ereignisgesteuerte Anwendung: Der Prozess wurde von einem externen Ereignis wie einer Nachricht oder einer HTTP-Anforderung initiiert.
- Microservices: Thin Independent Service-Implementierung.
- Modell für maschinelles Lernen: Stellen Sie Modelle auf kostengünstigen und skalierbaren API-Endpunkten bereit.
Workload auf Serverless verschieben
Durch die Verlagerung Ihrer vorhandenen Workload auf Serverless können Sie Kosten senken, die Ausfallsicherheit erhöhen und die Skalierbarkeit verbessern. In den folgenden Informationen werden die Schritte zum Verschieben Ihrer Workload von On Premise in serverlos beschrieben.
- Identifizieren Sie die Workload, die Sie auf Serverless verschieben möchten, und identifizieren Sie Größe, Komplexität und Abhängigkeiten.
- Bewerten Sie die serverlose Plattform, wenn eine Funktion am besten geeignet ist oder eine Containerinstanz besser geeignet ist.
- Bestimmen Sie externe Serviceabhängigkeiten wie Datenbank, Speicher und Messaging für die Workload.
- Refactoring des Anwendungscodes durchführen, um die Performance zu optimieren und bei Bedarf containerisiert zu werden.
- Testen Sie die Anwendung auf die erwartete Funktionalität in der serverlosen Umgebung. Verwenden Sie die empfohlene Testumgebung oder ähnliches.
- Stellen Sie die Anwendung zur Ausführung auf der serverlosen Plattform bereit.
- Überwachen Sie Performancemetriken für Anwendungen und die Ressourcenauslastung.
- Optimieren Sie die Anwendung bei Bedarf, um die Performance basierend auf den von der Überwachung erfassten Metriken zu verbessern.
- Automatisieren Sie alles Mögliche mit der Pipeline DevOps für Build und Deployment.
Herausforderungen und Einschränkungen
Serverless hat Vorteile, aber berücksichtigen Sie die folgenden Elemente für das Workload-Deployment.
- Kaltstart: Serverless ist so konzipiert, dass sie basierend auf dem Ereignis ausgelöst werden, sodass sie nicht ohne Weiteres zum Starten der Verarbeitung verfügbar sind. Auch wenn sie erheblich vernachlässigbare Zeit benötigen, sollten Sie extrem niedrige Latenzanforderungen berücksichtigen.
- Ausführungstimeout: Serverless wurde für die schnelle Funktionalität und Freigabe von Ressourcen entwickelt. Infolgedessen gibt es einen zugehörigen Timeout für Serverless, um unvorhergesehene Szenarios für Dead Lock oder Infinite-Schleifen und Beendigungen zu verarbeiten. Diese Szenarios können zu Datenverlust und instabilen Zustandszenarios führen.
- Eingeschränkter Infrastrukturzugriff: Serverless Computing hat minimalen Zugriff auf die Infrastruktur, auf der es ausgeführt wird. Daher muss es sich auf externe Statusverwaltungs- oder Speicherservices verlassen, damit Informationen persistieren können.
- Komplexität: Herkömmliche Architektur mit komplexen Arbeitsabläufen und Abhängigkeiten kann die Komplexitätsbehandlung mit Serverless für das Debugging und die Fehlerbehebung erhöhen.
Die Zukunft von Serverless
Die Zukunft von Serverless bedeutet, dass keine komplexen Infrastrukturen mehr verwaltet und Herausforderungen manuell skaliert werden müssen. Dazu gehört auch die Behandlung unerwarteter Überspannungen bei der Anwendungslast, während nur die Auslastung bezahlt wird. Es gibt mehrere Frameworks und Lösungen, die auf Serverless entwickelt und weiterentwickelt werden, um den Entwickleraufwand für die sofortige Handhabung von Unternehmensszenarien zu minimieren. Sehen Sie sich die CNCF-Landschaft für weitere Tools, Frameworks und installierbare Plattformen auf Serverless an.