Skalierbarkeit

Skalierbarkeit ist die Fähigkeit Ihrer Workload, geschäftliche Anforderungen nahezu in Echtzeit zu erfüllen, ohne die Servicequalität zu beeinträchtigen. Traditionell wurde im Voraus zusätzliche Kapazität zugewiesen, um vorhersehbare Trafficspitzen zu bewältigen, während unerwartete Trafficspitzen überwacht und Warnungen veröffentlicht werden, um die Kapazität reaktiv zu erhöhen.

Up- und Down-Skalierung erfordern manuelle Eingriffe und unterliegen variablen Berechnungen für den Umfang der Kapazitätsänderung und die beizubehaltende Dauer. Es wird mühsamer, die Anforderungen zu bewältigen, wenn Spitzen häufig und unvorhersehbar sind.

Diese Szenarios wurden in der Regel mit permanenter gehobener Kapazität für Workload verwaltet, was dazu beiträgt, die Last zu bewältigen, aber höhere Kosten für die langfristige Ausführung von Workloads verursacht. Im Gegensatz zu On-Premises-Umgebungen, bei denen Hardwarekapazität unabhängig von der Nutzung beschafft wird, erfordert die Verwaltung dieser Art von Kapazität in der Cloud keine permanenten Investitionen in die Infrastruktur, und es ist keine Hardwareaktualisierung erforderlich, um auf dem neuesten Stand zu bleiben.

Workload kann die Bedarfskapazität in CPU, Speicher, Speicher und Input/Output (I/O) erhöhen, wobei CPU und Speicher primäre Parameter sind, die drastisch schwanken. Die Kapazität kann auf zwei Arten hoch- und herunterskaliert werden:

  • Horizontale Skalierung: Parallele Kapazität wird hinzugefügt, um zusätzliche Last aufzunehmen.
  • Vertikale Skalierung: Erhöhen und verringern Sie CPU und Speicher, ohne die Infrastrukturanzahl zu ändern.

Die horizontale Skalierung ist einfach zu erreichen, indem Load Balancer vor die Backend-Infrastruktur gestellt werden. Dadurch wird die Last verteilt, ohne dass sich dies auf vorhandene, laufende Transaktionen auswirkt. Bei der vertikalen Skalierung muss die Infrastruktur vertikal oder horizontal skaliert werden. Die gewünschte Kapazität wird parallel bereitgestellt, und die Workload wird auf neue Kapazität übertragen. Die an neue Kapazität übertragene Workload kann minimale oder keine Auswirkungen auf vorhandene Transaktionen haben, wenn das Anwendungssystem für die Verwaltung dieser Szenarios konzipiert ist.

Bei der Skalierung einer Anwendung ist es wichtig, nicht nur die Workload der Anwendung selbst zu berücksichtigen, sondern auch den Kommunikationsmechanismus, der sie mit anderen Anwendungen verbindet. Ein Kommunikationsmechanismus ist ein wesentlicher Bestandteil jeder verteilten Anwendung, der es verschiedenen Teilen des Systems ermöglicht, Informationen auszutauschen und zusammenzuarbeiten, um gemeinsame Ziele zu erreichen. Wenn die Arbeitslast einer Anwendung zunimmt, steigt auch die Nachfrage nach ihrem Kommunikationsmechanismus. Wenn der Kommunikationsmechanismus nicht skalierbar ist, kann er zu einem Engpass werden, der die Gesamtperformance der Anwendung einschränkt. Dies kann zu einer Beeinträchtigung der Benutzererfahrung, einer erhöhten Latenz und sogar zu Systemausfällen führen.

Um eine Architekturanwendung für eine elastische Skalierung zu entwerfen, müssen alle Aspekte von Compute-, Speicher-, Speicher-, Netzwerk-, Durchsatz- und Throttling-Grenzwerten gründlich berücksichtigt werden. Im Folgenden werden allgemeine Szenarios für die Entwicklung eines leistungsstarken, skalierbaren Systems erläutert. Bestimmen Sie Ihren Ansatz basierend auf Ihren Unternehmensanforderungen, Geschäftswerten und Prioritäten für die Ausführung und Bereitstellung Ihrer Workload in OCI.

