Optimieren für hohe Parallelität mit Azure Data Explorer
Anwendungen mit hoher Parallelität werden in Szenarien mit einer großen Benutzerbasis benötigt, in denen die Anwendung gleichzeitig zahlreiche Anforderungen mit geringer Wartezeit und hohem Durchsatz verarbeiten muss.
Anwendungsfälle wären etwa umfangreiche Überwachungs- und Warnungsdashboards. Zu den Beispielen zählen u. a. Microsoft-Produkte und -Dienste wie Azure Monitor, Azure Time Series Insights und Playfab. Von allen diesen Diensten wird Azure Data Explorer verwendet, um Workloads mit hoher Parallelität bereitzustellen. Azure Data Explorer ist ein schneller, vollständig verwalteter Big Data-Analysedienst für die Echtzeitanalyse großer Datenmengen, die von Anwendungen, Websites, IoT-Geräten und Ähnlichem gestreamt werden.
Hinweis
Die tatsächliche Anzahl von Abfragen, die gleichzeitig in einem Cluster ausgeführt werden können, hängt von Faktoren wie Cluster-SKU, Datenvolumen, Abfragekomplexität und Nutzungsmustern ab.
Gestalten Sie die Back-End-Architektur wie folgt, um sie für Anwendungen mit hoher Parallelität einzurichten:
- Optimieren von Daten
- Festlegen eines Leader-Follower-Architekturmusters
- Optimieren von Abfragen
- Festlegen von Clusterrichtlinien
- Überwachen von Azure Data Explorer-Clustern
Dieser Artikel enthält Empfehlungen zu jedem der obigen Themen, die Sie implementieren können, um auf optimale und kostengünstige Weise eine hohe Parallelität zu erreichen. Diese Features können einzeln verwendet oder miteinander kombiniert werden.
Optimieren von Daten
Abfragen sollten möglichst wenig CPU-Ressourcen beanspruchen, um eine hohe Parallelität zu erreichen. Sie können eine oder alle der folgenden Methoden verwenden:
Verwenden bewährter Methoden für das Design des Tabellenschemas
Nutzen Sie die folgenden Designvorschläge für das Tabellenschema, um die CPU-Ressourcenauslastung zu minimieren:
- ID-Spalten sollten unabhängig davon, ob die Werte numerisch sind, als Zeichenfolgendatentypen definiert werden. Die Indizierung für Zeichenfolgenspalten ist komplexer als für numerische Spalten und bietet eine bessere Filterleistung.
- Stimmen Sie den Spaltendatentyp optimal auf die Daten ab, die tatsächlich in den Spalten gespeichert sind. Speichern Sie beispielsweise Datums-/Uhrzeitwerte nicht in einer Zeichenfolgenspalte.
- Vermeiden Sie eine große Tabelle mit geringer Dichte, und verwenden Sie dynamische Spalten, um Eigenschaften mit geringer Dichte zu speichern.
- Speichern Sie häufig verwendete Eigenschaften in einer eigenen Spalte mit einem nicht dynamischen Datentyp.
- Denormalisieren Sie Daten, um Verknüpfungen zu vermeiden, die mit einem relativ hohen CPU-Ressourcenbedarf einhergehen.
Partitionieren von Daten
Daten werden in Form von horizontalen Datenbankpartitionen (Datenshards) gespeichert und standardmäßig nach Erfassungszeit partitioniert. Mithilfe der Partitionierungsrichtlinie können Sie die horizontalen Datenbankpartitionen in einem Hintergrundprozess auf der Grundlage einer einzelnen Zeichenfolgen- oder Datums-/Uhrzeitspalte neu partitionieren. Durch die Partitionierung lassen sich mitunter erhebliche Leistungsverbesserungen erzielen, wenn die meisten Abfragen Partitionsschlüssel zum Filtern oder Aggregieren (oder für beides) verwenden.
Hinweis
Beim eigentlichen Partitionierungsprozess werden CPU-Ressourcen beansprucht. Die Verringerung der CPU-Auslastung zur Abfragezeit sollte jedoch die CPU-Auslastung für die Partitionierung aufwiegen.
Vorabaggregieren Ihrer Daten mit materialisierten Sichten
Aggregieren Sie Ihre Daten vorab, um die zur Abfragezeit beanspruchten CPU-Ressourcen erheblich zu verringern. Beispiele für Szenarien wären etwa das Zusammenfassen von Datenpunkten über eine geringere Anzahl von Zeitabschnitten, das Speichern des aktuellen Datensatzes eines bestimmten Datensatzes oder das Deduplizieren des Datasets. Verwenden Sie materialisierte Sichten, um eine einfach zu konfigurierende aggregierte Sicht für Quelltabellen zu erhalten. Dieses Feature vereinfacht das Erstellen und Verwalten dieser aggregierten Sichten.
Hinweis
Durch den Aggregationsprozess im Hintergrund werden CPU-Ressourcen beansprucht. Die Verringerung der CPU-Auslastung zur Abfragezeit sollte jedoch die CPU-Auslastung für die Aggregation aufwiegen.
Konfigurieren der Cachingrichtlinie
Konfigurieren Sie die Cacherichtlinie so, dass Abfragen auf der Grundlage von Daten ausgeführt werden, die im „heißen“ Speicher (Datenträgercache) gespeichert sind. Verwenden Sie Cold Storage oder externe Tabellen nur in wenigen, sorgfältig entworfenen Szenarien.
Festlegen eines Leader-Follower-Architekturmusters
Bei der Follower-Datenbank handelt es sich um ein Feature, das einer Datenbank oder einer Gruppe von Tabellen in einer Datenbank aus einem anderen Cluster in der gleichen Region folgt. Dieses Feature wird über Azure Data Share, Azure Resource Manager-APIs und eine Reihe von Clusterbefehlen verfügbar gemacht.
Verwenden Sie das Leader-Follower-Muster, um Computeressourcen für verschiedene Workloads festzulegen. Richten Sie beispielsweise einen Cluster für Erfassungen, einen Cluster für Abfragen oder für die Bereitstellung von Dashboards oder Anwendungen und einen Cluster für die Bereitstellung der Data Science-Workloads ein. Alle Workloads verfügen in diesem Fall jeweils über dedizierte Computeressourcen, die unabhängig voneinander skaliert werden können, sowie über unterschiedliche Cache- und Sicherheitskonfigurationen. Von allen Clustern werden die gleichen Daten verwendet. Die Daten werden dabei vom Leader geschrieben und von den Followern im schreibgeschützten Modus genutzt.
Hinweis
Die Verzögerung zwischen Follower-Datenbanken und Leader beträgt in der Regel wenige Sekunden. Sollte Ihre Lösung auf neueste Daten ohne Wartezeit angewiesen sein, ist diese Lösung möglicherweise hilfreich: Verwenden Sie eine Sicht für den Follower-Cluster, die die Daten des Leaders mit den Daten des Followers vereint und die neuesten Daten vom Leader und die restlichen Daten vom Follower abfragt.
Die Leistung von Abfragen für den Follower-Cluster lässt sich durch Aktivieren der Konfiguration zum Vorabruf von horizontalen Datenbankpartitionen verbessern. Verwenden Sie diese Konfiguration mit Bedacht, da sie sich auf die Aktualität der Daten in der Follower-Datenbank auswirken kann.
Optimieren von Abfragen
Verwenden Sie die folgenden Methoden, um Ihre Abfragen für hohe Parallelität zu optimieren:
Verwenden Sie die bewährten Methoden für Abfragen, um Ihre Abfragen so effizient wie möglich zu machen.
Verwenden eines Abfrageergebniscache
Wenn mehrere Benutzer zu einer ähnlichen Zeit das gleiche Dashboard laden, kann das Dashboard für den zweiten und die weiteren Benutzer aus dem Cache bereitgestellt werden. Dieses Setup bietet eine hohe Leistung und beansprucht fast keine CPU-Ressourcen. Verwenden Sie das Feature Abfrageergebniscache und die Anweisung set
, um die Konfiguration des Abfrageergebniscaches mit der Abfrage zu senden.
Grafana enthält eine Konfigurationseinstellung für den Abfrageergebniscache auf Datenquellenebene, sodass alle Dashboards standardmäßig diese Einstellung verwenden und die Abfrage nicht geändert werden muss.
Konfigurieren der Abfragekonsistenz
Der Standardmodus für die Abfragekonsistenz lautet Stark. In diesem Modus verwaltet ein Administratorknoten Metadaten und Erfassung für den Cluster sowie die Abfrageplanung und Delegierung der Ausführung an andere Knoten.
In Anwendungen mit hoher Parallelität kann die Verwaltung von Abfragen dazu führen, dass die CPU-Auslastung des Administratorknotens hoch ist, während andere Knoten weniger ausgelastet sind. Dies kann zu einem Engpass führen, aufgrund dessen die Anzahl gleichzeitiger Abfragen nicht zunehmen kann. Dies ist jedoch im CPU-Bericht des Clusters (Azure-Portal > {Ihr_Cluster} > Metriken > CPU-Metriken) möglicherweise nicht ersichtlich, da in diesem Bericht die durchschnittliche CPU-Nutzung für den Cluster anzeigt wird.
In diesem Szenario wird die Verwendung des Konsistenzmodus Schwach empfohlen. In diesem Modus können mehr Knoten Abfragen verwalten, wodurch die Anzahl gleichzeitiger Abfragen horizontal skaliert werden kann. Knoten in diesem Modus aktualisieren in regelmäßigen Abständen ihre Kopie der Metadaten und neu erfassten Daten. Dies führt zu einer Wartezeit von normalerweise weniger als einer Minute, wenn die Daten synchronisiert werden. Diese kurze Latenz ist jedoch dem Engpass vorzuziehen, der bei Verwendung des Konsistenzmodus Stark auftreten kann.
Sie können den Konsistenzmodus in einer Konsistenzrichtlinie für Arbeitsauslastungsgruppenabfragen, in den Clientanforderungseigenschaften oder in der Grafana-Datenquellenkonfiguration festlegen.
Festlegen von Clusterrichtlinien
Die Anzahl gleichzeitiger Anforderungen ist standardmäßig begrenzt und wird durch die Richtlinie für die Anforderungsratenbegrenzung gesteuert, damit der Cluster nicht überlastet wird. Sie können diese Richtlinie für Situationen mit hoher Parallelität anpassen. Die Anpassung sollte jedoch erst nach strengen Tests (vorzugsweise für produktionsähnliche Nutzungsmuster und Datasets) durchgeführt werden. Durch die Tests wird sichergestellt, dass der geänderte Wert für den Cluster geeignet ist. Dieser Grenzwert kann basierend auf den Anwendungsanforderungen konfiguriert werden.
Überwachen von Azure Data Explorer-Clustern
Die Überwachung der Integrität Ihrer Clusterressourcen hilft bei der Ausarbeitung eines Optimierungsplans mit den in den obigen Abschnitten vorgeschlagenen Features. Azure Monitor für Azure Data Explorer bietet eine umfassende Übersicht über die Leistung, Vorgänge, Nutzung und Fehler Ihres Clusters. Wählen Sie im Azure-Portal im Abschnitt Überwachung des Azure Data Explorer-Clusters die Registerkarte Insights (Vorschau) aus, um Einblicke in die Abfrageleistung sowie in gleichzeitige Abfragen, gedrosselte Abfragen und verschiedene andere Metriken zu erhalten.
Weitere Informationen zum Überwachen von Clustern finden Sie unter Azure Monitor für Azure Data Explorer (Vorschau). Informationen zu den einzelnen Metriken finden Sie unter Unterstützte Azure Data Explorer-Metriken.