Gründe für einen Microservices-Ansatz zum Erstellen von AnwendungenWhy use a microservices approach to building applications

Für Softwareentwickler ist das Einbeziehen einer Anwendung in Komponententeile nichts Neues.For software developers, factoring an application into component parts is nothing new. In der Regel wird ein mehrstufiger Ansatz mit einem Back-End-Speicher, Geschäftslogik auf der mittleren Ebene und einer Front-End-Benutzeroberfläche verwendet.Typically, a tiered approach is used, with a back-end store, middle-tier business logic, and a front-end user interface (UI). Was sich im Laufe der letzten Jahre geändert hat, ist die Tatsache, dass Entwickler verteilte Anwendungen für die Cloud erstellen.What has changed over the last few years is that developers are building distributed applications for the cloud.

Veränderte geschäftliche Anforderungen sind:Here are some changing business needs:

  • Ein Dienst, der erstellt und bedarfsorientiert betrieben wird, um Kunden in neuen geografischen Regionen zu erreichenA service that's built and operated at scale to reach customers in new geographic regions.
  • Schnellere Bereitstellung von Features und Funktionen, damit flexibel auf Kundenanforderungen reagiert werden kannFaster delivery of features and capabilities to respond to customer demands in an agile way.
  • Verbesserte Ressourcenauslastung zur KostenreduzierungImproved resource utilization to reduce costs.

Diese geschäftlichen Anforderungen beeinflussen, wie wir Anwendungen erstellen.These business needs are affecting how we build applications.

Weitere Informationen zum Azure-Ansatz in Bezug auf Microservices finden Sie unter Microservices: An application revolution powered by the cloud (Microservices: Eine cloudbasierte Anwendungsrevolution).For more information about the Azure approach to microservices, see Microservices: An application revolution powered by the cloud.

Vergleich von monolithischem und Microservice-EntwurfMonolithic vs. microservices design approach

Anwendungen entwickeln sich im Laufe der Zeit weiter.Applications evolve over time. Erfolgreiche Anwendungen entwickeln sich weiter, indem Sie für die Benutzer nützlich sind.Successful applications evolve by being useful to people. Nicht erfolgreiche Anwendungen werden nicht weiterentwickelt und schließlich als veraltet markiert.Unsuccessful applications don't evolve and are eventually deprecated. Es stellt sich nun folgende Frage: Wie viel wissen Sie über Ihre heutigen Anforderungen und deren zukünftige Entwicklung?Here's the question: how much do you know about your requirements today and what they'll be in the future? Angenommen, Sie erstellen eine Berichterstellungsanwendung für eine Abteilung in Ihrem Unternehmen.For example, let's say you're building a reporting application for a department in your company. Sie sind sicher, dass die Anwendung nur innerhalb Ihres Unternehmens verwendet wird und die Berichte nicht lange aufbewahrt werden.You're sure the application applies only within the scope of your company and that the reports won't be kept long. In diesem Fall wählen Sie einen anderen Ansatz als beispielsweise bei der Erstellung eines Diensts zur Bereitstellung von Videoinhalten für Millionen von Kunden.Your approach will be different from that of, say, building a service that delivers video content to tens of millions of customers.

In einigen Fällen ist die Fertigstellung als Proof of Concept ausschlaggebend.Sometimes, getting something out the door as a proof of concept is the driving factor. Sie wissen, dass die Anwendung später umgestaltet werden kann.You know the application can be redesigned later. Es ist nicht sehr sinnvoll, zu viel Engineeringaufwand für etwas zu betreiben, das niemals verwendet wird.There's little point in over-engineering something that never gets used. Wenn Unternehmen für die Cloud entwickeln, werden aber auch Wachstum und gute Auslastung erwartet.On the other hand, when companies build for the cloud, the expectation is growth and usage. Wachstums- und Skalierungsanforderungen sind jedoch nicht vorhersagbar.Growth and scale are unpredictable. Am liebsten würden wir schnell Prototypen erstellen können und gleichzeitig die Sicherheit haben, dass wir uns damit auf dem Weg zu zukünftigem Erfolg befinden.We want to prototype quickly while also knowing that we're on a path that can handle future success. Dies entspricht dem schlanken Startup-Ansatz: Erstellen, Messen, Lernen und Wiederholen.This is the lean startup approach: build, measure, learn, and iterate.

Während der Client/Server-Ära haben wir eher Anwendungen mit mehreren Ebenen erstellt, indem auf jeder Ebene spezielle Technologie verwendet wurde.During the client/server era, we tended to focus on building tiered applications by using specific technologies in each tier. Hierfür hat sich der Begriff monolithische Anwendung etabliert.The term monolithic application has emerged to describe these approaches. Die Schnittstellen befanden sich meist zwischen den Ebenen, und innerhalb der einzelnen Ebenen wurde ein Entwurf mit engerer Kopplung zwischen den Komponenten genutzt.The interfaces tended to be between the tiers, and a more tightly coupled design was used between components within each tier. Die Entwickler haben also Klassen entworfen und eingebunden, die zu Bibliotheken kompiliert und über einige ausführbare und DLL-Dateien verknüpft wurden.Developers designed and factored classes that were compiled into libraries and linked together into a few executable files and DLLs.

