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.
Antworten:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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
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.
quelle
Dies hängt stark von der spezifischen Architektur ab, aber zum Beispiel:
quelle