So senken Sie die Kosten in AWS

Die Welt verändert sich dramatisch. Viele Unternehmen suchen nach einer Möglichkeit, Kosten zu senken, nur um zu überleben. Gleichzeitig nimmt die Belastung der Online-Dienste zu - insbesondere im Zusammenhang mit der Organisation von Fernarbeit, der Durchführung von Videokonferenzen und dem Online-Lernen.

Unter diesen Bedingungen ist es einerseits äußerst wichtig, die Zuverlässigkeit und Skalierbarkeit Ihrer Infrastruktur sicherzustellen. Auf der anderen Seite fliegen Sie nicht in die Pipe mit dem Kauf von Servern, Festplatten, Zahlung für den Verkehr.

Wir bei Bitrix24 nutzen Amazon Web Services sehr aktiv. In diesem Artikel werde ich auf verschiedene AWS-Funktionen eingehen, mit denen Sie Ihre Kosten senken können.

Bitrix24 ist ein globaler Service, wir arbeiten für Kunden auf der ganzen Welt. Seit 2015, seit Inkrafttreten des Gesetzes 242- über die Lokalisierung personenbezogener Daten, werden die Daten russischer Benutzer auf Servern in Russland gespeichert. Die gesamte Infrastruktur des Dienstes für die verbleibenden Kunden auf der ganzen Welt wird jedoch in Amazon Web Services bereitgestellt.

Die Wirtschaftskrise ist bereits eine vollendete Tatsache. Der Dollar ist gewachsen und es ist unwahrscheinlich, dass er in naher Zukunft zu seiner vorherigen Position zurückkehrt. Daher wird das Bezahlen für das Hosting in Fremdwährung ziemlich mühsam.

Wenn Sie unter diesen Bedingungen Ihre Ressourcen weiterhin in AWS platzieren, sind Sie höchstwahrscheinlich an Techniken interessiert, mit denen Sie beim Mieten von Infrastruktur sparen können.

Ich werde über die wichtigsten sprechen, die wir selbst seit vielen Jahren verwenden. Wenn Sie andere Methoden verwenden, teilen Sie diese bitte in den Kommentaren mit.

So lass uns gehen.

RI - Reservierte Instanzen


Der einfachste und naheliegendste Weg, um bei AWS Geld zu sparen, ist die Verwendung reservierter EC2-Instanzen. Wenn Sie wissen, dass Sie bestimmte Instanzen auf jeden Fall mindestens ein Jahr lang verwenden werden, können Sie eine Vorauszahlung leisten und einen Rabatt von 30% bis 75% erhalten.

Beispiel für Berechnungen für c5.xlarge-Instanzen:

Bild

Alle Preise und Berechnungen finden Sie hier .

Manchmal sieht es kompliziert und verwirrend aus, aber im Allgemeinen lautet die Logik wie folgt:

  • Je länger die Reservierungsdauer - 1 oder 3 Jahre - ist, desto größer ist der Rabatt.
  • Je größer die Vorauszahlung sofort ist - Sie können sie ohne Vorauszahlung ausführen, desto mehr Vorauszahlung können Sie leisten - desto höher ist der Rabatt.
  • Wenn wir einen bestimmten Instanztyp reservieren, aber keinen konvertierbaren verwenden, gibt es einen größeren Rabatt.

Für uns selbst reservieren wir für 1 Jahr, da die Planung für 3 Jahre ziemlich schwierig ist. Und das ermöglicht eine gute Einsparung von EC2.

Spot-Instanzen


Die Verwendung von Spot-Instanzen ist im Wesentlichen eine Art Ressourcenaustausch. Wenn Amazon über viele nicht genutzte Ressourcen verfügt, können Sie den Höchstpreis festlegen, den Sie bereit sind, für spezielle „Spot-Instanzen“ zu zahlen.

