Speichern Sie ein Bildarchiv für eine Site im Azure BLOB-Speicher

Der Artikel beschreibt die Erfahrung beim Organisieren der Budgetspeicherung eines Bildarchivs für eine Website mit Millionen von Anzeigen.



In meinem Fall werden Bilder als Fotografien von Wohnungen, Häusern, Grundstücken usw. verstanden. Ich habe mein eigenes Projekt , eine Website mit Anzeigen für den Verkauf und die Vermietung von Immobilien. Die Website gibt es seit ungefähr 6 Jahren und in dieser Zeit hat sich eine ziemlich große Anzahl von Anzeigen angesammelt. Auf jeder Objektkarte werden Fotos angezeigt, durchschnittlich 8 Fotos pro Anzeige. Eigentlich werde ich diese Fotos in der Cloud speichern, damit ich sie später den Besuchern auf Objektkarten zeigen kann.

Wie habe ich sie vorher aufbewahrt? - Auf keinen Fall. Ich habe keine Bilder aufbewahrt, außer denen, die manuell platziert wurden. In den meisten Fällen gelangen Anzeigen über Partner über den automatischen Feed-Upload auf die Website. Im Feed für jedes Objekt gibt es Links zu Fotos - ich speichere die Links und gebe dem Besucher ein Foto direkt vom Partner. Diese Schaltung funktioniert hervorragend und spart eine Menge Ressourcen.

Die Fotos, die Besucher in der Auswahl der Anzeigen oder auf der Karte des Objekts sehen, werden tatsächlich aus Ressourcen von Drittanbietern geladen.

Es gibt eine Einschränkung in Bezug auf die Besonderheiten der Site: Archivobjekte werden niemals gelöscht. Das heißt, Nachdem die Anzeige aus der Veröffentlichung entfernt wurde, verschwindet sie zwar aus den Suchergebnissen, der direkte Link ist jedoch immer verfügbar (ohne die Kontakte des Verkäufers). Seit einiger Zeit leben noch Links zu Fotografien, manchmal jahrelang, aber früher oder später sterben sie. Archivierte Objekte sind wertvoll, da Besucher von Suchmaschinen weiterhin zu ihnen kommen. Außerdem wird aus dem Archiv eine Preiskarte erstellt (ich habe bereits darüber geschrieben ), und ich habe versehentlich eine zusätzliche Einnahmequelle für das Projekt in Form des Verkaufs von Kontaktinformationen von Archivobjekten entdeckt. Warum sie sie kaufen, weiß ich nicht genau, aber ich nehme an, dass Besucher Kontakte erhalten möchten, weil sie der Meinung sind, dass die Werbung versehentlich oder versehentlich aus der Veröffentlichung entfernt wurde. Es kommt wahrscheinlich auch vor, dass sie etwas von den Vorbesitzern lernen wollen. Auf die eine oder andere Weise wird in diesem Fall eher eine Anzeige mit Fotos gekauft. Der Wert von Fotografien steigt nach Kenntnis dieser Nuance.

Die Datenmenge, die ich in der Cloud speichern werde, beträgt ca. 3-4 Terabyte. Plus ein täglicher Gewinn von mehreren Gigabyte. Da diese Innovation kein direktes Geld bringt, kann sie nur indirekt die Entscheidungsfindung des Besuchers beeinflussen. Das Budget, in dem ich ein sehr bescheidenes treffen wollte, beträgt 1000-2000 r. im Monat. Es wäre überhaupt kostenlos, aber ich habe keine solche Gelegenheit gefunden.

Azure


Ich habe mich sofort nach Azure umgesehen, weil ich an .net arbeite und oft schöne Werbeartikel zu diesem Thema sehe. Außerdem muss ich diese Plattform für meine Hauptaufgabe verwenden, aber dort sind meine Fähigkeiten durch die Anforderungen des Unternehmens und die Wünsche des Managements begrenzt.

Azure bietet BLOB-Speicher mit drei Speicherebenen: Hot, Cool und Archive. Die Preise auf allen Ebenen sind unterschiedlich. Im Allgemeinen gilt: Je heißer, desto billiger das Lesen / Schreiben und desto teurer die monatliche Speichergebühr und umgekehrt. On Hot - es ist rentabel, viel zu schreiben / lesen und zu löschen, aber es ist teuer, es für eine lange Zeit zu speichern. Archiv ist billig zu speichern, aber teuer zu lesen / schreiben. Auf Archiv- und Cold-Ebene wird eine Gebühr für das vorzeitige Löschen erhoben. Dies bedeutet, dass mir für den gesamten Zeitraum eine Gebühr berechnet wird, wenn ich ein Objekt vor einem bestimmten Zeitraum lösche (oder auf eine andere Ebene übertrage). Für die Archivebene sind dies 180 Tage, für die Kälte 30.

