Freigeben über


Empfehlungen zum Umgang mit vorübergehenden Fehlern

Hierfür gilt die Empfehlung der Power Platform Well-Architected Reliability-Checkliste:

Antwort:05 Stärken Sie die Belastbarkeit Ihrer Workload durch die Implementierung der Fehlerbehandlung und der Behandlung vorübergehender Fehler. Integrieren Sie Funktionen zur Handhabung von Komponentenausfällen und vorübergehenden Fehlern in die Lösung.

Diese Anleitung beschreibt die Empfehlungen zum Umgang mit vorübergehenden Fehlern in Ihren Cloud-Anwendungen. Alle Anwendungen, die mit Remotediensten und -ressourcen kommunizieren, müssen auf vorübergehende Fehler reagieren. Dies gilt insbesondere für Anwendungen, die in der Cloud ausgeführt werden, wo diese Art von Fehler aufgrund der Art der Umgebung und der Konnektivität über das Internet häufiger auftreten kann. Zu vorübergehenden Fehlern zählen der kurzzeitige Verlust der Netzwerkverbindung zu Komponenten und Diensten, die vorübergehende Nichtverfügbarkeit eines Dienstes und Timeouts, die auftreten, wenn ein Dienst ausgelastet ist. Diese Fehler beheben sich häufig von selbst. Wenn die Aktion also nach einer angemessenen Verzögerung wiederholt wird, ist die Wahrscheinlichkeit groß, dass sie erfolgreich ist.

Wichtige Designstrategien

Vorübergehende Fehler können in jeder Umgebung, auf jeder Plattform oder jedem Betriebssystem und in jeder Art von Anwendung auftreten.

Herausforderungen

Vorübergehende Fehler können die wahrgenommene Verfügbarkeit einer Anwendung erheblich beeinträchtigen, selbst wenn diese unter allen vorhersehbaren Umständen gründlich getestet wurde. Um sicherzustellen, dass Ihre Power Platform-Workload zuverlässig ausgeführt werden kann, müssen Sie sicherstellen, dass sie die folgenden Herausforderungen bewältigen kann:

  • Die Anwendung muss in der Lage sein, Fehler zu erkennen, wenn sie auftreten, und zu bestimmen, ob es sich wahrscheinlich um vorübergehende oder lang anhaltende Fehler handelt oder ob es sich um endgültige Ausfälle handelt. Verschiedene Ressourcen geben beim Auftreten eines Fehlers wahrscheinlich unterschiedliche Antworten zurück, und diese Antworten können je nach Kontext des Vorgangs auch variieren. Beispielsweise kann die Antwort auf einen Fehler, wenn die Anwendung Daten von einem benutzerdefinierten Connector abruft, von der Antwort abweichen, wenn die Anwendung einen Cloud-Flow ausführt und auf die Antwort wartet.

  • Die Anwendung muss in der Lage sein, den Vorgang zu wiederholen, wenn sie feststellt, dass es sich wahrscheinlich um einen vorübergehenden Fehler handelt.

  • Die Anwendung muss für Wiederholungsversuche eine geeignete Strategie verwenden. Die Strategie gibt an, wie oft die Anwendung einen erneuten Versuch unternehmen soll, wie lange zwischen den einzelnen Versuchen gewartet werden soll und welche Maßnahmen nach einem fehlgeschlagenen Versuch zu ergreifen sind. Die angemessene Anzahl von Versuchen und die Zeitspanne zwischen den einzelnen Versuchen sind oft schwer zu bestimmen. Die Strategie variiert je nach Ressourcentyp und den aktuellen Betriebsbedingungen der Ressource und der Anwendung.

Allgemeine Leitfäden

Die folgenden Richtlinien können Ihnen dabei helfen, geeignete Mechanismen zur Behandlung vorübergehender Fehler für Ihre Anwendungen zu entwerfen.

Ermitteln Sie, ob ein integrierter Wiederholungsmechanismus vorhanden ist

Einige Dienste, mit denen Sie eine Verbindung herstellen, verfügen möglicherweise bereits über einen Mechanismus zur Behandlung vorübergehender Fehler. Die verwendete Wiederholungsrichtlinie ist normalerweise auf die Art und Anforderungen des Zieldienstes zugeschnitten. Alternativ können REST-Schnittstellen für Dienste Informationen zurückgeben, die Ihnen bei der Entscheidung helfen, ob ein erneuter Versuch angebracht ist und wie lange vor dem nächsten Wiederholungsversuch gewartet werden soll.

