title: Dynamic API patterns optimization
Creators: name: El Malki, Amine
Publisher: name: :none
Year: 2024

description: Microservices werden zunehmend als der vorherrschende Ansatz zur Entwicklung von Software in der Cloud und im serviceorientierten Computing angesehen. Service-Meshes wurden als spezialisierte Infrastruktur eingeführt, um Netzwerke containerisierter Microservices zu überwachen und Herausforderungen wie Komplexität, Verwaltbarkeit und Interoperabilität anzugehen, insbesondere in umfangreichen Microservice-Architekturen. Bedauerlicherweise fehlt derzeit eine spezifische architektonische Anleitung zur Gestaltung von Microservices und zur Auswahl von Technologieoptionen innerhalb eines Service-Meshes. Folglich besteht heutzutage erhebliche Unsicherheit hinsichtlich der Gestaltung und Nutzung von Microservices innerhalb einer Service-Mesh-Umgebung. Andererseits wurden zahlreiche API-Patterns und bewährte Verfahren entwickelt, um die Qualitätseigenschaften von auf Microservices basierenden Architekturen zu verbessern, darunter Rate Limiting und Circuit Breaking, die darauf abzielen, Zuverlässigkeit, Verfügbarkeit, Skalierbarkeit und Leistungsfähigkeit zu verbessern. Während Einschätzungen zu diesen Eigenschaften insbesondere in den frühen Phasen der architektonischen Gestaltung nützlich wären, wurde der tatsächliche Einfluss dieser Patterns auf solche Eigenschaften bisher nicht gründlich untersucht. Request Bundle ist ein solches Pattern, das die Leistung verbessern soll. Obwohl das Pattern erhebliche Leistungsverbesserungen bietet, kann es auch bedeutende Nachteile wie erhöhten Entwicklungsaufwand und Anwendungskomplexität mit sich bringen. Bisher gibt es nicht genug gründlich erworbenes Wissen um zu bewerten, ob die Implementierung von Request Bundle die Kosten in einer gegebenen Microservice-Architektur rechtfertigt. Darüber hinaus liegt bisher keine umfassende Studie vor, die den Einfluss dieser Techniken und ihrer Kombinationen in spezifischen Konfigurationen, insbesondere innerhalb eines großen verteilten Workload-Systems, misst. In dieser Arbeit führten wir zunächst eine qualitative, eingehende Untersuchung der bestehenden Praktiken im Bereich des Service Meshes durch, wobei wir einen modell-basierten Ansatz verwendeten. Wir untersuchten systematisch 40 Berichte etablierter Praktiken von Praktiker*innen. Unsere Studie führte zu einem gründlich spezifizierten, wiederverwendbaren architektonischen Entscheidungsmodell. Innerhalb dieses Modells identifizierten wir 14 architektonische Entwurfsentscheidungen, die 47 Entscheidungsergebnissen und insgesamt 77 Entscheidungsantrieben unterliegen. Anschließend untersuchten wir das Pattern Rate Limit gründlich, indem wir ein analytisches Modell einführten, das spezifische Arbeitslastkonfigurationen und vordefinierte Rate Limits berücksichtigt und die Erfolgs- und Ausfallraten von Backend-Services genau vorhersagt. Darüber hinaus bietet das Modell eine Methode zur adaptiven Feinabstimmung von Rate Limits. Wir nutzten Service-Meshes, um die Backend-Infrastruktur einzurichten, verschiedene Arbeitslastszenarien zu konfigurieren und Überwachung und Datensammlung zu erleichtern. Wir führten zwei umfangreiche Datenexperimente durch, um das Modell zu validieren und die Auswirkungen der Rate-Limitierung zu bewerten. Das erste Experiment wurde in einer privaten Cloud durchgeführt, um Latenz und potenzielle Bias-Effekte zu minimieren, während das zweite auf der Google Cloud Platform durchgeführt wurde, um das Modell in einer realistischen Cloud-Umgebung zu testen. Um das Pattern Request Bundle zu untersuchen, entschieden wir uns ebenfalls für eine Service-Mesh-basierte Infrastruktur, da sie die schnelle und dynamische Bereitstellung verschiedener Versionen desselben Microservices ermöglicht. Dies reduzierte die Zeit und den Aufwand, um verschiedene Patternkonfigurationen auszutesten, signifikant. Um den Leistungseinfluss des Request Bundlings zu bewerten, entwickelten wir ein Regres-sionsmodell und führten eine multivariate Regressionsanalyse durch. Diese ausgewählten Regressionsmodelle bieten verteilten Systemingenieur*innen und -architekt*innen eine Möglichkeit, die Leistungsverbesserung in der Round-Trip-Zeit zu schätzen, sowohl mit als auch ohne Request Bundling. Der skizzierte Ansatz kann an andere Microservice-Architekturen angepasst oder genutzt werden, um andere leistungsbezogene Microservice-Patterns zu untersuchen. Darüber hinaus führten wir experimentelle Forschung durch, um die Auswirkungen der Kombination der oben genannten Patterns mit Load Balancing zu untersuchen. Wir basierten unsere Studie auf einer realistischen, auf Drittanbieter-Microservices basierenden Anwendung, die sowohl in einer privaten Cloud-Umgebung als auch in der Amazon Web Services (AWS) Cloud bereitgestellt wird und 130 verschiedene Konfigurationen verwendet. Jede Konfiguration wurde 500 Mal in der privaten Cloud ausgeführt, insgesamt über 4.500 Stunden Laufzeit, und 200 Mal in AWS, insgesamt mehr als 3.900 Stunden Laufzeit. Die Komplexität des Experimentierens mit solchen komplexen Szenarien wird durch die Nutzung einer Service-Mesh-basierten Infrastruktur ermöglicht, die die erforderlichen Tools und Funktionalitäten zur Implementierung und Überwachung verschiedener Kombinationen dieser API-Patterns bereitstellt. Wir entwickelten Regressionsmodelle aus den gesammelten Daten, um die Leistungs- und Zuverlässigkeitsauswirkungen der Kombination dieser Techniken und Patterns vorherzusagen. Zusätzlich zu den spezifischen Analysen in dieser Studie schlagen wir eine allgemeine und weitgehend automatisierte Methode vor, die iterativ eingesetzt werden kann, um ähnliche Techniken und Patterns hinsichtlich ihrer Qualitätsmerkmale zu bewerten, sowie eine Benchmark-Suite, die auf einer realistischen Open-Source-Microservice-Anwendung basiert, die auf der Service-Mesh-basierten Infrastruktur bereitgestellt wird. Diese Suite erleichtert die automatische Generierung umfassender Entscheidungsbaummodelle. Im Anschluss werden diese Modelle analysiert, um Algorithmen zur API-Designempfehlung zu formulieren, die darauf abzielen, die API-Operationen hinsichtlich Leistung und Zuverlässigkeit zu verbessern. Diese Algorithmen werden in Katalogen für zukünftige Wiederverwendung gespeichert. Diese API-Empfehlungspipeline bildet die Grundlage für die Erreichung von Selbstanpassung und Automatisierung der API-Konfiguration und der Optimierung von Einstellungen.