Migrieren einer älteren Webanwendung zu einer API-basierten Architektur in AzureMigrating a legacy web application to an API-based architecture on Azure

Ein E-Commerce-Unternehmen in der Reisebranche modernisiert seinen bestehenden browserbasierten Softwarestapel.An e-commerce company in the travel industry is modernizing their legacy browser-based software stack. Der vorhandene Stapel ist größtenteils monolithisch, das Unternehmen hat jedoch einige SOAP-basierte HTTP-Dienste, die aus einem aktuellen Projekt stammen.While their existing stack is mostly monolithic, some SOAP-based HTTP services exist from a recent project. Das Unternehmen erwägt, zusätzliche Einnahmequellen zu erschließen, um Teile des von ihm entwickelten internen geistigen Eigentums gewinnbringend zu nutzen.They are considering the creation of additional revenue streams to monetize some of the internal intellectual property that's been developed.

Zu den Zielen für das Projekt zählen der Abbau technischer Schulden, die Verbesserung der laufenden Wartung und die Beschleunigung der Featureentwicklung mit weniger Regressionsfehlern.Goals for the project include addressing technical debt, improving ongoing maintenance, and accelerating feature development with fewer regression bugs. Bei dem Projekt wird zur Vermeidung von Risiken ein iterativer Prozess eingesetzt, und einige Schritte werden parallel ausgeführt:The project will use an iterative process to avoid risk, with some steps performed in parallel:

  • Das Entwicklungsteam wird das Anwendungs-Back-End modernisieren, das aus auf VMs gehosteten relationalen Datenbanken besteht.The development team will modernize the application back end, which is composed of relational databases hosted on VMs.
  • Das interne Entwicklungsteam wird neue Geschäftsfunktionen entwickeln, die über neue HTTP-APIs verfügbar gemacht werden.The in-house development team will write new business functionality that will be exposed over new HTTP APIs.
  • Ein externes Entwicklungsteam wird eine neue browserbasierte Benutzeroberfläche erstellen, die in Azure gehostet wird.A contract development team will build a new browser-based UI, which will be hosted in Azure.

Neue Anwendungsfeatures werden in mehreren Phasen bereitgestellt.New application features will be delivered in stages. Diese Features werden die vorhandene (lokal gehostete) browserbasierte Client/Server-Benutzeroberfläche, die gegenwärtig für das E-Commerce-Geschäft des Unternehmens genutzt wird, schrittweise ersetzen.These features will gradually replace the existing browser-based client-server UI functionality (hosted on-premises) that powers their e-commerce business today.

Das Managementteam möchte unnötige Modernisierungen vermeiden.The management team does not want to modernize unnecessarily. Außerdem möchte es die Kontrolle über den Umfang und die Kosten des Projekts behalten.They also want to maintain control of scope and costs. Aus diesem Grund hat sich das Unternehmen entschieden, die vorhandenen SOAP-HTTP-Dienste beizubehalten.To do this, they have decided to preserve their existing SOAP HTTP services. Zudem sollen Änderungen an der vorhandenen Benutzeroberfläche auf ein Minimum beschränkt werden.They also intend to minimize changes to the existing UI. Mit Azure API Management (APIM) können viele der Anforderungen und Auflagen des Projekts erfüllt werden.Azure API Management (APIM) can be used to address many of the project's requirements and constraints.

AufbauArchitecture

Architekturdiagramm

Die neue Benutzeroberfläche wird als PaaS-Anwendung (Platform-as-a-Service) in Azure gehostet und ist sowohl von vorhandenen als auch neuen HTTP-APIs abhängig.The new UI will be hosted as a platform as a service (PaaS) application on Azure, and will depend on both existing and new HTTP APIs. Diese APIs werden einen besseren Satz von Schnittstellen enthalten, die die Leistung verbessern, die Integration vereinfachen und zukünftige Erweiterbarkeit unterstützen.These APIs will ship with a better-designed set of interfaces enabling better performance, easier integration, and future extensibility.

Komponenten und SicherheitComponents and Security

  1. Die vorhandene lokale Webanwendung wird die vorhandenen lokalen Webdienste weiterhin direkt nutzen.The existing on-premises web application will continue to directly consume the existing on-premises web services.
  2. Aufrufe von der vorhandenen Web-App an die vorhandenen HTTP-Dienste bleiben unverändert.Calls from the existing web app to the existing HTTP services will remain unchanged. Diese Aufrufe erfolgen intern im Unternehmensnetzwerk.These calls are internal to the corporate network.
  3. Eingehende Aufrufe werden von Azure an die vorhandenen internen Dienste gesendet:Inbound calls are made from Azure to the existing internal services:
  4. Für die neue API gilt Folgendes:The new API:
    • Die neue API wird nur über die APIM-Instanz verfügbar gemacht, die die API-Fassade bereitstellt.Is surfaced only through the APIM instance, which will provide the API facade. Auf die neue API wird nicht direkt zugegriffen.The new API won't be accessed directly.
    • Die neue API wird als eine Azure-PaaS-Web-API-App entwickelt und veröffentlicht.Is developed and published as an Azure PaaS Web API App.
    • Die neue API wird auf die Whitelist gesetzt (über Web-App-Einstellungen), um nur die virtuelle IP (VIP) der APIM-Instanz zu akzeptieren.Is white-listed (via Web App settings) to accept only the APIM VIP.
    • Die neue API wird mit aktiviertem sicheren Transport/SSL-Protokoll in Azure-Web-Apps gehostet.Is hosted in Azure Web Apps with Secure Transport/SSL turned on.
    • Für die neue API ist die Autorisierung aktiviert. Diese wird von Azure App Service mithilfe von Azure Active Directory und OAuth 2 bereitgestellt.Has authorization enabled, provided by the Azure App Service using Azure Active Directory and OAuth 2.
  5. Die neue browserbasierte Webanwendung ist für die vorhandene HTTP-API und die neue API von der Azure API Management-Instanz abhängig.The new browser-based web application will depend on the Azure API Management instance for both the existing HTTP API and the new API.