Sie sollten den integrierten Wiederholungsmechanismus verwenden, sofern einer verfügbar ist, es sei denn, Sie haben spezifische und gut verständliche Anforderungen, für die ein anderes Wiederholungsverhalten angemessener ist.

Bestimmen Sie, ob der Vorgang für einen erneuten Versuch geeignet ist

Führen Sie Wiederholungsvorgänge nur durch, wenn die Fehler vorübergehend sind (normalerweise durch die Art des Fehlers angezeigt) und wenn zumindest eine gewisse Wahrscheinlichkeit besteht, dass der Vorgang bei einer Wiederholung erfolgreich ist. Es macht keinen Sinn, Vorgänge zu wiederholen, bei denen es sich um einen ungültigen Vorgang handelt, z. B. das Aktualisieren einer Zeile in Microsoft Dataverse, die nicht existiert oder für die der Benutzer keine Berechtigung hat, oder das Aufrufen einer API Endpunkt, die nicht existiert.

Führen Sie Wiederholungsversuche nur durch, wenn Sie die volle Auswirkung davon bestimmen können und wenn die Bedingungen gut verstanden und validiert werden können. Bedenken Sie, dass sich die von Ressourcen und Diensten außerhalb Ihrer Kontrolle zurückgegebenen Fehler im Laufe der Zeit weiterentwickeln können und Sie Ihre Logik zur Erkennung vorübergehender Fehler möglicherweise überarbeiten müssen.

Achten Sie beim Entwickeln einzelner Komponenten oder Dienste, die von Ihren Anwendungen aufgerufen werden, darauf, Fehlercodes und Meldungen zurückzugeben, anhand derer Clients feststellen können, ob sie fehlgeschlagene Vorgänge wiederholen sollten. Geben Sie an, ob der Client den Vorgang wiederholen soll. Dies kann zum Beispiel durch die Rückgabe des Werts ist vorübergehend erfolgen. Wenn Sie einen Webdienst erstellen, sollten Sie die Rückgabe benutzerdefinierter Fehler in Betracht ziehen, die in Ihren Dienstverträgen definiert sind.

Festlegen einer angemessenen Anzahl von Wiederholungsversuchen und eines angemessenen Intervalls

Optimieren Sie die Anzahl der Wiederholungsversuche und das Intervall entsprechend der Art des Anwendungsfalls. Wenn Sie es nicht oft genug wiederholen, kann die Anwendung den Vorgang nicht abschließen und schlägt wahrscheinlich fehl. Wenn Sie es zu oft oder mit zu kurzen Abständen zwischen den Versuchen wiederholen, kann es sein, dass die Anwendung Ressourcen für längere Zeiträume zurückhält, was sich negativ auf die Integrität der Anwendung auswirkt.

Passen Sie die Werte für das Zeitintervall und die Anzahl der Wiederholungsversuche an die Art des Vorgangs an. Wenn der Vorgang beispielsweise Teil einer Benutzerinteraktion ist, sollte das Intervall kurz sein und nur wenige Wiederholungsversuche durchgeführt werden. Mit diesem Ansatz können Sie vermeiden, dass Benutzer auf eine Antwort warten müssen. Wenn der Vorgang Teil eines langwierigen oder kritischen Workflows ist, bei dem das Abbrechen und Neustarten des Prozesses teuer oder zeitaufwändig ist, ist es sinnvoll, zwischen den Versuchen länger zu warten und öfter neue Versuche durchzuführen.

