Getty Images/iStockphoto
Leistung bei der Anwendungs-Modernisierung berücksichtigen
Entwicklungsteams nutzen zunehmend Cloud-Lösungen, Container und Microservices, um Anwendungen zu modernisieren. Diese sind aber nur von Nutzen, wenn sie die Leistung steigern.
Manche Unternehmen glauben, dass es für die Modernisierung von Legacy-Anwendungen ausreicht, sie in die Cloud zu verlagern oder in einen Container zu verschieben. Doch so einfach ist es selten. Cloud-Migrationen und andere Modernisierungsansätze führen nicht automatisch zu dem, was für das Unternehmen am wichtigsten ist: eine bessere Anwendungsleistung.
Das Ziel der Modernisierung besteht darin, eine Anwendung von einem veralteten Bereitstellungsmodell auf ein flexibleres umzustellen, aber das ist keine Garantie für eine bessere Leistung. Und schließlich wird sich niemand für eine Geschäftsbeziehung mit Ihnen entscheiden, nur weil Sie Ihre Anwendungen in der Cloud hosten oder Container verwenden. Kunden und Endbenutzer interessieren sich nicht dafür, sondern nur, wie gut die Anwendungen laufen.
Wenn eine Anwendung unter grundlegenden Leistungsproblemen wie Speicherlecks oder Netzwerkengpässen leidet, werden diese Probleme auch nach dem Umzug in eine moderne Umgebung bestehen bleiben.
Sicherlich führen moderne Umgebungen in einigen Fällen zu einer besseren Leistung, da moderne Hosting-Strategien oft Komponenten wie Hypervisoren entfernen. Infolgedessen stehen den Anwendungen mehr Ressourcen zur Verfügung, was zu einer besseren Leistung führt. Manchmal führen die zusätzlichen Schichten in modernen Hosting-Stacks, wie Orchestratoren und Service-Meshes, dazu, dass Anwendungen in modernen Umgebungen schlechter abschneiden als in herkömmlichen.
Um eine optimale Leistung zu gewährleisten, müssen Entwickler die Nuancen von vier gängigen Strategien zur Anwendungsmodernisierung verstehen: Cloud-Migration, Containerisierung, Einführung von Microservices und Automatisierung.
Cloud-Migration
Wenn Sie eine Anwendung in die Cloud verlagern, werden Sie wahrscheinlich eine sofortige Leistungssteigerung feststellen, da die Hosting-Ressourcen nach Bedarf und praktisch unbegrenzt verfügbar sind. So kann eine Anwendung, die an einem Speicherleck leidet, in der Cloud schneller laufen, wo es keine Begrenzung der Speicherressourcen gibt. Aus der Sicht der Endbenutzer und anhand von Messwerten wie der durchschnittlichen Antwortzeit kann es so aussehen, als ob Ihre Anwendung in der Cloud besser läuft.
Aber dieser Eindruck trügt. Um auf das Beispiel mit dem Speicherleck zurückzukommen: Das Problem verschwindet nicht von selbst und Sie zahlen mehr für die zusätzlichen Speicherressourcen, die die Anwendung in der Cloud verbraucht. In diesem Fall löst die Cloud das Leistungsproblem nicht, sondern legt nur einen teuren Verband darauf und hinterlässt immer höhere technische Schulden.
Wenn sich Ihre Strategie zur Anwendungsmodernisierung auf die Cloud konzentriert, sollten Sie Kennzahlen wie die Antwortzeit nicht mit der Leistung verwechseln. Achten Sie auf die Cloud-Kosten, die weitgehend die Leistungsoptimierung widerspiegeln. Wenn Sie für Ihre Anwendung mehr für Cloud-Ressourcen ausgeben, als Sie für die Wartung On-Premises ausgeben, ist das ein Zeichen dafür, dass die Anwendung grundlegende Leistungsprobleme hat.
Containerisierung
Container stellen eine Anwendung in einer isolierten, leichtgewichtigen virtuellen Umgebung bereit, ohne den Overhead herkömmlicher virtueller Maschinen (VM), die auf Hypervisoren laufen, wodurch mehr Ressourcen für die Anwendung zur Verfügung stehen.
Das bedeutet, dass eine schlecht funktionierende Anwendung in einem Container vielleicht schneller läuft als in einer VM, da der Container-Host-Server mehr Ressourcen für die Anwendung bereitstellen kann. Letztendlich verschwenden Sie aber immer noch wertvolle Systemressourcen, wenn das Design der Anwendung ineffizient ist.
Darüber hinaus können Container neue Leistungsprobleme schaffen. Schlecht konfigurierte Ressourcenbeschränkungen für Container können dazu führen, dass containerisierte Anwendungen nicht die Ressourcen erhalten, die sie für eine effiziente Ausführung benötigen. Oder Sie weisen einen Container einem Knoten zu, der nicht über ausreichende Ressourcen für die Unterstützung des Containers verfügt. Wenn Sie diese Risiken nicht in den Griff bekommen, kann es sein, dass Ihre Anwendung innerhalb eines Containers eine schlechtere Leistung erbringt als direkt auf einem Server.
Microservices
Wenn Sie eine monolithische Anwendung so umgestalten, dass sie als Microservice in einer lose gekoppelten Architektur ausgeführt wird, profitieren die Anwendungen theoretisch von einer besseren, granularer gesteuerten Skalierbarkeit, Widerstandsfähigkeit gegen Sicherheitsverletzungen und nahtloseren Aktualisierungen.
Wenn Sie jedoch eine Legacy-Anwendung auf eine Microservices-Architektur umstellen, können einige heikle Leistungsrisiken entstehen. Im Gegensatz zu monolithischen Anwendungen sind Microservices in der Regel auf das Netzwerk angewiesen, um über APIs miteinander zu kommunizieren. Netzwerkprobleme oder schlecht geschriebene APIs können die Leistung schnell beeinträchtigen. Überlegen Sie sorgfältig, wo Sie jeden Microservice hosten und wie Sie die Kommunikation zwischen ihnen optimieren, um die Leistung zu verbessern.
Darüber hinaus führt die Komplexität der Verwaltung von Anwendungen, die auf Microservices basieren, häufig zum Einsatz zusätzlicher Tools innerhalb des Hosting-Stacks, wie beispielsweise Service-Meshes zur Verwaltung der Kommunikation zwischen Microservices und Orchestratoren zur Verwaltung von Microservices über Server-Cluster hinweg. Diese zusätzlichen Tools verbrauchen Ressourcen, was zu einer schlechteren App-Performance führen kann, da den Workloads weniger Ressourcen zur Verfügung stehen.
Außerdem müssen die Tools verwaltet werden, was die Fähigkeiten und den Aufwand der Mitarbeiter erhöht. Komplexitäts- und Eigentumsfragen können Continuous-Deployment--Prozesse verlangsamen und Innovationen verzögern, was mit Sicherheit dazu führt, dass sich Fragen zum Geschäftswert der Modernisierungsstrategie stellen.
Automatisierung
Es ist unwahrscheinlich, dass die bloße Bereitstellung von Anwendungen in modernen Umgebungen zu größeren Leistungssteigerungen führt, wenn Sie nicht auch die Verwaltung dieser Anwendungen automatisieren. Ohne automatisierte Prozesse zur Skalierung der Ressourcenzuweisung haben Anwendungen in der Regel Schwierigkeiten, die optimale Ressourcenauslastung zu erreichen.
Wenn Sie beispielsweise containerisierte Anwendungen auf einem Kubernetes-Cluster bereitstellen, ist es wahrscheinlich, dass die Gesamtressourcenanforderungen Ihrer Workloads im Laufe der Zeit schwanken werden. Wenn Sie sich bei der Änderung der Ressourcenzuweisungen für Ihre Pods auf manuelle Prozesse verlassen, sind Sie möglicherweise nicht in der Lage, die Ressourcenzuweisungen schnell genug zu aktualisieren, um sicherzustellen, dass die Anwendungen über die Ressourcen verfügen, die sie für eine optimale Leistung benötigen.
Konfigurieren Sie für Ihre Pods eine automatische Skalierung, erhalten die Anwendungen automatisch die Ressourcen, die sie für eine optimale Leistung benötigen. Außerdem vermeiden Sie Geldverschwendung, indem Sie Pods in Zeiten geringerer Nachfrage überschüssige Ressourcen zuweisen.
Das Wichtigste zum Schluss
Moderne Technologien bieten großartige Möglichkeiten zur Verbesserung der Workload-Leistung, aber sie sind kein Allheilmittel. Wenn sie falsch eingesetzt werden, haben Microservices, Container und andere moderne Lösungen einen negativen Einfluss auf die Gesamtleistung. Außerdem erhöhen sie in der Regel die Komplexität der Umgebungsverwaltung.
Diese Beispiele verdeutlichen, warum ein Unternehmen eher an einer monolithischen Anwendung als an Microservices festhalten sollte. Wenn Sie nicht über die Ressourcen verfügen, um eine Microservices-Architektur zu verwalten, oder wenn der zusätzliche Overhead moderner Umgebungen zu einer schlechteren Gesamtleistung der Anwendung führt, ist es keine Schande, bei monolithischen und lokalen Umgebungen zu glauben. Tatsächlich planen laut IDC 80 Prozent der Unternehmen, zumindest einen Teil ihrer Cloud-Workloads bis 2023 zu verlagern. Das ist ein Indikator für die Herausforderungen, die viele Unternehmen erleben, wenn sie Anwendungen in moderne Umgebungen verlagern und dabei nicht die erhofften Leistungsergebnisse erzielen.