Bedarfsgesteuerte Skalierung

Die On-Demand-Skalierung ist ein Feature von Cloud-Computing, mit dem Sie die Ihrer Anwendung oder Ihrem Service zugewiesenen Ressourcen basierend auf dem aktuellen Bedarf automatisch anpassen können. Je nach Workload können Sie die Anzahl der von Ihnen verwendeten Server, Speicher und anderen Ressourcen in Echtzeit erhöhen oder verringern. Beispiel: OCI Compute passt die Anzahl der Compute-Instanzen in einem Instanzpool basierend auf Metriken und Zeitplan an, um die gewünschte Kapazität entsprechend der Konfiguration zu erfüllen.

Scale-in und Scale-out

Scale-in bezieht sich auf die Reduzierung der Anzahl der Ressourcen, die einer Anwendung oder einem Service zugewiesen sind, während sich Scale-out auf die Erhöhung der Anzahl der Ressourcen bezieht. Sie können beide Arten der Skalierung verwenden, um Lastspitzen zu verarbeiten. Beispiel: OCI Burstable Instances sind für Szenarien ausgelegt, in denen eine Instanz typischerweise inaktiv ist oder eine geringe CPU-Auslastung mit gelegentlichen Spitzen aufweist. Nach Abschluss eines Bursts wird die Instanz auf die Baselinekapazität skaliert.

Servicelimits und Quotas

Entwerfen Sie Ihre Workload so, dass sie über verschiedene Module einer Anwendung hinweg skaliert werden kann. Beachten Sie auch Servicelimits für Mandanten und Compartment Quotas. Beispiel: Sie können 50 Load Balancer und 5000 MBps für ein Oracle Universal Credits-Abonnementmodell erstellen (ab heute, was sich in Zukunft ändern kann). Einige Servicelimits sind dynamisch und können je nach Nutzung im Laufe der Zeit erhöht werden. Informationen zu verschiedenen Limits und Quotas finden Sie in Ihrem OCI-Preismodell.

High Availability

Beseitigen Sie einzelne Fehlerquellen, und entwerfen Sie Ihre Workload, um ein maximales Potenzial für Betriebszeit und Barrierefreiheit zu gewährleisten. OCI bietet High Availability-Funktionen als Faultdomains und Availability-Domains, um Redundanz in Ihrer Workload sicherzustellen.

Beispiel: Die Verteilung Ihrer Anwendungsinfrastruktur an mehr als eine Faultdomain bietet Anti-Affinität, sodass sich Ihre Workload nicht auf derselben physischen Hardware im Data Center befindet. Eine Availability-Domain fügt eine zusätzliche Zuverlässigkeitsschicht hinzu, da verschiedene Data Center in derselben Region voneinander isoliert sind, fehlertolerant sind und wahrscheinlich nicht gleichzeitig ausfallen. Data Center innerhalb einer Region sind mit geringer Latenz und hoher Bandbreite miteinander verbunden, was Latenzprobleme reduziert.

Disaster Recovery

Im Falle eines katastrophalen Versagens durch natürliche oder von Menschen verursachte Katastrophen ist es wichtig, einen Notfallplan in der Arbeitslast zu haben, um sich in eine andere Region zu replizieren. Ein Recovery-Prozess ist die einzige Option in diesem Szenario, und der Grad der Wiederherstellung muss auf der Grundlage der Anwendungskritikalität, des zugehörigen Recovery-Zeitziels, (RTO) und des Recovery-Punktziels (RPO) konzipiert werden. OCI bietet mehrere Methoden für den Disaster Recovery-(DR-)Ansatz basierend auf Datendauerhaftigkeit, RTO und RPO.

