Erfassen Sie Ihre Fortschritte
Trailhead-Startseite
Trailhead-Startseite

Asynchrone Verarbeitung – Grundlagen

Hinweis

Hinweis

Trailblazer aufgepasst!

Salesforce hat auf Desktop-Geräten zwei unterschiedliche Benutzeroberflächen: Lightning Experience und Salesforce Classic. Dieses Modul bezieht sich auf Salesforce Classic.

Informationen über den Wechsel zwischen den Benutzeroberflächen, das Aktivieren von Lightning Experience und mehr finden Sie im Modul Lightning Experience – Grundlagen hier in Trailhead.

Lernziele

Nachdem Sie diese Lektion abgeschlossen haben, sind Sie in der Lage, die folgenden Aufgaben auszuführen:
  • Erläutern des Unterschieds zwischen synchroner und asynchroner Verarbeitung
  • Auswählen des geeigneten asynchronen Apex-Typs in verschiedenen Szenarien

Asynchrones Apex

Kurz und knackig gesagt, wird asynchrones Apex verwendet, um Prozesse zu einem späteren Zeitpunkt in einem separaten Thread auszuführen.

Ein asynchroner Prozess ist ein Prozess, der eine Aufgabe "im Hintergrund" ausführt, ohne dass der Benutzer darauf warten muss, dass die Aufgabe abgeschlossen wird.

Schauen wir uns ein konkretes Beispiel dazu an. Nehmen wir an, Sie müssen vor Ihrem wöchentlichen Dance Dance Revolution-Training noch einige Dinge erledigen. Ihr Auto gibt seltsame Geräusche von sich, Sie brauchen ein Haargel in einer anderen Farbe und Sie müssen Ihre Uniform bei Ihrer Mutter abholen. Sie können Ihr Auto jetzt in die Werkstatt bringen und warten, bis es repariert wurde, bevor Sie sich den restlichen Aufgaben auf Ihrer Liste zuwenden (synchrone Verarbeitung). Sie können das Auto aber auch in der Werkstatt lassen, in der Zwischenzeit die anderen Dinge erledigen und sich von der Werkstatt anrufen lassen, wenn die Reparatur durchgeführt wurde (asynchrone Verarbeitung). Wenn Sie rechtzeitig zuhause sein wollen, um vor dem Training Ihre Lycra-Leggings bügeln zu können, ermöglicht Ihnen die asynchrone Verarbeitung, mehr Dinge in derselben Zeit zu erledigen, da keine unnötige Wartezeit anfällt.

In der Regel verwenden Sie asynchrones Apex für Callouts an externe Systeme, Vorgänge, die höhere Obergrenzen erfordern, und Code, der zu einem bestimmten Zeitpunkt ausgeführt werden muss. Die wichtigsten Vorteile der asynchronen Verarbeitung sind:

Benutzereffizienz

Angenommen, Sie haben einen Prozess, der viele Berechnungen für ein benutzerdefiniertes Objekt durchführt, sobald eine Opportunity erstellt wird. Die für diese Berechnungen erforderliche Zeit könnte von einer kleinen Unannehmlichkeit bis zu einer längeren Zwangspause für den Benutzer reichen. Da sich diese Berechnungen nicht auf die aktuellen Aktionen des Benutzers auswirken, ist es nicht im Sinne einer effizienten Arbeitszeitnutzung, die Benutzer auf den Abschluss eines lange dauernden Prozesses warten zu lassen. Bei asynchroner Verarbeitung kann der Benutzer seine Arbeit fortsetzen, die Verarbeitung erfolgt im Hintergrund und der Benutzer kann die Ergebnisse bei passender Gelegenheit anzeigen.

Skalierbarkeit

Wenn Sie ermöglichen, dass bestimmte Funktionen der Plattform ausgeführt werden, sobald zu einem künftigen Zeitpunkt Ressourcen verfügbar werden, können Ressourcen verwaltet und schnell skaliert werden. Dadurch kann die Plattform dank paralleler Verarbeitung mehr Aufträge erledigen.

Höhere Obergrenzen

Asynchrone Prozesse werden in einem neuen Thread gestartet, wodurch höhere Obergrenzen für die Ausführung gelten. Und, ganz ehrlich, höhere Limits wünscht sich doch jeder!

Es gibt eine Reihe verschiedener Typen von asynchronem Apex. Die einzelnen Typen werden in Kürze detaillierter behandelt, doch hier sehen Sie einen groben Überblick.

Typ Überblick Übliche Szenarien
Future-Methoden Werden in einem eigenen Thread ausgeführt und starten erst, wenn Ressourcen verfügbar sind. Webservice-Callouts
Batch-Apex Dient zur Ausführung umfangreicher Aufträge, die die normalen Verarbeitungsgrenzen sprengen würden. Datenbereinigung oder Archivierung von Datensätzen
Queueable Apex Ähnlich wie Future-Methoden, ermöglicht jedoch das Verketten weiterer Aufträge und die Verwendung komplexerer Datentypen. Durchführung sequenzieller Verarbeitungsvorgänge mit externen Webservices
Geplantes Apex Sie planen die Apex-Ausführung für einen bestimmten Zeitpunkt. Tägliche oder wöchentliche Aufgaben