Dieser monolithische Entwurfsansatz hat auch Vorteile.There are benefits to a monolithic design approach. Monolithische Anwendungen sind häufig einfacher zu entwerfen und verfügen über schnellere Aufrufe zwischen Komponenten, da diese Aufrufe oft per prozessübergreifender Kommunikation (Interprocess Communication, IPC) durchgeführt werden.Monolithic applications are often simpler to design, and calls between components are faster because these calls are often over interprocess communication (IPC). Außerdem wird jeweils ein einzelnes Produkt getestet, was in Bezug auf den Personalaufwand meist effizienter ist.Also, everyone tests a single product, which tends to be a more efficient use of human resources. Der Nachteil ist, dass eine enge Kopplung zwischen mehrstufigen Ebenen entsteht und Sie einzelne Komponenten nicht skalieren können.The downside is that there's a tight coupling between tiered layers, and you can't scale individual components. Wenn Sie Probleme beheben oder Upgrades durchführen möchten, müssen Sie warten, bis andere Personen ihre Tests abgeschlossen haben.If you need to do fixes or upgrades, you have to wait for others to finish their testing. Agilität ist schwieriger umzusetzen.It's harder to be agile.

Microservices stellen die Antwort auf diese Nachteile dar, und sie sind enger an die oben beschriebenen geschäftlichen Anforderungen angelehnt.Microservices address these downsides and more closely align with the preceding business requirements. Aber auch sie haben sowohl Vor- als auch Nachteile.But they also have both benefits and liabilities. Der Vorteil von Microservices ist, dass jeder Microservice normalerweise einfachere Geschäftsfunktionen kapselt, die Sie einzeln hoch- und herunterskalieren, testen, bereitstellen und verwalten können.The benefits of microservices are that each one typically encapsulates simpler business functionality, which you can scale up or down, test, deploy, and manage independently. Ein wichtiger Vorteil des Microservice-Ansatzes ist, dass Teams stärker durch Geschäftsszenarien als durch Technologie beeinflusst werden.One important benefit of a microservices approach is that teams are driven more by business scenarios than by technology. Kleinere Teams entwickeln basierend auf einem Kundenszenario unter Verwendung beliebiger Technologien ihrer Wahl einen Microservice.Smaller teams develop a microservice based on a customer scenario and use any technologies that they want to use.

Anders ausgedrückt: Das Unternehmen muss Technologie nicht zur Verwaltung von Microserviceanwendungen standardisieren.In other words, the organization doesn’t need to standardize tech to maintain microservice applications. Einzelne für Dienste zuständige Teams können die Vorgehensweise wählen, die aufgrund des Know-hows im Team sinnvoll oder am besten zur Behebung des Problems geeignet ist.Individual teams that own services can do what makes sense for them based on team expertise or what’s most appropriate to solve the problem. In der Praxis ist eine Gruppe empfohlener Technologien vorzuziehen, z. B. ein bestimmter NoSQL-Speicher oder ein Webanwendungsframework.In practice, a set of recommended technologies, like a particular NoSQL store or web application framework, is preferable.

Der Nachteil von Microservices sind die Verwaltung einer höheren Anzahl separater Entitäten und die höhere Komplexität von Bereitstellung und Versionsverwaltung.The downside of microservices is that you have to manage more separate entities and deal with more complex deployments and versioning. Der Netzwerkdatenverkehr zwischen Microservices und auch die entsprechenden Netzwerklatenzen nehmen zu.Network traffic between the microservices increases, as do the corresponding network latencies. Eine große Anzahl von sehr präzisen Diensten mit vielen Einzelaufrufen kann in Bezug auf die Leistung schnell zu einem Albtraum werden.Lots of chatty, granular services can cause a performance nightmare. Und ohne Tools zum Anzeigen dieser Abhängigkeiten ist es nicht einfach, das gesamte System zu überblicken.Without tools to help you view these dependencies, it's hard to see the whole system.

Der Microservice-Ansatz funktioniert aufgrund von Standards. Anstatt starre Verträge zu nutzen, wird angegeben, wie kommuniziert wird, und es werden nur die Dinge toleriert, die Sie von einem Dienst benötigen.Standards make the microservices approach work by specifying how to communicate and tolerating only the things you need from a service, rather than rigid contracts. Da Dienste unabhängig voneinander aktualisiert werden, ist es wichtig, diese Verträge im Voraus im Entwurf festzulegen.It's important to define these contracts up front in the design because services update independently of each other. „Serviceorientierte Architektur (SOA) mit feiner Abstufung“ ist eine weitere Beschreibung, die für das Entwerfen mit einem Microservice-Ansatz gilt.Another description coined for designing with a microservices approach is “fine-grained service-oriented architecture (SOA).”

Im einfachsten Fall geht es beim Microservice-Entwurfsansatz um einen entkoppelten Verbund von Diensten, an denen Änderungen unabhängig voneinander vorgenommen werden und für die bestimmte Kommunikationsstandards vereinbart sind.At its simplest, the microservices design approach is about a decoupled federation of services, with independent changes to each and agreed-upon standards for communication.

Mit der steigenden Zahl von Cloudanwendungen haben immer mehr Entwickler festgestellt, dass diese Zerlegung der gesamten Anwendung in unabhängige Dienste für bestimmte Szenarien langfristig den besseren Ansatz darstellt.As more cloud applications are produced, people have discovered that this decomposition of the overall application into independent, scenario-focused services is a better long-term approach.

Vergleich zwischen Ansätzen zur AnwendungsentwicklungComparison between application development approaches

