Erstellen von Microservices in AzureBuilding microservices on Azure

Microservices sind ein beliebtes Architekturkonzept für die Erstellung robuster, hochgradig skalierbarer, unabhängig bereitstellbarer Anwendungen, die sich schnell weiterentwickeln lassen.Microservices are a popular architectural style for building applications that are resilient, highly scalable, independently deployable, and able to evolve quickly. Eine erfolgreiche Microservices-Architektur erfordert jedoch eine andere Herangehensweise an das Entwerfen und Erstellen von Anwendungen.But a successful microservices architecture requires a different approach to designing and building applications.

Eine Microservicearchitektur besteht aus einer Sammlung kleiner, autonomer Dienste.A microservices architecture consists of a collection of small, autonomous services. Jeder Dienst ist eigenständig und sollte eine einzige Geschäftsfunktion implementieren.Each service is self-contained and should implement a single business capability.

Logisches Diagramm der Microservicearchitektur

Was sind Microservices?What are microservices?

  • Microservices sind klein, unabhängig und lose gekoppelt.Microservices are small, independent, and loosely coupled. Ein Dienst kann von einem kleinen Entwicklerteam geschrieben und verwaltet werden.A single small team of developers can write and maintain a service.

  • Jeder Dienst stellt eine separate Codebasis dar, die von einem kleinen Entwicklungsteam verwaltet werden kann.Each service is a separate codebase, which can be managed by a small development team.

  • Die Dienste können unabhängig voneinander bereitgestellt werden.Services can be deployed independently. Ein Team kann einen vorhandenen Dienst aktualisieren, ohne die gesamte Anwendung neu erstellen und erneut bereitstellen zu müssen.A team can update an existing service without rebuilding and redeploying the entire application.

  • Die Dienste sind dafür zuständig, ihre eigenen Daten und ihren externen Zustand beizubehalten.Services are responsible for persisting their own data or external state. Dies ist ein Unterschied zum herkömmlichen Modell, in dem eine separate Datenschicht die Datenpersistenz verwaltet.This differs from the traditional model, where a separate data layer handles data persistence.

  • Dienste kommunizieren über klar definierte APIs miteinander.Services communicate with each other by using well-defined APIs. Die internen Implementierungsdetails jedes Diensts werden für andere Dienste verborgen.Internal implementation details of each service are hidden from other services.

  • Dienste müssen nicht den gleichen Technologiestapel, die gleichen Bibliotheken oder die gleichen Frameworks verwenden.Services don't need to share the same technology stack, libraries, or frameworks.

Abgesehen von den Diensten selbst gibt es in einer typischen Architektur für Microservices noch einige weitere Komponenten:Besides for the services themselves, some other components appear in a typical microservices architecture:

Verwaltung/Orchestrierung.Management/orchestration. Diese Komponente ist dafür zuständig, Dienste auf Knoten zu platzieren, Fehler zu ermitteln, die Dienste auf Knoten zu verteilen usw.This component is responsible for placing services on nodes, identifying failures, rebalancing services across nodes, and so forth. In der Regel handelt es sich bei dieser Komponente nicht um eine benutzerdefinierte, sondern um eine handelsübliche Technologie (z. B. Kubernetes).Typically this component is an off-the-shelf technology such as Kubernetes, rather than something custom built.

API-Gateway.API Gateway. Das API-Gateway ist der Einstiegspunkt für Clients.The API gateway is the entry point for clients. Statt die Dienste direkt aufzurufen, rufen Clients das API-Gateway auf, das den Aufruf an die geeigneten Dienste im Back-End weiterleitet.Instead of calling services directly, clients call the API gateway, which forwards the call to the appropriate services on the back end.

Ein API-Gateway bietet u. a. folgende Vorteile:Advantages of using an API gateway include:

  • Es entkoppelt die Clients von den Diensten.It decouples clients from services. Für Dienste kann eine Versionierung oder Umgestaltung durchgeführt werden, ohne dass sämtliche Clients aktualisiert werden müssen.Services can be versioned or refactored without needing to update all of the clients.

  • Dienste können nicht webfähige Messagingprotokolle verwenden, z.B. AMQP.Services can use messaging protocols that are not web friendly, such as AMQP.

  • Das API-Gateway kann weitere übergreifende Funktionen ausführen, beispielsweise Authentifizierung, Protokollierung, SSL-Terminierung und Lastenausgleich.The API Gateway can perform other cross-cutting functions such as authentication, logging, SSL termination, and load balancing.