Wenn der aktuelle Bedarf in einer bestimmten Region und AZ (Availability Zone) gering ist, werden Ihnen diese Ressourcen zur Verfügung gestellt. Darüber hinaus zu einem Preis, der 3-8 mal niedriger ist als der Preis von On-Demand.

Was ist der Haken?

Das einzige ist, dass die angeforderten Ressourcen nicht an Sie weitergegeben werden, wenn keine freie Kapazität vorhanden ist. Und wenn die Nachfrage stark steigt und der Spotpreis Ihren festgelegten Höchstpreis überschreitet, wird Ihr Spot beendet.

Natürlich sind solche Instanzen beispielsweise für eine Datenbank in der Produktion nicht geeignet. Bei einigen Aufgaben, die beispielsweise mit bestimmten Berechnungen verbunden sind, ist das Rendern und Berechnen von Modellen für Tests eine hervorragende Möglichkeit zum Speichern.

Mal sehen, um welche Beträge wir in der Praxis kämpfen. Und wie oft können Spots zu einem Preis „verschwinden“.

Hier ist ein Beispiel für den Preisverlauf von Spot-Instanzen direkt von der AWS-Konsole für die Region eu-central-1 (Frankfurt) für c5.4xlarge-Instanzen:

Bild

Was sehen wir?

  • Der Preis ist etwa dreimal niedriger als bei Bedarf.
  • In allen drei AZs in dieser Region sind Spot-Instanzen verfügbar.
  • Seit drei Monaten ist der Preis nie gestiegen. Dies bedeutet, dass ein vor drei Monaten gestarteter Spot mit einem bestimmten Höchstpreis von beispielsweise 0,3 USD weiterhin funktionieren würde.

So verwenden wir Spots in der Praxis:

Bild

- Wir verwenden Spots für Anwendungsserver.

- Für sie verwenden wir aktiv das CloudWatch + Auto Scaling-Bundle, um den ganzen Tag über automatisch zu skalieren: Die Last steigt - neue Instanzen werden gestartet, die Last sinkt - sie werden gelöscht.

- Aus Sicherheitsgründen arbeiten zwei Auto Scaling-Gruppen für Balancer - falls die Flecken ausgehen. Eine AS-Gruppe - mit normalen (On-Demand-) Instanzen, die zweite - mit Spots. Amazon über CloudWatch Events warnt innerhalb von 2 Minuten, dass die Spot-Instanz gelöscht (beendet) wird. In diesem Fall verarbeiten wir diese Ereignisse und schaffen es, die Hauptgruppe auf die erforderliche Anzahl von Instanzen zu erweitern.

Details hier - Spot Instance Interruption Notices .

- Um effizienter mit der automatischen Skalierung zu arbeiten und die Maschinen in der Gruppe mit maximaler Punktzahl zu verwenden, verwenden wir diesen Ansatz:

  1. Die Spot-Gruppe hat eine untere obere Müllhalde - wir beginnen früher, „zu vergrößern“.
  2. Und eine niedrigere untere Müllhalde - wir beginnen später, „nach unten“ zu skalieren.
  3. Für eine reguläre Gruppe ist das Gegenteil der Fall.

EC2-Instanzspeicher


Jeder, der mit AWS arbeitet, weiß, dass die Hauptlaufwerke für EC2-Instanzen EBS (Elastic Block Store) sind. Sie können an Instanzen gemountet, deaktiviert, an andere Instanzen gemountet und von diesen aus mit Snapshots versehen werden.

Alle EBS werden je nach Art auf die eine oder andere Weise berechnet. Und sie kosten ziemlich viel Geld.

Gleichzeitig ist für viele Arten von Instanzen beim Erstellen die Verbindung lokaler Festplatten verfügbar - EC2 Instance Store .

Das Hauptmerkmal dieser Datenträger ist, dass diese Daten nach dem Start verloren gehen, wenn Sie die Instanz mit einem solchen Datenträger stoppen.

Gleichzeitig sind sie jedoch bedingt kostenlos - es erfolgt eine Zahlung nur für die Instanz selbst.