Service Fabric-Plattform: Anwendungsentwicklung

  1. Eine monolithische Anwendung enthält domänenspezifische Funktionen und ist normalerweise in Funktionsebenen unterteilt, z. B. Web, Geschäft und Daten.A monolithic application contains domain-specific functionality and is normally divided into functional layers like web, business, and data.

  2. Sie skalieren monolithische Anwendungen, indem Sie sie über mehrere Server, VMs bzw. Container hinweg klonen.You scale a monolithic application by cloning it on multiple servers/virtual machines/containers.

  3. Bei einer Microservice-Anwendung werden die Funktionen auf separate kleinere Dienste aufgeteilt.A microservice application separates functionality into separate smaller services.

  4. Beim Microservice-Ansatz erfolgt das horizontale Hochskalieren, indem jeder Dienst unabhängig bereitgestellt wird und Instanzen dieser Dienste über Server, VMs bzw. Container hinweg erstellt werden.The microservices approach scales out by deploying each service independently, creating instances of these services across servers/virtual machines/containers.

Das Entwerfen eines Microservice-Ansatzes ist kein Patentrezept für alle Projekte. Dieser Ansatz ist jedoch enger an die oben beschriebenen geschäftlichen Ziele angelehnt.Designing with a microservices approach isn't appropriate for all projects, but it does align more closely with the business objectives described earlier. Die anfängliche Verwendung eines monolithischen Ansatzes kann sinnvoll sein, wenn Sie wissen, dass Sie später die Gelegenheit haben, den Code zu überarbeiten und in einen Microservice-Entwurf zu ändern.Starting with a monolithic approach might make sense if you know you'll have the opportunity to rework the code later into a microservices design. Normalerweise beginnen Sie mit einer monolithischen Anwendung und teilen diese dann nach und nach in Phasen auf. Sie beginnen hierbei mit den Funktionsbereichen, die besser skalierbar oder flexibler werden sollen.More commonly, you begin with a monolithic application and slowly break it up in stages, starting with the functional areas that need to be more scalable or agile.

Der Microservice-Ansatz bedeutet, dass sich Ihre Anwendung aus vielen kleinen Diensten zusammensetzt.When you use a microservices approach, you compose your application of many small services. Diese Dienste werden in Containern ausgeführt, die auf einem Cluster mit Computern bereitgestellt werden.These services run in containers that are deployed across a cluster of machines. Kleinere Teams entwickeln Dienste für bestimmte Szenarien. Jeder dieser Dienste wird einzeln getestet, versioniert, bereitgestellt und skaliert, um die gesamte Anwendung weiterzuentwickeln.Smaller teams develop a service that focuses on a scenario and independently test, version, deploy, and scale each service so the entire application can evolve.

Was ist ein Microservice?What is a microservice?

Es gibt verschiedene Definitionen von Microservices.There are different definitions of microservices. Die meisten der folgenden Merkmale von Microservices sind jedoch allgemein anerkannt:But most of these characteristics of microservices are widely accepted:

  • Kapseln eines Kunden- oder GeschäftsszenariosEncapsulate a customer or business scenario. Welches Problem möchten Sie beheben?What problem are you solving?
  • Durchführung der Entwicklung in einem kleinen Engineering-TeamDeveloped by a small engineering team.
  • Verwendung einer beliebigen Programmiersprache und eines beliebigen FrameworksWritten in any programming language, using any framework.
  • Zusammensetzung aus Code und (optional) einem Zustand, die beide unabhängig voneinander versioniert, bereitgestellt und skaliert werdenConsist of code, and optionally state, both of which are independently versioned, deployed, and scaled.
  • Interaktion mit anderen Microservices über gut definierte Schnittstellen und ProtokolleInteract with other microservices over well-defined interfaces and protocols.
  • Eindeutige Namen (URLs), die zum Auflösen ihres Speicherorts verwendet werdenHave unique names (URLs) that are used to resolve their location.
  • Aufrechterhaltung der Konsistenz und Verfügbarkeit beim Auftreten von FehlernRemain consistent and available in the presence of failures.

Zusammengefasst:To sum that up:

Microservice-Anwendungen bestehen aus kleinen, einzeln versionierten und skalierbaren Diensten für Kunden, die über Standardprotokolle mit gut definierten Schnittstellen miteinander kommunizieren.Microservice applications are composed of small, independently versioned, and scalable customer-focused services that communicate with each other over standard protocols with well-defined interfaces.

Verwendung einer beliebigen Programmiersprache und eines beliebigen FrameworksWritten in any programming language, using any framework

Als Entwickler sollten Sie frei wählen können, welche Sprache oder welches Framework Sie verwenden möchten, und zwar je nach Ihren Fähigkeiten bzw. den Anforderungen des Diensts.As developers, we want to be free to choose a language or framework, depending on our skills and the needs of the service that we're creating. Bei einigen Diensten kann es sein, dass die Leistungsvorteile von C++ überwiegen.For some services, you might value the performance benefits of C++ above anything else. Bei anderen steht eventuelle die vereinfachte verwaltete Entwicklung in C# oder Java im Vordergrund.For others, the ease of managed development that you get from C# or Java might be more important. In einigen Fällen müssen Sie unter Umständen eine bestimmte Partnerbibliothek, Datenspeichertechnologie oder Methode zum Verfügbarmachen des Diensts für Clients verwenden.In some cases, you might need to use a specific partner library, data storage technology, or method for exposing the service to clients.

