Wie kann eine Todesumarmung auf der EC2-Instanz verhindert werden?


9

Ich habe eine iOS-App im App Store und vor kurzem habe ich einen enormen Anstieg der Zugriffe auf meine auf EC2 gehostete Zielseite erhalten, was dazu führte, dass die Seite nicht reagierte. Zum Glück konnte ich sie wiederherstellen, indem ich die Instanz neu startete und auf a aktualisierte t2.medium.

Jetzt möchte ich jemanden einstellen, der eine Technologie implementiert, um denselben Tod erneut zu verhindern. Meine Erfahrung reicht nur so weit, dass ich grundlegende Devops-Dinge verstehen kann, aber nicht genug für Load Balancer unter AWS. Ich möchte wissen, was eine erschwingliche Implementierung für meine Instanz ist.

Meine Zielseite und mein iOS-App-Backend werden auf derselben Instanz gehostet.


1
Ist Ihre Zielseite statisch?
Michael - sqlbot

Antworten:


8

Wenn Sie etwas schnelles wollen, um dies ohne viel mehr Wissen zu sortieren, würde ich elastische Bohnenstange empfehlen. Es ist eine weitere AWS-Anwendung, die die Konfiguration des Load Balancers und die Instanzskalierung für Sie übernimmt.

Zusätzlich zum Load Balancer und den Instanzen fallen keine zusätzlichen Kosten an, sodass Sie weiterhin Instanzen vom Typ t2 verwenden können, aber die elastische Bohnenstange so weit skalieren lassen können, wie Sie möchten.

Die automatische Skalierung erfolgt nicht sofort und in Zeiten mit Spitzenverkehr dauert es normalerweise nur wenige Minuten, um mit einem Spitzenwert fertig zu werden. Sie ist jedoch viel besser als die manuelle Skalierung der Instanzgröße und sehr einfach zu handhaben mit.


1

Ich würde die oben erwähnte automatische Skalierung mit einigen CloudWatch-Alarmen empfehlen, um den automatischen Skalierungsprozess zu starten, wenn bestimmte Schwellenwerte ansteigen, und nicht, wenn er bereits zu weit entfernt ist.

Beispielsweise; Konfigurieren Sie CloudWatch so, dass Ihr Server überwacht wird, wenn die CPU 30 Sekunden oder länger bei 50% oder höher ist, und starten Sie den automatischen Skalierungsprozess.

Dies ist möglicherweise nicht völlig fehlerfrei, aber es ist einfach über einige Online-Anleitungen und alle über die GUI konfigurierbar.

Wenn Ihre Zielseite statisch ist, können Sie diese auf einem kostenlosen t2.micro-Tier hosten und ein anderes t2.micro-Free-Tier für Ihre App verwenden.


Autoscaling ist nicht die ganzheitliche Antwort bei plötzlichem Verkehrsanstieg. Das Fenster zur Erkennung der automatischen Skalierung liegt zwischen 1 und 5 Minuten. Abhängig von Ihrer Bereitstellung kann dies ebenfalls einige Zeit dauern. Im Allgemeinen besteht die richtige Antwort darin, Instanzen heiß auszuführen, dh über dem wahrgenommenen Verkehrsaufkommen zu liegen, und die automatische Skalierung zuzulassen, um diesen Spielraum beizubehalten.
Matt O.

1

Ich würde gerne dabei helfen, wenn Sie Hilfe suchen. Abhängig von Ihrer Seite benötigen Sie möglicherweise überhaupt kein ec2. Wenn Sie beispielsweise etwas Statisches oder JavaScript bereitstellen, kann es von s3 mit einer Cloudfront-Distribution bereitgestellt werden. Oder wir könnten möglicherweise eine automatische Skalierungsgruppe verwenden, wenn dies unbedingt erforderlich ist.


1

Es gibt zwei allgemeine Strategien für den Umgang mit Verkehrsstößen: Kapazitätserhöhung und Kostensenkung.

Eine Erhöhung der Kapazität bedeutet eine automatische Skalierung, über die sich alle sehr gefreut haben, als die ersten öffentlichen Clouds verfügbar wurden. Im einfachsten Sinne werden dadurch mehr Webserver basierend auf der Last für Sie gestartet und einem Load Balancer hinzugefügt. Da die Verwaltung jedoch schwierig sein kann, gibt es auch automatischere Lösungen wie Elastic Beanstalk.

Das Problem bei der automatisierten Kapazitätserweiterung besteht darin, dass auch die Rechnungserweiterung automatisiert wird - 10x normaler Datenverkehr bedeutet 10x Server bedeutet 10x Geld, das Sie bezahlen müssen. Das ist der Grund, warum Sie, obwohl es eine nützliche Strategie ist, immer daran denken sollten, wie viel Sie betrügen können.