VorteileBenefits

  • Flexibilität:Agility. Die unabhängige Bereitstellung von Microservices vereinfacht die Verwaltung von Fehlerkorrekturen und Featureveröffentlichungen.Because microservices are deployed independently, it's easier to manage bug fixes and feature releases. Sie können einen Dienst aktualisieren, ohne die gesamte Anwendung erneut bereitstellen zu müssen, und im Problemfall einen Rollback für ein Update ausführen.You can update a service without redeploying the entire application, and roll back an update if something goes wrong. In vielen herkömmlichen Anwendungen kann der gesamte Releaseprozess blockiert werden, wenn in einem Teil der Anwendung ein Fehler gefunden wird.In many traditional applications, if a bug is found in one part of the application, it can block the entire release process. Neue Features können sich verzögern, bis eine Fehlerbehebung integriert, getestet und veröffentlicht wurde.New features may be held up waiting for a bug fix to be integrated, tested, and published.

  • Kleine, fokussierte Teams:Small, focused teams. Ein Microservice muss so kompakt sein, dass er von einem einzelnen Featureteam erstellt, getestet und bereitgestellt werden kann.A microservice should be small enough that a single feature team can build, test, and deploy it. Kleinere Teams sind agiler.Small team sizes promote greater agility. Große Teams sind in der Regel weniger produktiv, da die Kommunikation langsamer ist, der Verwaltungsaufwand steigt und die Agilität abnimmt.Large teams tend be less productive, because communication is slower, management overhead goes up, and agility diminishes.

  • Kleine Codebasis.Small code base. In einer monolithischen Anwendung werden Codeabhängigkeiten im Laufe der Zeit häufig unübersichtlich, sodass zum Hinzufügen eines neuen Features Code an zahlreichen Stellen bearbeitet werden muss.In a monolithic application, there is a tendency over time for code dependencies to become tangled Adding a new feature requires touching code in a lot of places. Da sich Microservices keinen Code und keine Datenspeicher teilen, enthält eine Microservices-Architektur weniger Abhängigkeiten und vereinfacht dadurch das Hinzufügen neuer Features.By not sharing code or data stores, a microservices architecture minimizes dependencies, and that makes it easier to add new features.

  • Kombination verschiedener Technologien:Mix of technologies. Teams können sich für die Technologie entscheiden, die am besten zu ihrem Dienst passt, und eine Kombination aus geeigneten Technologiestapeln verwenden.Teams can pick the technology that best fits their service, using a mix of technology stacks as appropriate.

  • Fehlerisolation.Fault isolation. Der Ausfall eines einzelnen Microservice hat nicht den Ausfall der gesamten Anwendung zur Folge – vorausgesetzt, die Upstream-Microservices sind für eine korrekte Behandlung von Ausfällen konzipiert (beispielsweise durch Implementierung des Trennschalter-Musters).If an individual microservice becomes unavailable, it won't disrupt the entire application, as long as any upstream microservices are designed to handle faults correctly (for example, by implementing circuit breaking).

  • Skalierbarkeit.Scalability. Dienste können unabhängig skaliert werden. Dadurch lassen sich Subsysteme, die mehr Ressourcen benötigen, horizontal hochskalieren, ohne die gesamte Anwendung hochzuskalieren.Services can be scaled independently, letting you scale out subsystems that require more resources, without scaling out the entire application. Wenn Sie einen Orchestrator wie Kubernetes oder Service Fabric verwenden, können Sie Dienste dichter auf einem einzelnen Host platzieren und Ressourcen effizienter nutzen.Using an orchestrator such as Kubernetes or Service Fabric, you can pack a higher density of services onto a single host, which allows for more efficient utilization of resources.

  • Datenisolation:Data isolation. Schemaaktualisierungen sind wesentlich einfacher, da nur ein einzelner Microservice betroffen ist.It is much easier to perform schema updates, because only a single microservice is affected. Bei einer monolithischen Anwendung können sich Schemaaktualisierungen als echte Herausforderung erweisen, da verschiedene Teile der Anwendung unter Umständen die gleichen Daten nutzen, was jegliche Anpassung des Schemas zu einer riskanten Angelegenheit macht.In a monolithic application, schema updates can become very challenging, because different parts of the application may all touch the same data, making any alterations to the schema risky.

HerausforderungenChallenges