Nachdem Sie sich für eine Technologie entschieden haben, müssen Sie sich mit der Betriebs- oder Lebenszyklusverwaltung und der Skalierung des Diensts befassen.After you choose a technology, you need to consider the operational or life-cycle management and scaling of the service.

Code und Zustand mit unabhängiger Versionierung, Bereitstellung und SkalierungAllows code and state to be independently versioned, deployed, and scaled

Unabhängig davon, wie Sie Ihre Microservices schreiben, sollten der Code und optional der Zustand getrennt voneinander bereitgestellt, aktualisiert und skaliert werden.No matter how you write your microservices, the code, and optionally the state, should independently deploy, upgrade, and scale. Dies ist ein schwieriges Problem, das gelöst werden muss, da es hierbei um die Wahl der Technologie geht.This problem is hard to solve because it comes down to your choice of technologies. Im Hinblick auf die Skalierung stellt das Verständnis der Partitionierung (Sharding) von Code und Zustand eine Herausforderung dar.For scaling, understanding how to partition (or shard) both the code and the state is challenging. Wenn für den Code und den Zustand unterschiedliche Technologien verwendet werden, was heutzutage häufiger der Fall ist, müssen die Bereitstellungsskripts für Ihren Microservice beide skalieren können.When the code and state use different technologies, which is common today, the deployment scripts for your microservice need to be able to scale them both. Bei dieser Trennung geht es auch um die Flexibilität, nur einige Microservices aktualisieren zu können, ohne dass alle auf einmal aktualisiert werden müssen.This separation is also about agility and flexibility, so you can upgrade some of the microservices without having to upgrade all of them at once.

Kehren wir zum Vergleich von monolithischem und Microservice-Ansatz zurück.Let's return to our comparison of the monolithic and microservices approaches for a moment. Dieses Diagramm zeigt die Unterschiede bei den Ansätzen für die Zustandsspeicherung:This diagram shows the differences in the approaches to storing state:

Speichern des Zustands für die beiden AnsätzeState storage for the two approaches

Service Fabric-Plattform: Zustandsspeicherung

Der monolithische Ansatz auf der linken Seite enthält einen Singleton und die spezifischen Technologieebenen.The monolithic approach, on the left, has a single database and tiers of specific technologies.

Der Microservice-Ansatz auf der rechten Seite verfügt über einen Graphen mit verbundenen Microservices, wobei der Zustand meist auf den Microservice beschränkt ist und verschiedene Technologien verwendet werden.The microservices approach, on the right, has a graph of interconnected microservices where state is typically scoped to the microservice and various technologies are used.

Bei einem monolithischen Ansatz wird von der Anwendung in der Regel eine Einzeldatenbank genutzt.In a monolithic approach, the application typically uses a single database. Der Vorteil der Verwendung einer Datenbank besteht darin, dass ein einzelner Speicherort verwendet und so die Bereitstellung vereinfacht wird.The advantage to using one database is that it's in a single location, which makes it easy to deploy. Jede Komponente kann eine einzelne Tabelle zum Speichern des Zustands enthalten.Each component can have a single table to store its state. Die Teams müssen den Zustand strikt trennen. Dies ist eine ziemliche Herausforderung.Teams need to strictly separate state, which is a challenge. Die Versuchung, einer vorhandenen Kundentabelle eine neue Spalte hinzuzufügen, Tabellen zu verknüpfen und Abhängigkeiten auf Speicherebene zu erstellen, ist natürlich groß.Inevitably, someone will be tempted to add a column to an existing customer table, do a join between tables, and create dependencies at the storage layer. Wenn dies passiert, können Sie einzelne Komponenten nicht skalieren.After this happens, you can't scale individual components.

Beim Microservice-Ansatz verwaltet und speichert jeder Dienst seinen eigenen Zustand.In the microservices approach, each service manages and stores its own state. Jeder Dienst ist dafür verantwortlich, Code und Zustand gemeinsam zu skalieren, um die Anforderungen des Diensts zu erfüllen.Each service is responsible for scaling both code and state together to meet the demands of the service. Dadurch ergibt sich allerdings der Nachteil, dass Sie zum Erstellen von Sichten oder Abfragen für die Daten Ihrer Anwendung verschiedene Zustandsspeicher abfragen müssen.A downside is that when you need to create views, or queries, of your application’s data, you need to query across multiple state stores. Normalerweise wird dieses Problem mit einem separaten Microservice gelöst, mit dem eine Sicht für eine Sammlung von Microservices erstellt wird.This problem is typically solved by a separate microservice that builds a view across a collection of microservices. Falls Sie für die Daten mehrere Ad-hoc-Abfragen durchführen müssen, sollten Sie für jeden Microservice erwägen, dessen Daten für die Offlineanalyse in einen Data Warehousing-Dienst zu schreiben.If you need to run multiple impromptu queries on the data, you should consider writing each microservice’s data to a data warehousing service for offline analytics.