Beispiel: Sie können Ihr System in einer anderen Region aus einem Datenbankbackup neu erstellen und eine Infrastruktur mit Infrastructure-as-a-Service (IaaS) und DevOps bereitstellen, um eine kostengünstige DR-Implementierung, aber einen höheren Datenverlust und eine höhere Nichtverfügbarkeit zu erreichen. Ein aktives/aktives System mit Echtzeitreplikation und Lastfreigabe hat höhere Kosten, aber nahezu keinen Datenverlust und Ausfallzeiten.

Kapazitätsplanung

Bestimmen Sie die Ressourcen, die zur Unterstützung der aktuellen und zukünftigen Anforderungen Ihrer Workload erforderlich sind, basierend auf Performanceanforderungen und Wachstumsprognosen, um die richtige Menge an Ressourcen und Autoscaling zuzuweisen. Sie können historische überwachte Kennzahlen für Prognosen verwenden.

Beispiel: Sie müssen die Ausprägung und Größe für den Datenbankspeicher im Voraus basierend auf der linearen Kapazität anstelle von On-Demand bereitstellen. Durch die Nutzung der historischen statistischen Nutzung können Sie Kapazitäten definieren, um eine Ad-hoc-Skalierung zu vermeiden.

Performancemonitoring

Messen, verfolgen und analysieren Sie die Performance von Cloud-Ressourcen- und Anwendungsstatistiken für Ihre Anwendung, um sicherzustellen, dass sie die Performanceanforderungen erfüllen und Benutzern eine optimale Performance bieten. Die Überwachung der Performance ist wichtig, damit die Anwendung Performanceprobleme identifizieren und Korrekturmaßnahmen ergreifen kann, bevor sie sich auf Benutzer auswirkt. OCI Application Performance Monitoring bietet zahlreiche Features zum Monitoring von Anwendungen und zur Diagnose von Performanceproblemen.

Beispiel: Application Performance Monitoring bietet einen umfassenden Einblick in die Performance und bietet die Möglichkeit, Probleme schnell zu diagnostizieren, während Sie sich auf die Bereitstellung von Kerngeschäftsprozessen konzentrieren. OCI überwacht mehrere Komponenten und Anwendungslogik, die auf Clients, Drittdiensten und Backend-Computing-Tiers verteilt sind, vor Ort oder in der Cloud.

Leistungsgrundsätze

Anwendungen müssen auf unterschiedliche Module und Komponenten skaliert werden. Um dies zu erreichen, ist es wichtig, dass Ihre Anwendung darauf ausgelegt ist, die Best Practices von OCI zu nutzen, um eine vertikale Skalierung ohne Ausfallzeiten vorzunehmen.

Beispiel: Wenn Ihre Anwendung bereits in dünne Microservices unterteilt ist, kann sie problemlos für leistungsstarke Szenarios auf Oracle Kubernetes Engine (OKE) oder OCI Container Instances bereitgestellt und skaliert werden. Alternativ können Sie auch Implementierungsansätze berücksichtigen, wie Load Balancer, Scatter-Gather (Pooling und Trennen), Ergebniscache, Shared Space (Informationsanreicherung), Pipe und Filter, MapReduce (Batch Join für I/O-Engpass), Massensynchronparallelität, Ausführungsorchestrator usw. Es gibt bekannte Entwurfsmuster wie Caching, Command Query Responsibility Segregation (CQRS), Anti-Korruption, Circuit Breaker, Event Sourcing, Publisher Subscriber, Sharding, Strangler, Saga, Throttling usw., damit Ihre Anwendung nativ ausgeführt wird.

Kosten gegenüber Kapazität

Die Kapazität in der Cloud kann durch Hinzufügen oder Entfernen von Infrastruktur erhöht oder verringert werden. Es ist wichtig, bereits bereitgestellte Kapazitäten effizient zu nutzen, um die Gesamtbetriebskosten zu senken. Es gibt einige Szenarien, in denen geschäftskritische Anwendungen Ausnahmen von der Bereitstellung von Kapazität im Voraus haben, um SLA-Verletzungen zu vermeiden, was gerechtfertigt ist. Treffen Sie Entscheidungen basierend auf den geschäftlichen Anforderungen und Prioritäten, bevor Sie sich für die Kapazität entscheiden, da der Leistungsbedarf proportional zur Kostensteigerung ist.