Die Vorteile von Microservices gibt es jedoch nicht umsonst.The benefits of microservices don't come for free. Im Anschluss finden Sie einige der Herausforderungen, die Sie vor der Erstellung einer Microservices-Architektur berücksichtigen sollten.Here are some of the challenges to consider before embarking on a microservices architecture.

  • Komplexität.Complexity. Eine Microserviceanwendung verfügt über mehr bewegliche Teile als die entsprechende monolithische Anwendung.A microservices application has more moving parts than the equivalent monolithic application. Jeder Dienst für sich genommen ist einfacher, aber das System als Ganzes ist komplexer.Each service is simpler, but the entire system as a whole is more complex.

  • Entwicklung und Tests.Development and testing. Das Schreiben eines kleinen Diensts, der von anderen abhängigen Diensten abhängig ist, erfordert eine andere Herangehensweise als das Schreiben einer herkömmlichen monolithischen oder mehrschichtigen Anwendung.Writing a small service that relies on other dependent services requires a different approach than a writing a traditional monolithic or layered application. Vorhandene Tools sind nicht immer für die Arbeit mit Dienstabhängigkeiten geeignet.Existing tools are not always designed to work with service dependencies. Eine Umgestaltung über Dienstgrenzen hinweg kann schwierig sein.Refactoring across service boundaries can be difficult. Das Testen von Dienstabhängigkeiten kann ebenfalls eine Herausforderung darstellen, insbesondere dann, wenn sich die Anwendung schnell weiterentwickelt.It is also challenging to test service dependencies, especially when the application is evolving quickly.

  • Unzureichende Governance.Lack of governance. Der dezentralisierte Ansatz für die Erstellung von Microservices bietet einige Vorteile, kann jedoch auch zu Problemen führen.The decentralized approach to building microservices has advantages, but it can also lead to problems. Es kann passieren, dass so viele verschiedene Sprachen und Frameworks verwendet werden, dass die Verwaltung der Anwendung schwierig wird.You may end up with so many different languages and frameworks that the application becomes hard to maintain. Es empfiehlt sich möglicherweise, einige für das gesamte Projekt gültige Standards zu etablieren, ohne die Flexibilität der Teams zu sehr einzuschränken.It may be useful to put some project-wide standards in place, without overly restricting teams' flexibility. Dies gilt insbesondere für übergreifende Funktionen wie die Protokollierung.This especially applies to cross-cutting functionality such as logging.

  • Netzwerkkonflikte und -latenz.Network congestion and latency. Die Verwendung vieler kleiner, genau abgestimmter Dienste kann zu einer vermehrten Kommunikation zwischen den Diensten führen.The use of many small, granular services can result in more interservice communication. Wenn die Kette der Dienstabhängigkeiten zu lang wird (Dienst A ruft B auf, der wiederum C aufruft...), kann die zusätzliche Latenz zu einem Problem werden.Also, if the chain of service dependencies gets too long (service A calls B, which calls C...), the additional latency can become a problem. Beim Entwurf der APIs sollten Sie größte Umsicht walten lassen.You will need to design APIs carefully. Vermeiden Sie überladene APIs, denken Sie über Serialisierungsformate nach, und suchen Sie nach Stellen, an denen Sie asynchrone Kommunikationsmuster verwenden können.Avoid overly chatty APIs, think about serialization formats, and look for places to use asynchronous communication patterns.

  • Datenintegrität.Data integrity. Jeder Microservice ist für die eigene Datenpersistenz zuständig.With each microservice responsible for its own data persistence. Dadurch kann die Sicherstellung der Datenkonsistenz zu einer Herausforderung werden.As a result, data consistency can be a challenge. Implementieren Sie die letztliche Konsistenz, wo immer möglich.Embrace eventual consistency where possible.

  • Verwaltung.Management. Für den erfolgreichen Einsatz von Microservices ist eine ausgereifte DevOps-Kultur erforderlich.To be successful with microservices requires a mature DevOps culture. Die korrelierte Protokollierung über Dienste hinweg kann eine Herausforderung sein.Correlated logging across services can be challenging. In der Regel muss die Protokollierung mehrere Dienstaufrufe für einen einzigen Benutzervorgang korrelieren.Typically, logging must correlate multiple service calls for a single user operation.

  • Versionsverwaltung.Versioning. Dienstupdates dürfen nicht zu Unterbrechungen bei abhängigen Diensten führen.Updates to a service must not break services that depend on it. Dienste können jederzeit aktualisiert werden, daher könnten ohne sorgfältigen Entwurf Probleme mit der Abwärts- oder Aufwärtskompatibilität entstehen.Multiple services could be updated at any given time, so without careful design, you might have problems with backward or forward compatibility.

  • Kompetenz.Skillset. Microservices sind Systeme mit einem hohen Maß an Verteilung.Microservices are highly distributed systems. Beurteilen Sie sehr genau, ob das Team über die notwendige Kompetenz und Erfahrung verfügt, erfolgreiche Arbeit zu leisten.Carefully evaluate whether the team has the skills and experience to be successful.

Prozess zum Erstellen einer Microservices-ArchitekturProcess for building a microservices architecture

In den hier aufgeführten Artikeln wird ein Strukturierungskonzept zum Entwerfen, Erstellen und Betreiben einer Microservicearchitektur vorgestellt.The articles listed here present a structured approach for designing, building, and operating a microservices architecture.

Domänenanalyse.Domain analysis. Nutzen Sie die Domänenanalyse, um Ihre Microservice-Grenzen zu definieren und häufige Probleme zu vermeiden.To avoid some common pitfalls when designing microservices, use domain analysis to define your microservice boundaries. Folgen Sie diesen Schritten:Follow these steps:

  1. Verwenden der Domänenanalyse zur Modellierung von MicroservicesUse domain analysis to model microservices.
  2. Entwerfen von Microservices im Rahmen der taktischen DDD-PhaseUse tactical DDD to design microservices.
  3. Identifizieren von Microservice-GrenzenIdentify microservice boundaries.

Entwerfen der DiensteDesign the services. Für Microservices ist in Bezug auf das Entwerfen und Erstellen von Anwendungen ein anderer Ansatz erforderlich.Microservices require a different approach to designing and building applications. Weitere Informationen finden Sie unter Entwerfen einer Microservices-Architektur.For more information, see Designing a microservices architecture.

Betrieb in der Produktion.Operate in production. Microservices-Architekturen sind verteilt, daher benötigen Sie zuverlässige Vorgänge für die Bereitstellung und Überwachung.Because microservices architectures are distributed, you must have robust operations for deployment and monitoring.