Microservices sind versionsspezifisch.Microservices are versioned. Es ist möglich, verschiedene Versionen eines Microservice parallel auszuführen.It's possible for different versions of a microservice to run side by side. Bei einer neueren Version eines Microservice kann während des Upgrades ein Fehler auftreten, sodass ein Rollback auf eine frühere Version erforderlich ist.A newer version of a microservice could fail during an upgrade and need to be rolled back to an earlier version. Die Versionsverwaltung ist zudem für die Durchführung von A/B-Tests hilfreich, bei denen unterschiedliche Benutzer unterschiedliche Versionen des Diensts erhalten.Versioning is also helpful for A/B testing, where different users experience different versions of the service. Es ist beispielsweise üblich, einen Microservice für eine bestimmte Gruppe von Kunden zu aktualisieren, um neue Funktionen vor dem größeren Rollout zu testen.For example, it's common to upgrade a microservice for a specific set of customers to test new functionality before rolling it out more widely.

Interagiert mit anderen Microservices über gut definierte Schnittstellen und ProtokolleInteracts with other microservices over well-defined interfaces and protocols

In den letzten zehn Jahren wurden zahlreiche Informationen veröffentlicht, in denen die Kommunikationsmuster in dienstorientierten Architekturen beschrieben werden.Over the past 10 years, extensive information has been published describing communication patterns in service-oriented architectures. Im Allgemeinen wird für die Dienstkommunikation ein REST-Ansatz mit HTTP- und TCP-Protokollen sowie XML oder JSON als Serialisierungsformat eingesetzt.Generally, service communication uses a REST approach with HTTP and TCP protocols and XML or JSON as the serialization format. Aus Sicht der Benutzeroberfläche geht es hierbei um den Webdesignansatz.From an interface perspective, it's about taking a web design approach. Es hindert Sie aber nichts daran, binäre Protokolle oder eigene Datenformate zu verwenden.But nothing should stop you from using binary protocols or your own data formats. Denken Sie aber daran, dass die Verwendung Ihrer Microservices für Benutzer schwieriger ist, wenn diese Protokolle und Formate nicht öffentlich verfügbar sind.Just be aware that people will have a harder time using your microservices if these protocols and formats aren't openly available.

Eindeutiger Name (URL), der zum Auflösen des Speicherorts verwendet wirdHas a unique name (URL) used to resolve its location

Ihr Microservice muss unabhängig vom Ort der Ausführung adressierbar sein.Your microservice needs to be addressable wherever it's running. Wenn Sie anfangen, sich Gedanken über Computer und den Ort der Ausführung bestimmter Microservices zu machen, führt dies schnell zu Problemen.If you're thinking about machines and which one is running a particular microservice, things can go bad quickly.

Ebenso wie der DNS eine bestimmte URL auf einem bestimmten Computer auflöst, muss Ihr Microservice über einen eindeutigen Namen verfügen, damit sein aktueller Speicherort ermittelt werden kann.In the same way that DNS resolves a particular URL to a particular machine, your microservice needs a unique name so that its current location is discoverable. Für Microservices sind adressierbare Namen erforderlich, damit sie unabhängig von der Infrastruktur sind, auf der sie ausgeführt werden.Microservices need addressable names that are independent of the infrastructure they're running on. Dies impliziert, dass eine Interaktion zwischen der Bereitstellung und der Ermittlung Ihres Diensts besteht, weil eine Dienstregistrierung vorhanden sein muss.This implies that there's an interaction between how your service is deployed and how it's discovered, because there needs to be a service registry. Der Registrierungsdienst muss Sie im Fall eines Computerausfalls darüber informieren, wohin der Dienst verschoben wurde.When a machine fails, the registry service needs to tell you where the service was moved to.

Bleibt beim Auftreten von Fehlern konsistent und verfügbarRemains consistent and available in the presence of failures

Die Behandlung unerwarteter Fehler ist eines der schwierigsten Probleme, die in einem verteilten System gelöst werden müssen.Dealing with unexpected failures is one of the hardest problems to solve, especially in a distributed system. Ein Großteil des Codes, den Entwickler schreiben, dient der Ausnahmebehandlung.Much of the code that we write as developers is for handling exceptions. Außerdem verbringen sie auch während der Tests die meiste Zeit mit der Behandlung von Ausnahmen.During testing, we also spend the most time on exception handling. Der Prozess ist komplexer als das Schreiben von Code zum Behandeln von Fehlern.The process is more involved than writing code to handle failures. Was passiert, wenn der Computer ausfällt, auf dem der Microservice ausgeführt wird?What happens when the machine on which the microservice is running fails? Sie müssen in einem solchen Fall den Ausfall erkennen – was allein genommen schon ein schwieriges Problem ist.You need to detect the failure, which is a hard problem on its own. Sie müssen aber auch den Microservice neu starten.But you also need to restart your microservice.

Aus Verfügbarkeitsgründen muss ein Microservice ausfallsicher sein und auf einem anderen Computer neu gestartet werden können.For availability, a microservice needs to be resilient to failures and able to restart on another machine. Zusätzlich zu diesen Anforderungen an die Resilienz dürfen außerdem auch keine Daten verloren gehen, und die Daten müssen jederzeit konsistent bleiben.In addition to these resiliency requirements, data shouldn't be lost, and data needs to remain consistent.