Es sollte hier auch erwähnt werden, dass sich diese unterschiedlichen Typen asynchroner Vorgänge nicht gegenseitig ausschließen. In der Praxis wird beispielsweise oftmals ein Batch-Apex-Auftrag über einen geplanten Apex-Auftrag angestoßen.

Höhere Obergrenzen für die Ausführung

Einer der Hauptvorteile der Ausführung von asynchronem Apex sind die höheren Obergrenzen für die Ausführung. Bei der Verwendung asynchroner Aufrufe wird beispielsweise die Anzahl von SOQL-Abfragen von 100 auf 200 Abfragen verdoppelt. Die Heap-Gesamtgrößte und die maximale CPU-Zeit vergrößern sich bei asynchronen Aufrufen in ähnlichem Maß.

Sie erhalten bei der asynchronen Verarbeitung nicht nur höhere Obergrenzen, sondern diese Obergrenzen sind auch noch unabhängig von den Limits der synchronen Anforderung, von der die asynchrone Anfrage ursprünglich in die Warteschlange gestellt wurde. Das klingt kompliziert, doch kurz gesagt, haben Sie zwei separate Apex-Aufrufe und mehr als das Doppelte an Verarbeitungskapazität. Dies ist beispielsweise in Fällen praktisch, wenn Sie so viel Verarbeitung wie möglich innerhalb der aktuellen Transaktion erledigen möchten, diese jedoch asynchron fortsetzen möchten, sobald Sie in die Nähe der Obergrenzen kommen.

Wenn Ihnen Lektüre zum Thema Heap-Größen, maximale Ausführungsdauer und Obergrenzen im allgemeinen gefällt, finden Sie unter Execution Governors and Limits weitere spannende Details.

Funktionsweise der asynchronen Verarbeitung

In einer mandantenfähigen Umgebung sind einige Herausforderungen mit der asynchronen Verarbeitung verknüpft:

Faire Verteilung der Verarbeitung

Stellen Sie sicher, dass jeder Kunde einen fairen Anteil an den Verarbeitungsressourcen erhält.

Fehlertoleranz

Stellen Sie sicher, dass keine asynchronen Anforderungen aufgrund von Hardware- oder Softwarefehlern verloren gehen.

Die Plattform nutzt ein warteschlangenbasiertes, asynchrones Verarbeitungs-Framework. Dieses Framework wird verwendet, um asynchrone Anforderungen für mehrere Organisationen innerhalb jeder Instanz zu verwalten. Der Lebenszyklus einer Anforderung besteht aus drei Teilen:

Einreihen in die Warteschlange

Die Anforderung wird in die Warteschlange gestellt. Es kann sich hierbei um eine Apex-Batchanforderung, eine Future-Apex-Anforderung oder eine der vielen anderen Arten von Anforderungen handeln. Die Plattform reiht Anforderungen zusammen mit den entsprechenden Daten für die Verarbeitung in die Warteschlange ein.

Persistenz

Die in die Warteschlange eingereihte Anforderung wird persistent gespeichert. Anforderungen werden in den persistenten Speicher geschrieben, um die Wiederherstellung bei einem Fehler zu ermöglichen und Transaktionsfunktionen bereitzustellen.

Entfernen aus der Warteschlange

Die in die Warteschlange eingereihte Anforderung wird aus der Warteschlange entfernt und verarbeitet. In diesem Schritt erfolgt die Transaktionsverwaltung, um sicherzustellen, dass Nachrichten bei einem Verarbeitungsfehler nicht verloren gehen.

Jede Anforderung wird von einem Handler verarbeitet. Der Handler ist der Code, der Funktionen für einen spezifischen Anforderungstyp durchführt. Handler werden von einer begrenzten Zahl von Arbeits-Threads auf jedem der Anwendungsserver ausgeführt, die eine Instanz bilden. Die Threads fordern Arbeitsaufträge vom Warteschlangen-Framework an und starten nach deren Erhalt einen spezifischen Handler, der die Arbeit erledigt.

Ressourcenschonung

Die Priorität von asynchroner Verarbeitung ist niedriger als die von Echtzeitinteraktionen über Browser und API. Um sicherzustellen, dass genügend Ressourcen vorhanden sind, um einen Anstieg im Bedarf an Rechenressourcen zu decken, überwacht das Warteschlangen-Framework Systemressourcen wie Serverspeicher und CPU-Nutzung und verringert die asynchrone Verarbeitung, wenn Schwellenwerte überschritten werden. Oder einfach gesagt: Das mandantenfähige System schützt sich selbst. Wenn eine Organisation versucht, sich einen größeren Ressourcenanteil "einzuverleiben" als ihr zusteht, wird die asynchrone Verarbeitung ausgesetzt, bis ein normaler Schwellenwert erreicht ist. Lange Rede, kurzer Sinn: Die Verarbeitungsdauer kann nicht garantiert werden, aber irgendwie wird es schon klappen.