Effizienz:

Ein Aspekt bei der Entwicklung von Cloud-Anwendungen für die Skalierbarkeit besteht darin, die steigende Last oder den zunehmenden Datenverkehr kostengünstig zu bewältigen. Anwendungen müssen entwickelt und implementiert werden, um die Effizienz bei Ressourcennutzung und -kosten zu maximieren. Sie müssen die Ressourcennutzung überwachen und die automatische Skalierung so weit wie möglich automatisieren, während Sie die Kostenoptimierung und Leistungsverbesserung in Betracht ziehen. OCI bietet Autoscaling-Funktionen in den meisten unserer Services mit Konfiguration. Einige Cloud-Services können mit Drittanbietersystemen automatisiert werden.

Kompromisse

Kompromisse sind ein wichtiger Aspekt für Cloud-Anwendungen und Skalierbarkeit. Sie beinhalten Entscheidungen darüber, welche Aspekte einer Anwendung priorisiert werden müssen, um Skalierbarkeit zu erreichen. Wenn Anwendungen wachsen und komplexer werden, wird es immer schwieriger, alle Aspekte der Anwendung gleichzeitig zu optimieren. Daher müssen Sie Kompromisse eingehen, um eine optimale Skalierbarkeit zu erreichen.

Einige gemeinsame Kompromisse, die Sie berücksichtigen müssen, sind:

  • Performance gegenüber Kosten
  • Flexibilität gegenüber Komplexität
  • Resilienz gegenüber Kosten
  • Skalierbarkeit im Vergleich zur Sicherheit
  • Time-to-Market im Vergleich zur Skalierbarkeit

Verwendung von Serverless und Containern

Die Verwendung von Serverless und Containern kann die Skalierbarkeit in OCI erheblich verbessern. Auf diese Weise können Anwendungen in kleinere, effizientere Komponenten unterteilt werden, die bei Bedarf einfach nach oben oder unten skaliert werden können. In OCI können Sie unter OCI Container Engine for Kubernetes (OKE) für das Container-Deployment auswählen, um Microservices unabhängig zu skalieren. Ziehen Sie auch OCI Functions und OCI Container Instances in Betracht, um die elastische Architektur der serverlosen Plattform für hochskalierbare Services zur Bereitstellung Ihrer Workload zu nutzen.

Überlegungen zur Datenbank

Daten sind der wichtigste Teil jeder Anwendung. Ihr gesamtes System basiert auf Integrität und Informationen. Es ist wichtig, den richtigen Datenbanktyp zu berücksichtigen, der Ihren Anwendungs- und Geschäftsanforderungen entspricht.

Es gab eine Zeit, in der Informationen in relationalen Datenbankmanagementsystemen (RDBMS) aufbewahrt wurden. Jetzt in der Cloud können Sie aus verschiedenen Datenbankoptionen und Anbietern wählen. Heute erfüllen Datenbanken die individuellen Geschäftsanforderungen und reichen von der Mikrogröße bis hin zur unglaublich großen Kapazität für den Umgang mit Daten.

Beispiel: Oracle Autonomous Database eignet sich am besten für Transaktionsdaten, während MySQL für Analysen und maschinelles Lernen besser geeignet ist. Im Gegenzug eignet sich die Oracle NoSQL-Datenbank für einfache Daten, bietet jedoch vorhersehbare Latenzantworten im einstelligen Millisekundenbereich für einfache Abfragen. Sie können die Exadata-Infrastruktur für sicherere, leistungsstärkere und Isolationsanforderungen in Betracht ziehen.

Lagerungsaspekte