Bedenken Sie, dass das Bestimmen der geeigneten Intervalle zwischen den Wiederholungsversuchen der schwierigste Teil beim Entwerfen einer erfolgreichen Strategie ist. Typische Strategien verwenden die folgenden Arten von Wiederholungsintervallen:

  • Exponenzielles Intervall. Die Anwendung wartet vor dem ersten Wiederholungsversuch eine kurze Zeit und erhöht dann die Zeit zwischen jedem weiteren Wiederholungsversuch exponenziell. Beispielsweise kann der Vorgang nach 3 Sekunden, 12 Sekunden, 30 Sekunden usw. wiederholt werden.

  • Feste Intervalle. Zwischen jedem Versuch wartet die Anwendung gleich lange.

  • Sofortiger erneuter Versuch. Manchmal ist ein vorübergehender Fehler nur von kurzer Dauer und es ist sinnvoll, den Vorgang sofort zu wiederholen, da dieser möglicherweise erfolgreich ist, wenn der Fehler in der Zeit behoben wird, die die Anwendung zum Senden der nächsten Anforderung benötigt. Es sollte jedoch nie mehr als ein sofortiger Wiederholungsversuch erfolgen. Sie sollten zu alternativen Strategien wie exponenziellen Intervallen oder Fallback-Aktionen wechseln, wenn der sofortige Wiederholungsversuch fehlschlägt.

Als allgemeine Richtlinie gilt: Verwenden Sie für Hintergrundvorgänge eine Strategie mit exponenziellen Intervallen und für interaktive Vorgänge Wiederholungsstrategien mit sofortigen oder festen Intervallen. In beiden Fällen sollten Sie die Verzögerung und die Anzahl der Wiederholungsversuche so wählen, dass die maximale Latenz für alle Wiederholungsversuche innerhalb der erforderlichen End-to-End-Latenzanforderung liegt.

Berücksichtigen Sie die Kombination aller Faktoren, die zum maximalen Gesamttimeout für einen wiederholten Vorgang beitragen. Zu diesen Faktoren gehören die Zeit, die benötigt wird, bis bei einer fehlgeschlagenen Verbindung eine Antwort erfolgt, die Verzögerung zwischen Wiederholungsversuchen und die maximale Anzahl von Wiederholungsversuchen. Die Summe aller dieser Zeiten kann zu langen Gesamtbetriebszeiten führen, insbesondere wenn Sie eine exponenzielle Verzögerungsstrategie verwenden, bei der das Intervall zwischen den Wiederholungsversuchen nach jedem Fehler schnell zunimmt. Wenn ein Prozess eine bestimmte Service-Level-Vereinbarung (SLA) erfüllen muss, muss die gesamte Betriebszeit einschließlich aller Timeouts und Verzögerungen innerhalb der im SLA definierten Grenzen liegen.

Setzen Sie keine zu aggressiven Wiederholungsstrategien ein. Dabei handelt es sich um Strategien, deren Intervalle zu kurz sind oder deren Wiederholungsversuche zu häufig erfolgen. Sie können sich nachteilig auf die Zielressource oder den Zieldienst auswirken. Diese Strategien verhindern möglicherweise, dass sich die Ressource oder der Dienst aus ihrem überlasteten Zustand erholt, und blockieren oder verweigern weiterhin Anfragen. Dieses Szenario führt zu einem Teufelskreis, in dem immer mehr Anfragen an die Ressource oder den Dienst gesendet werden. Folglich wird die Fähigkeit zur Regeneration weiter verringert.

Berücksichtigen Sie bei der Auswahl von Wiederholungsintervallen das Timeout der Vorgänge, um zu vermeiden, dass sofort ein weiterer Versuch gestartet wird (z. B. wenn die Timeout-Periode dem Wiederholungsintervall ähnelt).

Verwenden Sie den Fehlertyp oder die vom Dienst zurückgegebenen Fehlercodes und Meldungen, um die Anzahl der Wiederholungsversuche und das Intervall zwischen ihnen zu optimieren. Beispielsweise können einige Ausnahmen oder Fehlercodes (wie der HTTP-Code 503, „Dienst nicht verfügbar“, mit einem „Retry-After“-Header in der Antwort) angeben, wie lange der Fehler andauern könnte, oder dass der Dienst fehlgeschlagen ist und auf keinen weiteren Versuch reagiert.

Anti-Muster vermeiden