Resilienz ist bei Fehlern während eines Anwendungsupgrades schwierig zu erzielen.Resiliency is hard to achieve when failures happen during an application upgrade. Der Microservice, der mit dem Bereitstellungssystem eingesetzt wird, muss nicht wiederhergestellt werden können.The microservice, working with the deployment system, doesn't need to recover. Es muss entschieden werden, ob der Schritt zur neueren Version möglich ist oder ein Rollback auf die vorherige Version ausgeführt werden muss, um Konsistenz sicherzustellen.It needs to determine whether it can continue to move forward to the newer version or roll back to a previous version to maintain a consistent state. Sie müssen dabei beispielsweise folgende Fragen beantworten: Sind genügend Computer verfügbar, um die neue Version einzuführen? Und wie werden vorherige Versionen des Microservice wiederhergestellt?You need to consider a few questions, like whether enough machines are available to keep moving forward and how to recover previous versions of the microservice. Für diese Entscheidungen müssen vom Microservice Informationen zur Integrität bereitgestellt werden.To make these decisions, you need the microservice to emit health information.

Melden der Integrität und DiagnoseReports health and diagnostics

Es ist eigentlich offensichtlich und wird doch oft übersehen, dass der Microservice seine Integritäts- und den Diagnosedaten melden muss.It might seem obvious, and it's often overlooked, but a microservice needs to report its health and diagnostics. Andernfalls sind aus betrieblicher Sicht nur wenige Einblicke in die Integrität möglich.Otherwise, you have little insight into its health from an operations perspective. Die Herausforderung besteht darin, Diagnoseereignisse in einer Gruppe von unabhängigen Diensten zu korrelieren und Abweichungen der Computeruhren zum Ermitteln der richtigen Ereignisreihenfolge zu berücksichtigen.Correlating diagnostic events across a set of independent services, and dealing with machine clock skews to make sense of the event order, is challenging. Genauso wie Sie mit einem Microservice über vereinbarte Protokolle und Datenformate interagieren, müssen Sie die Protokollierung von Integritäts- und Diagnoseereignissen standardisieren, die letztendlich zur Abfrage und Anzeige in einem Ereignisspeicher gespeichert werden.In the same way that you interact with a microservice over agreed-upon protocols and data formats, you need to standardize how to log health and diagnostic events that will ultimately end up in an event store for querying and viewing. Bei einem Microservice-Ansatz ist es wichtig, dass sich die unterschiedlichen Teams auf ein gemeinsames Protokollierungsformat einigen.With a microservices approach, different teams need to agree on a single logging format. In der gesamten Anwendung muss ein einheitlicher Ansatz zum Anzeigen von Diagnoseereignissen verwendet werden.There needs to be a consistent approach to viewing diagnostic events in the application as a whole.

Die Integrität unterscheidet sich von der Diagnose.Health is different from diagnostics. Bei der Integrität geht es darum, dass der Microservice seinen aktuellen Zustand meldet, damit geeignete Maßnahmen ergriffen werden können.Health is about the microservice reporting its current state to take appropriate actions. Ein gutes Beispiel ist die Verwendung der Upgrade- und Bereitstellungsmechanismen zum Wahren der Verfügbarkeit.A good example is working with upgrade and deployment mechanisms to maintain availability. Auch wenn ein Dienst aufgrund eines Prozessabsturzes oder eines Computerneustarts zu einem bestimmten Zeitpunkt unter Umständen keine volle Integrität aufweist, kann er dennoch betriebsbereit sein.Though a service might be currently unhealthy because of a process crash or machine reboot, the service might still be operational. Sie sollten auf jeden Fall vermeiden, diesen Zustand zu verschlimmern, indem Sie ein Upgrade starten.The last thing you need is to make the situation worse by starting an upgrade. Die beste Vorgehensweise besteht darin, zuerst eine Untersuchung durchzuführen oder dem Microservice Zeit zum Beheben des Fehlers zu lassen.The best approach is to investigate first or allow time for the microservice to recover. Anhand von Integritätsereignissen eines Microservice können wir fundierte Entscheidungen treffen und selbstreparierende Dienste erstellen.Health events from a microservice help us make informed decisions and, in effect, help create self-healing services.

Leitfaden zum Entwerfen von Microservices in AzureGuidance for designing microservices on Azure

Besuchen Sie das Azure Architecture Center. Dort finden Sie Anleitungen zum Entwerfen und Erstellen von Microservices in Azure.Visit the Azure architecture center for guidance on designing and building microservices on Azure.

Service Fabric als Microservice-PlattformService Fabric as a microservices platform

Azure Service Fabric ist entstanden, als Microsoft die Umstellung von „Paketprodukten“, die meist monolithisch waren, auf Dienste vollzogen hat.Azure Service Fabric emerged when Microsoft transitioned from delivering boxed products, which were typically monolithic, to delivering services. Aus den Erfahrungen, die bei der Erstellung und dem Betrieb großer Dienste wie Azure SQL-Datenbank und Azure Cosmos DB gesammelt wurden, ist Service Fabric entstanden.The experience of building and operating large services, like Azure SQL Database and Azure Cosmos DB, shaped Service Fabric. Die Plattform entwickelte sich im Laufe der Zeit weiter und wurde von immer mehr Diensten genutzt.The platform evolved over time as more services adopted it. Service Fabric konnte nicht nur in Azure ausgeführt werden, sondern auch in eigenständigen Windows Server-Bereitstellungen.Service Fabric had to run not only in Azure but also in standalone Windows Server deployments.

Die Ziele von Service Fabric sind das Lösen der schwierigen Probleme, die mit der Erstellung und Ausführung eines Diensts verbunden sind, und die effiziente Nutzung von Infrastrukturressourcen, damit Teams geschäftliche Probleme mit einem Microservice-Ansatz lösen können.The aim of Service Fabric is to solve the hard problems of building and running a service and to use infrastructure resources efficiently, so teams can solve business problems by using a microservices approach.