Preise


Die Speicherkosten betragen 0,0023 USD pro GB und Monat auf Archivebene, 0,01 USD bei Kälte und 0,0196 USD bei Hitze. Bei der aktuellen Rate sind dies ungefähr 0,15, 0,65 bzw. 1,28 Rubel.

Ich habe im Vergleich zu den Kosten bei Amazon und Google festgestellt, dass Azure billiger ist.

AzureAmazon (S3)Google
Heiß0,0196 USD$ 0,024$ 0,026
Cool0,01 $0,01 $0,01 $
Archiv0,0023 USD0,0045 USD0,007 USD


Neben den Lagerkosten müssen auch die Betriebskosten berücksichtigt werden - sie sind auch auf allen Ebenen unterschiedlich. Die Preise gelten für 10.000 Transaktionen.

Heiß
Lesen: $ 0,0043, Schreiben: $ 0,054

Cool
Lesen: 0,01 $, Schreiben: 0,10 $

Archiv
Lesen: $ 6, Schreiben: $ 0,12

Arbeitslogik



Während die Anzeige aktiv ist, werden die darin enthaltenen Fotos durch Links von Ressourcen Dritter (von Partnern) angezeigt. Nachdem die Ankündigung aus der Veröffentlichung entfernt wurde, wird sie archiviert, aber Links zu Fotos sind noch einige Zeit lebendig. Früher oder später sterben sie, und Sie müssen sicherstellen, dass zu diesem Zeitpunkt eine Archivkopie vorhanden ist.

Der Prozess der Verarbeitung von Fotos kann in den folgenden Schritten beschrieben werden:

  1. Sobald die Anzeige aus der Partnerimportdatei verschwindet, d.h. Wenn der Partner die Veröffentlichung beendet hat, wird ein Eintrag in der Prioritätswarteschlange gebildet, wobei die Priorität die Anzahl der Ansichten der Besucher ist. Je mehr Ansichten, desto wahrscheinlicher ist es, dass das Objekt archiviert und weiter angezeigt wird.
  2. Bei der Verarbeitung eines Datensatzes aus der Warteschlange wird ein BLOB-Objekt gebildet, das reduzierte (bis zu 800 x 600) Fotos für die Werbung enthält. Die Verwendung von zusammengesetzten Objekten anstelle von direkten Fotos ist ebenfalls auf Einsparungen zurückzuführen - anstelle von 8 Aufnahmevorgängen (durchschnittlich 8 Fotos pro Objekt) wird einer ausgeführt, und jeder Vorgang kostet Geld.
  3. BLOB wird zuerst in Hot geladen und dann sofort in das Archiv übertragen. Es gibt keine Möglichkeit, direkt in das Archiv zu schreiben. Da für Cool eine Gebühr für die vorzeitige Löschung erhoben wird, ist es billiger, Hot als Transit zu verwenden.
  4. Das BLOB-Archiv ist so lange gültig, wie die Links zu den Originalfotos aktiv sind (Fotos werden bisher durch Links von Partnern angezeigt).
  5. Die Links werden auf Funktionalität überprüft, wenn der Besucher die Karte des Objekts besucht. Wenn er sie besucht, ist das Objekt beliebt und es ist sinnvoll, Fotos aus dem Archiv wiederherzustellen.
  6. Wenn die Links zu den Originalfotos nicht mehr vorhanden sind, überprüfe ich, ob eine Archivkopie vorhanden ist, und sende in diesem Fall eine Anforderung zur Wiederherstellung aus dem Archiv an Cool (es kann bis zu 15 Stunden dauern, bis ein Blob aus dem Archiv wiederhergestellt ist - dies wird als Rehydration von Microsoft bezeichnet).
  7. Sobald das BLOB aus dem Archiv wiederhergestellt wurde, wird es in den lokalen Speicher kopiert und in normale Fotos unterteilt. Lokaler Speicher ist die Festplatte meines Servers.
  8. Fotos auf der Ankündigungskarte stammen bereits aus dem lokalen Speicher.
  9. Fotos werden mehrere Tage im lokalen Speicher gespeichert. Wenn während dieser Zeit Scans durchgeführt wurden, wird die lokale Speicherdauer verlängert. Wenn keine Ansichten vorhanden waren, werden die Fotos aus dem lokalen Speicher gelöscht, bleiben jedoch in Azure auf der Stufe "Cool".
  10. Von Cool zu Archiv werden sie kopiert, wenn zwei Monate lang keine Ansichten vorhanden waren - das Objekt ist eindeutig nicht beliebt und es ist daher nicht sinnvoll, die Speicherung in Cool zu viel zu bezahlen.