Solche Festplatten können perfekt für temporäre Daten verwendet werden, für die kein ständiger Speicher erforderlich ist - Swaps, Cache und andere temporäre Daten. Die Leistung der Instance Store-Laufwerke ist recht hoch: Zusätzlich zu den sehr alten Instanztypen werden jetzt entweder SSDs oder NVMe-SSDs für sie verwendet.

Infolgedessen: Wir schließen weniger EBS-Festplatten an und zahlen weniger.

S3 Unvollständige mehrteilige Uploads


In der obigen Diskussion ging es hauptsächlich um EC2. Als nächstes beschreiben wir einige Tricks, die bei Verwendung von S3 (Simple Storage Service) gespeichert werden.

Wenn Sie aktiv mit S3 arbeiten, wissen Sie wahrscheinlich, dass sowohl S3 als auch die meisten Clients für die Arbeit mit diesem Speicher das mehrteilige Hochladen unterstützen - ein großes Objekt wird mit „Teilen“ geladen, die dann zu einem einzigen Objekt „zusammengesetzt“ werden.

Das funktioniert gut, aber es gibt einen Hinterhalt.

Wenn der Download aus irgendeinem Grund nicht abgeschlossen ist (z. B. wurde die Verbindung unterbrochen und der Download nicht fortgesetzt), werden die heruntergeladenen Teile nicht von selbst gelöscht. Sie nehmen jedoch Platz ein, Sie bezahlen dafür.

Und eine unangenehme Überraschung: Diese unvollständigen Daten sind bei der Arbeit mit Standardtools für S3 überhaupt nicht sichtbar: weder durch "ls" in cli noch in Client-Programmen. Sie finden sie beispielsweise in aws cli mit dem Befehl list-multipart-uploads .

Aber mit ihnen zu arbeiten ist zu anstrengend ...

Es wäre am logischsten, eine Option zum Speichern unvollständiger mehrteiliger Uploads in den Einstellungen eines bestimmten Buckets auszuschließen. Aber aus irgendeinem Grund tat Amazon dies nicht.

Es gibt jedoch eine Möglichkeit, Ihr Leben zu vereinfachen und unvollständige mehrteilige Uploads automatisch zu entfernen. In den Bucket-Einstellungen auf der Registerkarte "Verwaltung" befindet sich ein Abschnitt "Lebenszyklus". Dies ist ein praktisches Tool, mit dem Sie verschiedene automatische Regeln für die Arbeit mit Objekten konfigurieren können: Verschieben Sie sie in andere Repositorys, löschen Sie sie nach einiger Zeit (verfallen) und steuern Sie - einschließlich - das Verhalten unvollständiger mehrteiliger Uploads.

Bild

Ein ausführlicher Artikel dazu ist im AWS-Blog zu finden - allerdings mit Beispielen aus der alten Benutzeroberfläche, aber alles ist ziemlich klar.

Wichtig ist, dass der zum Löschen unvollständiger Daten konfigurierte Lebenszyklus nicht nur für neue, sondern auch für vorhandene Objekte funktioniert.

Der tatsächlich in S3 belegte Speicherplatz kann über CloudWatch überwacht werden. Als wir die Entfernung von unvollständigen mehrteiligen Uploads einrichteten, waren wir überrascht, dass wir mehr als ein Dutzend Terabyte freigesetzt haben ...

S3 Intelligentes Tiering


S3 hat verschiedene Speicherklassen:

  1. Standard.
  2. Standard-IA (seltener Zugriff) - für Objekte, auf die nur selten zugegriffen wird.
  3. Eine Zone-IA - für relativ unkritische Daten. In dieser Klasse werden Objekte auf weniger Punkte repliziert.
  4. Glacier ist ein sehr billiger Speicher, aber Sie können nicht sofort ein Objekt daraus erhalten. Sie müssen eine spezielle Anfrage stellen und eine Weile warten.