Service Fabric unterstützt Sie durch die Bereitstellung von Folgendem bei der Anwendungserstellung mit einem Microservice-Ansatz:Service Fabric helps you build applications that use a microservices approach by providing:

  • Diese Plattform bietet Systemdienste zum Bereitstellen, Upgraden, Erkennen und Neustarten ausgefallener Dienste und zum Ermitteln des Dienstes, Weiterleiten von Nachrichten,Verwalten des Zustands und Überwachen der Integrität.A platform that provides system services to deploy, upgrade, detect, and restart failed services, discover services, route messages, manage state, and monitor health.
  • Die Fähigkeit, Anwendungen entweder in Containern oder als Prozesse bereitzustellen.The ability to deploy applications either running in containers or as processes. Service Fabric ist ein Container- und Prozessorchestrator.Service Fabric is a container and process orchestrator.
  • Produktive Programmier-APIs zum Erstellen von Anwendungen als Microservices: ASP.NET Core, Reliable Actors und Reliable Services.Productive programming APIs to help you build applications as microservices: ASP.NET Core, Reliable Actors, and Reliable Services. Beispielsweise erhalten Sie entweder Integritäts- und Diagnoseinformationen, oder Sie können die integrierte Hochverfügbarkeit nutzen.For example, you can get health and diagnostics information, or you can take advantage of built-in high availability.

Service Fabric ist agnostisch, was die Erstellung Ihres Diensts betrifft, und Sie können eine beliebige Technologie verwenden. Es bietet jedoch integrierte Programmier-APIs, die die Erstellung von Microservices vereinfachen.Service Fabric is agnostic about how you build your service, and you can use any technology. But it does provide built-in programming APIs that make it easier to build microservices.

Migrieren von vorhandenen Anwendungen zu Service FabricMigrating existing applications to Service Fabric

Service Fabric ermöglicht das Wiederverwenden von vorhandenem Code, der durch neue Microservices modernisiert werden kann.Service Fabric allows you to reuse existing code and modernize it with new microservices. Es gibt fünf Phasen der Aktualisierung von Anwendungen. Sie können mit jeder beliebigen Phase beginnen und aufhören.There are five stages to application modernization, and you can start and stop at any stage. Die Phasen sind:The stages are:

  1. Beginnen Sie mit einer herkömmlichen monolithischen Anwendung.Start with a traditional monolithic application.
  2. Migration:Migrate. Verwenden Sie Container oder ausführbare Gastanwendungsdateien, um vorhandenen Code in Service Fabric zu hosten.Use containers or guest executables to host existing code in Service Fabric.
  3. Modernisierung:Modernize. Fügen Sie neue Microservices gemeinsam mit vorhandenem Code in Containern hinzu.Add new microservices alongside existing containerized code.
  4. Innovation:Innovate. Zerlegen Sie eine monolithische Anwendung nach Ihrem Bedarf in Microservices.Break the monolithic application into microservices based on need.
  5. Transformation von Anwendungen in Microservices:Transform applications into microservices. Transformieren Sie bestehende monolithische Anwendungen, oder erstellen Sie neue Anwendungen.Transform existing monolithic applications or build new greenfield applications.

Migration zu Microservices

Denken Sie daran: Sie können in jeder dieser Phasen beginnen und aufhören.Remember, you can start and stop at any of these stages. Sie müssen nicht mit der nächsten Stufe fortfahren.You don't have to progress to the next stage.

Sehen Sie sich nun Beispiele für jede dieser Phasen an.Let's look at examples for each of these stages.

MigrierenMigrate
Viele Unternehmen migrieren bestehende monolithische Anwendungen in Container. Dafür gibt es zwei Gründe:For two reasons, many companies are migrating existing monolithic applications into containers:

  • Kostensenkung entweder durch die Konsolidierung und das Entfernen der vorhandenen Hardware oder durch das Ausführen von Anwendungen mit höherer Dichte.Cost reduction, either due to consolidation and removal of existing hardware or due to running applications at higher density.
  • Konsistenter Bereitstellungvertrag zwischen der Entwicklung und dem Betrieb.A consistent deployment contract between development and operations.

Kostensenkungen sind selbsterklärend.Cost reductions are straightforward. Bei Microsoft sind viele vorhandene Anwendungen in Containern verpackt, wodurch Millionen von Dollar eingespart werden.At Microsoft, many existing applications are being containerized, leading to millions of dollars in savings. Konsistente Bereitstellung ist schwieriger zu bewerten, jedoch ebenso wichtig.Consistent deployment is harder to evaluate but equally important. Sie bedeutet, dass Entwickler die geeigneten Technologien selbst auswählen können, aber die Vorgänge nur eine einzige Methode für das Bereitstellen und Verwalten der Anwendungen akzeptieren.It means that developers can choose the technologies that suit them, but operations will accept only a single method for deploying and managing the applications. So müssen die Vorgänge nicht unterschiedliche, komplexe Technologien unterstützen. Zudem müssen sich Entwickler nicht nur für eine entscheiden.It alleviates operations from having to deal with the complexity of supporting different technologies without forcing developers to choose only certain ones. Im Wesentlichen wird jede Anwendung in Container in eigenständigen Bereitstellungsimages verschoben.Essentially, every application is containerized into self-contained deployment images.