Die APIM-Instanz wird so konfiguriert, dass sie die älteren HTTP-Dienste einem neuen API-Vertrag zuordnet.The APIM instance will be configured to map the legacy HTTP services to a new API contract. Der neuen Webbenutzeroberfläche ist die Integration einer Gruppe von älteren Diensten/APIs und neuen APIs daher nicht bekannt.By doing this, the new Web UI is unaware of the integration with a set of legacy services/APIs and new APIs. Das Projektteam wird in der Zukunft schrittweise Funktionen zu den neuen APIs portieren und die ursprünglichen Dienste außer Betrieb setzen.In the future, the project team will gradually port functionality to the new APIs and retire the original services. Diese Änderungen werden in der APIM-Konfiguration vorgenommen, sodass die Front-End-Benutzeroberfläche davon nicht betroffen ist und Neuentwicklungen vermieden werden.These changes will be handled within APIM configuration, leaving the front-end UI unaffected and avoiding redevelopment work.

AlternativenAlternatives

  • Wenn die Organisation eine Migration ihrer vollständigen Infrastruktur (einschließlich der VMs, die ältere Anwendungen hosten) zu Azure planen würde, wäre APIM dennoch eine gute Option, da der Dienst als Fassade für alle adressierbaren HTTP-Endpunkte fungieren kann.If the organization was planning to move their infrastructure entirely to Azure, including the VMs hosting the legacy applications, then APIM would still be a great option since it can act as a facade for any addressable HTTP endpoint.
  • Wenn sich der Kunde dafür entschieden hätte, die vorhandenen Endpunkte privat zu halten und nicht öffentlich verfügbar zu machen, könnte die API Management-Instanz mit einem virtuellen Azure-Netzwerk (VNET) verknüpft werden:If the customer had decided to keep the existing endpoints private and not expose them publicly, their API Management instance could be linked to an Azure Virtual Network (VNet):
  • Die API Management-Instanz kann privat gehalten werden, indem sie im internen Modus bereitgestellt wird.The API Management instance can be kept private by deploying the API Management instance in Internal mode. Die Bereitstellung könnte dann mit einer Azure Application Gateway-Instanz verwendet werden, um den öffentlichen Zugriff für einige APIs zu ermöglichen, während andere APIs weiterhin nur intern zugänglich sind.The deployment could then be used with an Azure Application Gateway to enable public access for some APIs while others remain internal. Weitere Informationen finden Sie unter Verbinden von API Management mit einem VNet im internen Modus.For more information, see Connecting APIM in internal mode to a VNet.

Hinweis

Allgemeine Informationen zum Verbinden von API Management mit einem VNET finden Sie hier.For general information on connecting API Management to a VNet, see here.

Verfügbarkeit und SkalierbarkeitAvailability and scalability

Bereitstellen des SzenariosDeploy the scenario

Der erste Schritt ist das Erstellen einer Azure API Management-Instanz im Portal.To get started, create an Azure API Management instance in the portal.

Alternativ können Sie eine der vorhandenen Azure Resource Manager-Schnellstartvorlagen auswählen, die für Ihren spezifischen Anwendungsfall geeignet ist.Alternatively, you can choose from an existing Azure Resource Manager quickstart template that aligns to your specific use case.

PreisePricing

API Management ist in vier Tarifen erhältlich: Developer, Basic, Standard und Premium.API Management is offered in four tiers: developer, basic, standard, and premium. Ausführliche Informationen zu den Unterschieden zwischen den einzelnen Tarifen finden Sie in der API Management-Preisübersicht.You can find detailed guidance on the difference in these tiers at the Azure API Management pricing guidance here.

Kunden können API Management skalieren, indem sie Einheiten hinzufügen und entfernen.Customers can scale API Management by adding and removing units. Die Kapazität jeder Einheit ist vom Tarif abhängig.Each unit has capacity that depends on its tier.

Hinweis

Der Developer-Tarif kann zur Evaluierung der API Management-Funktionen verwendet werden.The Developer tier can be used for evaluation of the API Management features. Der Developer-Tarif sollte nicht für die Produktion verwendet werden.The Developer tier should not be used for production.

Im Azure-Preisrechner können Sie die voraussichtlichen Kosten für Ihre speziellen Bereitstellungsanforderungen ermitteln, indem Sie die Anzahl von Skalierungseinheiten und App Service-Instanzen ändern.To view projected costs and customize to your deployment needs, you can modify the number of scale units and App Service instances in the Azure Pricing Calculator.

Zu Azure API Management stehen Ihnen eine umfangreiche Dokumentation und Referenzartikel zur Verfügung.Review the extensive Azure API Management documentation and reference articles.