Vermeiden Sie in den meisten Fällen Implementierungen, die doppelte Ebenen von Wiederholungscode enthalten. Vermeiden Sie Designs, die kaskadierende Wiederholungsmechanismen enthalten oder die in jeder Phase eines Vorgangs, der eine Anforderungshierarchie beinhaltet, Wiederholungsversuche implementieren, es sei denn, Sie haben spezielle Anforderungen hierzu. Verwenden Sie in diesen Ausnahmefällen Richtlinien, die eine übermäßige Anzahl von Wiederholungsversuchen und Verzögerungen verhindern, und stellen Sie sicher, dass Sie die Konsequenzen verstehen. Angenommen, eine Komponente stellt eine Anfrage an eine andere, die dann auf den Zieldienst zugreift. Wenn Sie bei beiden Aufrufen eine Wiederholung mit einer Anzahl von drei implementieren, gibt es für den Dienst insgesamt neun Wiederholungsversuche. Viele Dienste und Ressourcen implementieren einen integrierten Wiederholungsmechanismus. Sie sollten untersuchen, wie Sie diese Mechanismen deaktivieren oder ändern können, wenn Sie Wiederholungsversuche auf einer höheren Ebene implementieren müssen.

Implementieren Sie niemals einen Mechanismus für endlose Wiederholungsversuche. Dadurch kann es passieren, dass sich die Ressource oder der Dienst nicht von einer Überlastungssituation erholt und die Drosselung und Ablehnung von Verbindungen über einen längeren Zeitraum anhält.

Führen Sie einen sofortigen Wiederholungsversuch niemals mehr als einmal durch.

Vermeiden Sie die Verwendung eines festen Wiederholungsintervalls, wenn Sie auf Dienste und Ressourcen in Azure zugreifen, insbesondere bei einer hohen Anzahl von Wiederholungsversuchen. Der beste Ansatz in diesem Szenario ist eine exponenzielle Intervallstrategie.

Testen Sie Ihre Wiederholungsstrategie und -implementierung

Testen Sie Ihre Wiederholungsstrategie unter möglichst vielen verschiedenen Bedingungen, insbesondere wenn sowohl die Anwendung als auch die von ihr verwendeten Zielressourcen oder -dienste extrem ausgelastet sind. Um das Verhalten während des Tests zu überprüfen, können Sie:

  • Fügen Sie vorübergehende und nicht vorübergehende Fehler in den Dienst ein. Senden Sie beispielsweise ungültige Anfragen oder fügen Sie Code hinzu, der Testanfragen erkennt und mit unterschiedlichen Fehlertypen antwortet.

  • Erstellen Sie ein Modell der Ressource oder des Dienstes, das eine Reihe von Fehlern zurückgibt, die auch der echte Dienst zurückgeben könnte. Decken Sie alle Fehlertypen ab, die durch Ihre Wiederholungsstrategie erkannt werden sollen.

  • Erzwingen Sie bei benutzerdefinierten Diensten, die Sie erstellen und bereitstellen, das Auftreten vorübergehender Fehler, indem Sie den Dienst vorübergehend deaktivieren oder überlasten. (Versuchen Sie nicht, gemeinsam genutzte Ressourcen oder Dienste in Azure zu überlasten.)

  • Wenn Sie die Widerstandsfähigkeit einer Client-Webanwendung gegenüber vorübergehenden Fehlern testen, nutzen Sie die Entwicklertools des Browsers oder die Möglichkeit Ihres Test-Frameworks, Netzwerkanforderungen zu simulieren oder blockieren.

  • Führen Sie Tests mit hohem Auslastungsfaktor und gleichzeitige Tests durch, um sicherzustellen, dass der Wiederholungsmechanismus und die Strategie unter diesen Bedingungen ordnungsgemäß funktionieren. Mithilfe dieser Tests wird außerdem sichergestellt, dass sich der Wiederholungsversuch nicht negativ auf den Betrieb des Clients auswirkt oder zu einer Kreuzkontamination zwischen den Anforderungen führt.

Verwalten von Wiederholungsrichtlinienkonfigurationen

Eine Wiederholungsrichtlinie ist eine Kombination aller Elemente Ihrer Wiederholungsstrategie. Sie definiert den Erkennungsmechanismus, der bestimmt, ob es sich wahrscheinlich um einen vorübergehenden Fehler handelt, den zu verwendenden Intervalltyp (z. B. fest oder exponenziell), die tatsächlichen Intervallwerte und die Anzahl der Wiederholungsversuche.

Nutzen Sie integrierte oder standardmäßige Wiederholungsstrategien, aber nur, wenn sie für Ihr Szenario geeignet sind. Diese Strategien sind typischerweise allgemeiner Natur. In manchen Szenarien reichen sie möglicherweise aus, was Sie brauchen, in anderen bieten sie jedoch nicht alle Optionen, die Ihren spezifischen Anforderungen entsprechen. Um die am besten geeigneten Werte zu ermitteln, müssen Sie Tests durchführen, um zu verstehen, wie sich die Einstellungen auf Ihre Anwendung auswirken.