Mit Cheat meine ich Cache, der auf der Idee beruht, dass Sie Benutzern die meiste Zeit leicht veraltete Daten geben können und sie es nicht bemerken, und das kann Ihnen enorm viel Zeit sparen. Stellen Sie sich vor, Sie haben eine Seite, auf der Sie entscheiden, dass sie in Ordnung ist, wenn sie fünf Sekunden veraltet ist, und sie erhält 20 Anforderungen / s. Ohne Caching führen Sie diese Berechnung 1200 Mal pro Minute aus, während sie beim Caching nur 12 beträgt. Sie können sehen, wie dies einen enormen Unterschied bewirken kann.

Es gibt natürlich viele Arten von Caching, und eine erfolgreiche Website wird mehrere davon verwenden. Für Ihren Anwendungsfall gibt es jedoch zwei ziemlich gute und einfache Optionen.

Die erste besteht darin, die Site vollständig statisch zu machen. Dies setzt voraus, dass Sie dies tun können, aber wenn Sie können, dann muss Nginx das HTML direkt bereitstellen, und es kann Tonnen von Anfragen ohne Schweiß bedienen .

Wenn Sie ein gewisses Maß an Dynamik benötigen, ist das Zwischenspeichern von ganzen Seiten eine gute Option. Nginx hat einige Möglichkeiten, dies zu tun, aber ich mag Lack wegen seiner Flexibilität wirklich.

Unabhängig davon, für welche Option oder Optionen Sie sich entscheiden, stellen Sie sicher, dass Sie Lasttests durchführen, um zu überprüfen, ob Sie sie ordnungsgemäß eingerichtet haben. Manchmal führt das Fixieren eines Punktes zu einem neuen Engpass.


0

Ich möchte unsere Erfahrungen mit AWS teilen. Wir haben unsere Anwendung auf EC2 bereitgestellt und haben das gleiche Problem und auch hohe Kosten. Wir haben unsere Anwendung Amazon EC2 Container Service bereitgestellt, obwohl unsere Anwendung monolithisch war, aber wir haben erreicht

  • Verfügbarkeit
  • Kosteneffizient
  • Skalierbarkeit

Der Application Load Balancer verarbeitet den Datenverkehr und leitet ihn an die fehlerfreie Instanz weiter. Sie können mehrere Aufgaben derselben Dienste ausführen, ohne sich um die Skalierung und den Lastausgleich kümmern zu müssen.

Diese Architektur erleichtert die Implementierung der Fehlerisolation. Mit Techniken wie Integritätsprüfung, Caching, Schotten oder Leistungsschaltern können Sie den Explosionsradius einer fehlerhaften Komponente verringern und die Gesamtverfügbarkeit einer bestimmten Anwendung verbessern.


Es gibt keine separate Preisgestaltung für ECS , nur die zugrunde liegenden EC2-Ressourcen. Wie war die Verwendung von ECS kostengünstiger? Es sollte dieselbe Menge an Ressourcen verbrauchen, unabhängig davon, ob Sie die Container selbst verwalten oder Amazon dies tun lassen.
Boykott SE für Monica Cellio

im container wenn du alpine mit 5mb und ec2 verwendest, verwendest du ubuntu mit 2 gb? Welches ist das Beste? in t2 micro können sie 5 php container mit skalierung in und aus auf der basis des verkehrs betreiben. können sie in ec2 mit skalierung in und skalierung ausführen?
Adiii

Sie müssen Ubuntu nicht für ec2-Instanzen verwenden. Sie können ein Alpenbild hochladen und dieses verwenden, wenn Sie möchten. Wenn Sie alles mit ECS zum Laufen gebracht haben, ist das großartig und es ist unwahrscheinlich, dass Sie zurückkehren möchten. Mein Punkt ist jedoch, dass die bloße Umstellung auf ECS eine App nicht skalierbarer oder kostengünstiger macht. Es sind andere Änderungen, die Sie gleichzeitig an der App, der Infrastruktur und der Architektur vorgenommen haben.
Boykott SE für Monica Cellio

0

Dies hängt stark von der spezifischen Architektur ab, aber zum Beispiel:

  • Laden Sie Ihre Website mit CloudFront von vorne, um die Belastung des Hosts zu verringern
  • Verwenden Sie den clientseitigen Hosting-Service in S3 für die Skalierung
  • Elastic Load Balancer mit einer Autoscaling-Gruppe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.