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

On-Demand-Skalierung ist ein Feature von Cloud-Computing, mit dem Sie die Ressourcen, die Ihrer Anwendung oder Ihrem Service zugewiesen sind, automatisch basierend auf dem aktuellen Bedarf anpassen können. Je nach Workload können Sie die Anzahl der Server, Speicher und anderen Ressourcen, die Sie in Echtzeit verwenden, 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 von Ressourcen, die einer Anwendung oder einem Service zugewiesen sind, während Scale-out die Erhöhung der Anzahl von Ressourcen bedeutet. Sie können beide Arten der Skalierung verwenden, um Spitzen in der Last zu behandeln. Beispiel: Burstfähige OCI-Instanzen sind für Szenarien ausgelegt, in denen eine Instanz typischerweise inaktive ist oder bei geringer CPU-Auslastung gelegentliche Spitzen aufweist. Nachdem ein Burst abgeschlossen ist, wird die Instanz auf die Baselinekapazität skaliert.

Servicelimits und Quotas

Entwerfen Sie Ihre Workload so, dass sie auf verschiedene Module einer Anwendung verteilt ist, um sie zu skalieren. Berücksichtigen 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 (Stand heute, was sich in Zukunft ändern kann). Einige Servicelimits sind dynamisch und können je nach Nutzung im Laufe der Zeit erhöht werden. Weitere Limits und Quoten finden Sie in Ihrem OCI-Preismodell.

High Availability

Beseitigen Sie einzelne Fehlerquellen, und entwerfen Sie Ihre Workload, um das maximale Potenzial für Betriebszeit und Zugänglichkeit sicherzustellen. 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 Scheiterns von Naturkatastrophen oder von Menschen verursachten 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 die Recovery-Ebene muss basierend auf der Anwendungskritikalität, dem zugehörigen Recovery Time Objective (RTO) und dem Recovery Point Objective (RPO) entwickelt 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 diese die Performanceanforderungen erfüllen und den Benutzern eine optimale Performance bieten. Die Überwachung der Performance ist wichtig, damit die Anwendung Performanceprobleme erkennen und Korrekturmaßnahmen ergreifen kann, bevor sie sich auf die Benutzer auswirkt. OCI Application Performance Monitoring bietet zahlreiche Features zum Überwachen von Anwendungen und zur Diagnostik 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 leicht 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 wählen, um Microservices unabhängig zu skalieren. Erwägen Sie auch OCI Functions und OCI Container Instances, um die serverlose plattformelastische Architektur für hoch skalierbare 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 werden in vielen Formaten, Größen und Zugriffshäufigkeit geliefert, 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 wurde für jeden Inhaltstyp entwickelt, der als Standard-, Seltenheits- und Archivspeicher gespeichert werden soll. OCI File Storage wurde entwickelt, um ein herkömmliches Dateisystem bereitzustellen, das als Netzwerkspeicher oder NFS gemountet werden kann. OCI Block Volume ist für das Anhängen an eine Instanz gedacht und kann 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 Benutzer. 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 aktiv und passiv Cloud-Ressourcen mit dem Metrik- und Alarmfeature, um Konfigurationen zu erfassen und darauf zu reagieren.

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 allgemeine Schritte zur Fehlerbehebung, die mit jedem OCI-Service bereitgestellt werden.

Limits identifizieren

Es ist wichtig, individuelle Cloud-Servicelimits zu berücksichtigen, um Ihr System hoch skalierbar zu machen und maximale Kapazität zu erreichen. Wenn Sie die Leistungsbeschränkungen kennen, können Sie Ihr System so gestalten, dass es innerhalb der Grenzen funktioniert, und Performanceengpässe oder Serviceunterbrechungen vermeiden. Beispiel: Für eine OCI-Compute-Instanz mit einer Bare-Metal- oder Virtual-Machine sind 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-SLAs, um Ausfallzeiten zu reduzieren, selbst 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 in Betracht ziehen, um die Verfügbarkeit einzelner Services oder Services mit den geringsten SLA-Zeiten zu erfüllen oder zu übertreffen. OCI has defined Service Level Objective for PaaS and SaaS Public Cloud Services to consider in your design and architecture.

Versionshinweise

OCI aktualisiert Services ständig mit neuen Features, Funktionen und Patches. Wenn Sie sich über die neuesten Änderungen informieren, können Sie Ihre Anwendungen verbessern und neue Funktionen implementieren. Die Updates enthalten außerdem 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.