Protokollieren und Verfolgen vorübergehender und dauerhafter Fehler

Integrieren Sie als Teil Ihrer Wiederholungsstrategie die Ausnahmebehandlung und andere Instrumente, die Wiederholungsversuche protokollieren. Gelegentliche vorübergehende Fehler und Wiederholungsversuche sind zu erwarten und stellen kein Anzeichen für ein Problem dar. Eine regelmäßige und steigende Anzahl von Wiederholungsversuchen ist jedoch häufig ein Hinweis auf ein Problem, das zu einem Fehler führen oder die Leistung und Verfügbarkeit der Anwendung beeinträchtigen könnte.

Protokollieren Sie vorübergehende Fehler als Warneinträge und nicht als Fehlereinträge, damit Überwachungssysteme sie nicht als Anwendungsfehler erkennen, die möglicherweise falsche Warnungen auslösen.

Sie sollten in Ihren Protokolleinträgen ggf. einen Wert speichern, der angibt, ob Wiederholungsversuche durch eine Drosselung des Dienstes oder durch andere Fehlertypen (z. B. Verbindungsfehler) verursacht werden, damit Sie diese bei der Datenanalyse unterscheiden können. Eine Zunahme der Anzahl von Drosselungsfehlern ist häufig ein Hinweis auf einen Konstruktionsfehler in der Anwendung oder die Notwendigkeit, der Umgebung Premiumkapazität hinzuzufügen.

Erwägen Sie die Implementierung eines Telemetrie- und Überwachungssystems, das Warnungen auslösen kann, wenn die Anzahl und Rate der Fehler, die durchschnittliche Anzahl der Wiederholungsversuche oder die insgesamt bis zum Erfolg von Vorgängen verstrichene Zeit zunimmt.

Verwalten von Vorgängen, die ständig fehlschlagen

Überlegen Sie, wie Sie mit Vorgängen umgehen, die weiterhin bei jedem Versuch fehlschlagen. Situationen wie diese sind unvermeidlich.

Obwohl eine Wiederholungsstrategie die maximale Anzahl von Wiederholungsversuchen für einen Vorgang definiert, hindert sie die Anwendung nicht daran, den Vorgang mit der gleichen Anzahl von Wiederholungsversuchen zu wiederholen. Beispielsweise kann das Senden eines Formulars in Ihrer Anwendung einen Flow auslösen. Die Wiederholungsstrategie erkennt möglicherweise ein Verbindungstimeout und wertet es als vorübergehenden Fehler. Der Flow wiederholt den Vorgang eine angegebene Anzahl Mal und gibt dann auf. Wenn jedoch derselbe oder ein neuer Benutzer versucht, das Formular erneut zu übermitteln, wird der Vorgang erneut versucht, auch wenn er möglicherweise weiterhin fehlschlägt.

Die Anwendung kann den Dienst regelmäßig, in unregelmäßigen Abständen und mit großen Intervallen zwischen den Anforderungen testen, um festzustellen, wann er verfügbar wird. Ein angemessenes Intervall hängt von Faktoren wie der Kritikalität des Vorgangs und der Art der Dienstleistung ab. Es kann zwischen einigen Minuten und mehreren Stunden dauern. Wenn der Test erfolgreich ist, kann die Anwendung den Normalbetrieb wieder aufnehmen und Anforderungen an den neu wiederhergestellten Dienst weiterleiten.

In der Zwischenzeit können Sie möglicherweise einige alternative Vorgänge durchführen, in der Hoffnung, dass der Dienst bald verfügbar ist. Beispielsweise kann es angebracht sein, Anforderungen für den Dienst in einer Warteschlange oder Datenspeicher zu speichern und sie später erneut zu versuchen. Oder Sie müssen dem Benutzer möglicherweise eine Nachricht zurücksenden, um darauf hinzuweisen, dass die Anwendung nicht verfügbar ist.

Weitere Überlegungen