Daten sind in vielen Formaten, Größen und Zugriffsfrequenzen verfügbar, benötigen jedoch immer Speicherplatz für die Speicherung. Es gibt Optionen aus Objektspeicher, Blockspeicher und Dateispeicher zum Speichern von Daten, aber jeder hat einen bestimmten Zweck. OCI Object Storage ist für jeden Inhaltstyp konzipiert, der als Standard-, seltener und Archivspeicher gespeichert werden soll. OCI File Storage bietet ein herkömmliches Dateisystem, das als Netzwerkspeicher oder NFS gemountet werden kann. OCI Block Volume kann an eine Instanz angehängt werden und als Boot-Volume und Block-Volume verwendet werden.

Performancebasis

Dieser Ansatz wird verwendet, um das Baseline-Leistungsniveau für eine Anwendung zu bestimmen, die in der Cloud ausgeführt werden soll, um die erwartete Last aufrechtzuerhalten. Sie legt einen Referenzleistungspunkt fest. Dieser Punkt wird für zukünftige Referenzpunkte in Änderungen verwendet, die bei der Skalierung erforderlich sind, um die gewünschte Performanceebene zu erreichen.

Last- und Belastungstest

Lasttests simulieren nahezu reale Benutzerlasten, um die Performance der Anwendungsantwort auf erhöhten Traffic zu messen. Dadurch wird geprüft, ob ein System erwartete Benutzerlasten verarbeiten kann, ohne die Leistung zu beeinträchtigen oder abstürzt. Außerdem wird die Skalierbarkeit eines Systems anhand der variablen Belastung der Anwendung validiert. Auf diese Weise kann das Reaktionsverhalten Engpässe identifizieren und die Systemkonfiguration und Kapazitätsplanung optimieren.

Stresstests gehen über die erwartete Benutzerlast hinaus und validieren die Fähigkeit einer Anwendung, plötzliche Trafficspitzen oder ungewöhnliche Last zu bewältigen. Außerdem wird geprüft, ob ein System ungewöhnliche und unerwartete Belastungen verarbeiten kann, ohne das System zu unterbrechen oder die Leistung drastisch zu beeinträchtigen. Dadurch werden die Systemgrenzen erhöht, um Schwachstellen in der Systemarchitektur oder -kapazität zu identifizieren, was die Skalierbarkeit und Resilienz des Systems optimiert.

Flaschenhals identifizieren

In Cloud-Anwendungen ist es wichtig, die Skalierbarkeit und Performance einer Anwendung sicherzustellen, um Engpässe zu erkennen und kaskadierte Performanceeinbußen zu bewältigen. Identifizieren Sie Punkte im System, an denen der Datenfluss oder die Verarbeitung eingeschränkt oder verlangsamt wird, die Leistung sinkt und das System möglicherweise gegen die gewünschte Kapazität ausfällt. Engpässe können in verschiedenen Bereichen auftreten, einschließlich Netzwerk-, Speicher-, Verarbeitungs- und Datenbankzugriff.

Datengesteuerter Ansatz

Verwenden Sie Überwachungstools und Datenanalysen, um Daten für die Systemleistung, Nutzungsmuster und das Benutzerverhalten zu erfassen und zu analysieren, um einen logischen Ansatz zu implementieren, und Dateneinblicke, um die Systemleistung, Kapazität und Skalierbarkeit zu optimieren. Dies führt zu einer besseren Benutzererfahrung und einem höheren Geschäftswert. Einige wichtige Schritte zur Implementierung eines datengesteuerten Ansatzes sind:

  • Erfassung und Analyse von Daten.
  • Identifizieren Sie Muster und Trends.
  • Optimieren Sie die Systemkapazität basierend auf Erkenntnissen.
  • Kontinuierliche Überwachung und Anpassung der Systemleistung.

Zustand überwachen

Die Überwachung des Anwendungszustands für Cloud-Anwendungen ist entscheidend, um die gewünschte Skalierbarkeit und Performance sicherzustellen. Eine gesunde Anwendung arbeitet effizient und erfüllt die Anforderungen der Nutzer. Bei einer fehlerhaften Anwendung treten Probleme auf, wie z.B. langsame Antwortzeit, hohe Fehlerrate und Abstürze. Die Überwachung und Reaktion auf den Zustand von Anwendungen kann zu einer Früherkennung von Problemen führen, die Performance optimieren, die Benutzererfahrung verbessern und Kosten senken. OCI Monitoring überwacht Cloud-Ressourcen aktiv und passiv mit dem Metrik- und Alarmfeature, um Konfigurationen zu erfassen und zu bearbeiten.