Alle haben unterschiedliche Nutzungsbedingungen und unterschiedliche Preise. Sie können und sollten kombiniert werden - abhängig von Ihren unterschiedlichen Aufgaben.

Vor relativ kurzer Zeit ist jedoch eine andere sehr interessante Art von Speicher aufgetaucht - Intelligent Tiering.

Das Wesentliche seiner Arbeit ist folgender: Gegen eine geringe zusätzliche Gebühr wird die Überwachung und Analyse Ihrer Daten in S3 durchgeführt, Anrufe werden überwacht, und wenn 30 Tage lang keine Anrufe eingehen, wird das Objekt automatisch in den Speicher für seltenen Zugriff verschoben, was erheblich weniger kostet als der Standardspeicher. Wenn nach einiger Zeit erneut auf das Objekt zugegriffen wird - gleichzeitig tritt kein Leistungsverlust auf -, wird es erneut in das Standardzugriffs-Repository verschoben.

Die wichtigste Annehmlichkeit: Sie selbst müssen nichts tun.

Amazon wird alles „auf intelligente Weise“ selbst erledigen - es wird herausfinden, welche Objekte wo abgelegt werden sollen.

Durch die Aktivierung von Intelligent Tiering haben wir bei einigen Buckets bis zu 10-15% gespart.

Alles klingt zu gut und magisch. Aber kann es nicht einige Fallstricke geben? Sie sind es und sie müssen natürlich berücksichtigt werden.

  • Für Überwachungseinrichtungen wird eine zusätzliche Gebühr erhoben. In unserem Fall ist es vollständig durch die Einsparungen abgedeckt.
  • Sie können Intelligent Tiering für alle Objekte verwenden. Objekte mit weniger als 128 KB werden jedoch niemals auf die seltene Zugriffsebene übertragen und immer zum regulären Preis bezahlt.
  • Nicht geeignet für Gegenstände, die weniger als 30 Tage gelagert werden. Solche Objekte werden noch mindestens 30 Tage im Voraus bezahlt.

Wie aktiviere ich Intelligent Tiering?

Sie können die Speicherklasse INTELLIGENT_TIERING in der S3-API oder CLI explizit angeben.

Außerdem können Sie die Lifecycle-Regel konfigurieren, nach der beispielsweise alle Objekte nach einer bestimmten Speicherzeit automatisch in Intelligent Tiering verschoben werden.

Bild

Lesen Sie mehr im selben AWS-Blog .

Gletscher


Wenn wir über verschiedene Speicherklassen in S3 sprechen, ist natürlich auch Glacier erwähnenswert .

Wenn Sie Daten haben, die über Monate und Jahre gespeichert werden müssen, auf die jedoch nur sehr selten zugegriffen werden kann, z. B. Protokolle oder Sicherungen, sollten Sie die Verwendung von Glacier in Betracht ziehen. Der Preis seiner Verwendung ist um ein Vielfaches niedriger als der Standard S3.

Für eine bequeme Arbeit mit Glacier können Sie dieselben Lebenszyklusregeln verwenden.

Sie können beispielsweise eine Regel festlegen, nach der ein Objekt für einige Zeit in einem regulären Speicher gespeichert wird, z. B. 30 bis 60 Tage (normalerweise ist ein zeitnaher Zugriff auf die nächstgelegenen Protokolle oder Sicherungen erforderlich, wenn wir über deren Speicherung sprechen). Anschließend wird es verschoben Gletscher und nach 1-2-3 ... Jahren - komplett entfernt.

Es ist viel billiger als das einfache Speichern in S3.

* * *

Ich habe über einige Tricks gesprochen, die wir selbst aktiv anwenden. AWS ist eine riesige Infrastrukturplattform. Sicherlich haben wir nicht über Dienste gesprochen, die Sie nutzen. Wenn es in AWS andere Möglichkeiten zum Speichern gibt, die für Sie nützlich sind, teilen Sie dies bitte in den Kommentaren mit.

All Articles