Wenn Sie die Werte für die Anzahl der Wiederholungsversuche und die Wiederholungsintervalle für eine Richtlinie festlegen, berücksichtigen Sie, ob der Vorgang für den Dienst oder die Ressource Teil eines Vorgangs mit langer Ausführungsdauer oder eines Vorgangs mit mehreren Schritten ist. Wenn ein Schritt fehlschlägt, kann es schwierig oder teuer werden, alle anderen bereits erfolgreichen Schritte zu kompensieren. In diesem Fall sind ein langes Intervall und eine große Anzahl von Wiederholungsversuchen möglicherweise akzeptabel, solange diese Strategie andere Vorgänge nicht durch das Zurückhalten oder Sperren knapper Ressourcen blockiert.

Überlegen Sie, ob ein erneuter Versuch desselben Vorgangs zu Inkonsistenzen in den Daten führen könnte. Wenn einige Teile eines mehrstufigen Prozesses wiederholt werden und die Vorgänge nicht idempotent sind, können Inkonsistenzen auftreten. Wenn beispielsweise ein Vorgang, der einen Datensatz in Microsoft Dataverse einfügt, wiederholt wird, kann dies zu falschen Werten in der Tabelle führen. Oder wenn Sie einen Vorgang wiederholen, der eine Benachrichtigung an den Benutzer sendet, erhält dieser möglicherweise doppelte Nachrichten.

Berücksichtigen Sie den Umfang der wiederholten Vorgänge. Beispielsweise könnte es einfacher sein, Wiederholungscode auf einer Ebene zu implementieren, die mehrere Vorgänge umfasst und sie alle wiederholt, wenn einer fehlschlägt. Dies kann jedoch zu Idempotenzproblemen oder unnötigen Rollback-Vorgängen führen.

Wenn Sie einen Wiederholungsbereich auswählen, der mehrere Vorgänge umfasst, berücksichtigen Sie die Gesamtlatenz aller Vorgänge, wenn Sie die Wiederholungsintervalle bestimmen, wenn Sie die verstrichene Zeit des Vorgangs überwachen und bevor Sie Warnungen bei Fehlern auslösen.

Power Platform: schnellere Durchführung

In den folgenden Abschnitten werden die Mechanismen beschrieben, die Sie zum Verwalten vorübergehender Fehler verwenden können.

Power Automate

Power Automate enthält eine Funktion zum Wiederholen einer Aktion, wenn sie fehlschlägt. Konfigurieren Sie dies auf Aktionsebene. Erfahren Sie, wie Sie Risiken reduzieren und die Fehlerbehandlung in einem Power Automate Projekt planen. Power Automate bietet auch Aktionen zum Zurückgeben benutzerdefinierter Fehler und Daten an die aufrufende App oder den aufrufenden Flow.

Einige vorübergehende Datenflüsse können durch Durchsatz- und Anforderungsbeschränkungen verursacht werden. Informieren Sie sich über die Grenzen automatisierter, geplanter und sofortiger Flows sowie über Anforderungslimits und -zuweisungen.

Konfigurieren Sie die Fehler- und Ausnahmebehandlung in Cloud-Flows , indem Sie Bereiche und Run-After-Einstellungen verwenden.

Power Apps

Power Apps Canvas-Apps bieten die Möglichkeit, den Verbindungsstatus zu überprüfen, sodass sie sich anders verhalten können, wenn die App offline ist. Erfahren Sie, wie Sie Offlinefähige Canvas-Apps entwickeln.

Sie können in Canvas-Apps auch die Funktionen „Error“, „IfError“, „IsError“ und „IsBlankOrError“ verwenden, um zu entscheiden, was als Nächstes zu tun ist, wenn ein Fehler auftritt.

Erfahren Sie mehr über die Behandlung vorübergehender Fehler in Power Apps:

Azure- und benutzerdefinierte Konnektoren

Wenn Ihre Workload eine Verbindung zu Azure-Diensten herstellt, erfahren Sie, wie Sie vorübergehende Fehler mithilfe des Azure Well-Architected Framework behandeln.

Befolgen Sie die Codierungsstandards, um benutzerdefinierte Connector-Reaktionen auf Fehler zu verwalten.

Application Insights

Verwenden Sie die Application Insights Integrationen, um Fehler in Power Automate und Power Apps zu protokollieren:

Geschäftskontinuität und Notfallwiederherstellung für Dynamics 365 SaaS-Apps

Zuverlässigkeitscheckliste

Lesen Sie die vollständigen Empfehlungen.