Viele Organisationen fahren hier nicht fort.Many organizations stop here. Sie nutzen bereits die Vorteile von Containern, und Service Fabric bietet alle Verwaltungsmöglichkeiten – von der Bereitstellung über Upgrades, Versionskontrolle und Rollbacks bis hin zur Überwachung der Integrität.They already have the benefits of containers, and Service Fabric provides the complete management experience, including deployment, upgrades, versioning, rollbacks, and health monitoring.

ModernisierungModernize
Bei der Modernisierung werden neue Dienste gemeinsam mit vorhandenem Code in Containern hinzugefügt.Modernization is the addition of new services alongside existing containerized code. Wenn Sie neuen Code schreiben möchten, empfiehlt es sich, kleine Schritte auf dem Weg zu Microservices zu machen.If you're going to write new code, it's best to take small steps down the microservices path. Dies kann das Hinzufügen eines neuen REST-API-Endpunkts oder neue Geschäftslogik sein.This could mean adding a new REST API endpoint or new business logic. Auf diese Weise haben Sie die ersten Schritte auf dem Weg zu Microservices gemacht und können sich gleichzeitig mit dem Entwickeln und Bereitstellen dieser vertraut machen.In this way, you start the process of building new microservices and practice developing and deploying them.

InnovationInnovate
Ein Microservices-Ansatz ist auf Veränderungen der geschäftlichen Anforderungen vorbereitet.A microservices approach accommodates changing business needs. In dieser Phase müssen Sie entscheiden, ob Sie die monolithische Anwendung in Dienste aufteilen möchten oder ob Sie eine Innovation anstreben.At this stage, you need to decide whether to start splitting the monolithic application into services, or innovating. Ein klassisches Beispiel ist, wenn eine Datenbank, die als Workflowwarteschlange verwendet wird, zu einem Verarbeitungsengpass wird.A classic example here is when a database that you're using as a workflow queue becomes a processing bottleneck. Mit zunehmender Anzahl an Workflowanfragen muss die Arbeit zur Skalierung verteilt werden.As the number of workflow requests increases, the work needs to be distributed for scale. Für diesen spezifischen Bereich der Anwendung, der nicht die Skalierung ist, oder den Sie häufiger aktualisieren müssen, teilen Sie dies in einen Microservice auf und führen eine Innovation durch.Take that particular piece of the application that's not scaling, or that needs to be updated more frequently, and split it out as a microservice and innovate.

Transformation von Anwendungen in MicroservicesTransform applications into microservices
In dieser Phase besteht Ihre Anwendung komplett aus Microservices oder ist in Microservices unterteilt.At this stage, your application is fully composed of (or split into) microservices. Wenn Sie diesen Punkt erreichen, haben Sie die Journey zu Microservices abgeschlossen.To reach this point, you've made the microservices journey. Sie können hier starten. Wenn Sie dies jedoch ohne eine unterstützende Microservice-Plattform machen, erfordert dies eine erhebliche Investition.You can start here, but to do so without a microservices platform to help you requires a significant investment.

Sind Microservices für meine Anwendung geeignet?Are microservices right for my application?

Vielleicht.Maybe. Als bei Microsoft immer mehr Teams damit begannen, aus geschäftlichen Gründen Anwendungen für die Cloud zu entwickeln, erkannten viele von ihnen die Vorteile eines Microservice-Ansatzes.At Microsoft, as more teams began to build for the cloud for business reasons, many of them realized the benefits of taking a microservice-like approach. Für Bing werden beispielsweise schon seit Jahren Microservices genutzt.Bing, for example, has been using microservices for years. Für andere Teams war der Microservice-Ansatz neu.For other teams, the microservices approach was new. Die Teams haben festgestellt, dass es schwierige Probleme außerhalb ihrer Kernkompetenzbereiche zu lösen galt.Teams found that there were hard problems to solve outside of their core areas of strength. Dies sind die Gründe, warum Service Fabric immer häufiger als Technologie für die Erstellung von Diensten eingesetzt wird.This is why Service Fabric gained traction as the technology for building services.

Das Ziel von Service Fabric ist die Reduzierung der Komplexität bei der Erstellung von Microservice-Anwendungen, damit bei Ihnen nicht mehr so viele teure Überarbeitungen anfallen.The objective of Service Fabric is to reduce the complexities of building microservice applications so that you don't have to go through as many costly redesigns. Beginnen Sie klein, führen Sie bei Bedarf eine Skalierung durch, mustern Sie Dienste aus, fügen Sie neue hinzu, und entwickeln Sie die Lösung während der Nutzung durch die Kunden weiter.Start small, scale when needed, deprecate services, add new ones, and evolve with customer usage. Uns ist auch bewusst, dass noch viele andere Probleme gelöst werden müssen, damit Microservices für die Mehrzahl der Entwickler noch besser zugänglich werden.We also know that there are many other problems yet to be solved to make microservices more approachable for most developers. Container und das Programmiermodell mit Akteuren sind Beispiele für kleine Schritte in dieser Richtung.Containers and the actor programming model are examples of small steps in that direction. Wir sind sicher, dass weitere Innovationen folgen werden, um den Microservice-Ansatz noch einfacher zu machen.We're sure more innovations will emerge to make a microservices approach easier.

Nächste SchritteNext steps