Erster Start


Als der Prozess geschrieben und getestet wurde, war es Zeit für den Testbetrieb, und es wurden Probleme erwartet. In der Warteschlange befanden sich zu dieser Zeit ungefähr 10 Millionen Objekte. Ich beschloss, die Migration von 30.000 Objekten pro Tag zu starten. Richten Sie schöne Grafiken auf dem Armaturenbrett ein und beginnen Sie zu beobachten. In der Statistik sah ich seltsame "Ausfallschritte" bei GetBlobProperties-Anfragen. Sie treten in einem ungefähr gleichen Intervall von einer Stunde auf, beginnen immer ungefähr eineinhalb Stunden nach Beginn der Migration und dauern einige Zeit nach deren Abschluss.



Die Anzahl solcher Anfragen war zu groß, um sie zu ignorieren. Ich habe mir die Protokolle angesehen und festgestellt, dass diese Anforderungen nicht von meinem Server, sondern von fremden IP-Adressen stammen. Ich wollte sie überhaupt nicht bezahlen.

Ich habe auf dem Stapel und in der Dokumentation gesucht, aber ohne Erfolg. Schrieb eine Frage zu Stackoverflow und technischem Support. Infolgedessen haben sie mir nach einer langen Korrespondenz mit dem technischen Support und der Bereitstellung von Protokollen mitgeteilt, dass sie die Situation reproduzieren können, und dies ist ein Fehler auf ihrer Seite.

Eine interessante Nuance ist, dass meine Frage zu Stackoverflow beantwortet wurde, ohne die Gründe zu erläutern, sondern nur um zu bestätigen, dass ich für diese Anfragen bezahlen werde, aber die Person, die die Antwort gegeben hat, hat mich eindringlich gebeten, sie als richtig zu markieren. Er hat mir im Vorbeigehen auch angedeutet, dass sie (zur Unterstützung) nicht gerne über Fehler in ihren eigenen Produkten berichten können. Ich habe ihn wissen lassen, dass ich es nicht tun werde, bis er die Wahrheit schreibt. Ich könnte das selbst schreiben, aber ich dachte, dass die Mitarbeiter des technischen Supports wahrscheinlich die Anzahl der bestätigten Antworten gemessen haben, also bat ich ihn, den wahren Grund zu schreiben, und in diesem Fall markiere ich seine Antwort als richtig. Nach einigem Zögern stimmte er zu und ergänzte seinen Kommentar mit einem Fehlerbericht. Im Allgemeinen hat mir gefallen, wie der technische Support funktioniert - ich wurde sogar zu einem russischen Mädchen versetzt, das mich immer noch über Änderungen in diesem Bereich auf dem Laufenden hält.

Die Tatsache, dass der Fehler erkannt wurde, befriedigte mich nur moralisch, aber ich wollte den Mechanismus in Betrieb nehmen und gleichzeitig kein Geld für linkshändige Anfragen bezahlen. Besonders wenn man bedenkt, dass ich normalerweise verwirrt war, um die Anzahl der Anfragen und damit die Kosten zu minimieren.

Im technischen Support wurde mir geraten, mit dem Start zu warten, und nach ein paar Wochen wurde geschrieben, dass der Fehler behoben wurde, aber wann die Veröffentlichung mit dem Fix sein wird, ist nicht bekannt. Sie boten an, die Protokollierung zu aktivieren und so zu arbeiten, und forderten nach der Veröffentlichung eine Entschädigung bei Microsoft an. In diesem Modus funktioniert es tatsächlich immer noch. Jeden Tag starte ich eine Migration einer kleinen Anzahl von Objekten und warte auf die Veröffentlichung.

Fazit


Die Kosten für täglich 30.000 Objekte betragen immer noch 900 p. pro Monat - und das ist durchaus akzeptabel. Die meisten Ausgaben sind Schreibvorgänge. Wenn also die gesamte Warteschlange verarbeitet wird und die Phase der geplanten Arbeit beginnt, ist klar, wie hoch die tatsächlichen Kosten eines solchen Speichers sind. Aber nach meinen Berechnungen wird dies in ungefähr einem Jahr geschehen.

Wenn es eine Veröffentlichung im Azure Blob-Speicher geben wird, werde ich hier hinzufügen, ob es mir gelungen ist, eine Entschädigung zu erhalten. Bei den monatlichen Ausgaben sind dies etwa 10% der Kosten.

Source: https://habr.com/ru/post/de424841/


All Articles