Performanceprobleme beheben

Performanceprobleme erfordern unterschiedliche Ansätze zur Fehlerbehebung in Cloud-Umgebungen. Ihre Zugriffsebenen in der Cloud können sich von Ihrem lokalen System oder Ihrer On-Premise-Infrastruktur unterscheiden. Schritte, mit denen Sie Performanceprobleme in der Cloud beheben können, sind:

  • Definieren Sie das Problem.
  • Erfassen Sie die Daten.
  • Daten analysieren.
  • Problemursachen identifizieren
  • Testen und isolieren.
  • Beheben Sie das Problem.
  • Überwachen und validieren.

Prüfen Sie die allgemeinen Fehlerbehebungsschritte, die mit jedem OCI-Service bereitgestellt werden.

Limits identifizieren

Es ist wichtig, einzelne Cloud-Servicelimits zu berücksichtigen, um Ihr System hoch skalierbar zu machen und maximale Kapazität zu erreichen. Indem Sie die Leistungsgrenzen kennen, können Sie Ihr System so gestalten, dass es innerhalb der Grenzen funktioniert und Performanceengpässe oder Serviceunterbrechungen vermieden werden. Beispiel: Eine OCI-Compute-Instanz mit einer Bare-Metal- oder virtuellen Maschine hat immer bekannte Limits und Probleme zu berücksichtigen. Mit OCI Load Balancer können Sie die Performance steigern, indem Sie zusätzliche Kapazität hinter dem Load Balancer bereitstellen.

Unabhängiges Service-SLA

Die Entwicklung eines leistungsstarken und skalierbaren Systems erfordert eine gründliche Berücksichtigung jedes Cloud-Service-SLA, um Ausfallzeiten zu reduzieren, auch im Katastrophenfall. Jeder Service in der Cloud verfügt über ein genau definiertes SLA und Service Level Objectives (SLOs). Möglicherweise müssen Sie Redundanz im System berücksichtigen, um die Verfügbarkeit einzelner Services oder Services mit den geringsten SLA-Zeiten zu erfüllen oder zu übertreffen. OCI hat Service Level Objective für PaaS und SaaS Public Cloud Services definiert, die Sie bei Ihrem Design und Ihrer Architektur berücksichtigen sollten.

Versionshinweise

OCI aktualisiert Services ständig mit neuen Features, Funktionen und Patches. Wenn Sie sich der neuesten Änderungen bewusst sind, können Sie Ihre Anwendungen verbessern und neue Funktionen implementieren. Die Updates enthalten auch Bugfixes und Sicherheitsupdates, Serviceunterbrechungen und Ausfallzeiten, Änderungen an Preis- und Serviceplänen, Compliance- und regulatorische Änderungen. OCI-Versionshinweise bieten eine konsolidierte Ansicht für Cloud-Services, um über Ankündigungen und Änderungen auf dem Laufenden zu bleiben.

Kostenanalyse gegenüber Kapazität

Für die Skalierbarkeit ist es wichtig, die Anforderungen an Größe und Form zu berücksichtigen und eine zusätzliche Kappe hinzuzufügen. Es ist auch wichtig, den Cloud-Service zu berücksichtigen, der Ihren Anforderungen entspricht, anstatt nur teure Services zu wählen, ohne die Kosten zu rechtfertigen. Vermeiden Sie die Verwendung unnötiger Services und das Hinzufügen von Schichten zu Ihrem System, um Kosten und Latenz zu reduzieren. Eine gründliche Analyse der Kosten, Features und Verfügbarkeit von Cloud-Services ist entscheidend für die Entwicklung eines äußerst kostengünstigen Systems.