Ich hatte im Oktober 2019 bereits zum ersten Mal zum Thema Snowflake berichtet (https://blog.it-logix.ch/snowflake-das-cloud-basierte-data-warehouse-eine-einfuehrung/). Dieser Blog soll diesen ersten Bericht weiterführen und weiterführende Informationen zu Snowflake geben. Eine der wichtigsten Kernaussagen von Snowflake ist, dass man nur bezahlt was man braucht. Als Kunde würde ich mich daher fragen wie denn genau die Bezahlung funktioniert und aus diesem Grund habe ich mich damit auseinandergesetzt. Der Blogeintrag wird sicher nicht jede Frage beantworten, doch soll er zumindest mal einen groben Überblick geben. Folgende Themen sollen in diesem Blogeintrag erklärt werden
- Wie funktioniert das Bezahlmodell von Snowflake? (Repetition und Vertiefung)
- Wichtige Fakten zum Credits-Verbrauch (gekaufte Rechenleistung)
- Was kostet KEINE zusätzlichen Speicherkosten?
- Was kostet KEINE Credits in Snowflake?
- Was reduziert die Credits Kosten in Snowflake?
Wie funktioniert das Bezahlmodell von Snowflake?
Das Bezahlmodell setzt sich aus zwei Komponenten zusammen. Zum einen gibt es den Storage Cost (Diskspeicher) und zum anderen den Compute (Rechenleistung).
Generelle Einführung
Wie ich im letzten Blog-Artikel bereits beschrieben habe, gibt es zwei Wege um den Snowflake Dienst zu beziehen. Die Bezahlmodell-Varianten sind die Folgenden:
- «On Demand» – Nutzungsbasierte Bezahlung
- ”Capacity” (prepaid) – Vorauszahlung
In der Variante Capacity (prepaid) bezahlt man einen Gesamtbetrag für die nächsten 12 Monate und sichert sich Sonderkonditionen. Die Kosten für Compute berechnen sich aus dem Gesamtbetrag minus den Storagekosten. Durch die Nutzung von Compute und Storage wird der vorausbezahlte Betrag – die Capacity – minimiert und wird schlussendlich aufgebraucht.
- Wenn dies innerhalb der 12 Monate geschieht, kann man weiter Capacity hinzukaufen bis zum Ende der 12 Monate – oder den Vertrag kurzum um 12 Monate verlängern.
- Wenn die Capacity nicht innerhalb der 12 Monate aufgebraucht wird, geht nichts verloren, sondern wird dem nächstjährigen Kontrakt zugesprochen.
Storage Cost (Diskspeicher)
Die beiden Varianten unterscheiden sich (unter anderem) bei den Speicherkosten vor allem im Preis.
- Bei On-Demand Nutzung kostet das Terabyte, je nach Region und Cloudanbieter zwischen 40-46 US-Dollar pro Monat.
- Bei der Bezugs-Variante «Capacity» sind die Kosten fast halbiert mit 23-24.5 US-Dollar. Hier wird monatlich der durchschnittliche Storagekonsum in Terabytes angeschaut und dann von der Capacity abgezogen. Der zu kaufende Speicher kann in der Architektur auf der Stufe Database Storage (https://blog.it-logix.ch/snowflake-das-cloud-basierte-data-warehouse-eine-einfuehrung/) alloziert werden.
- Beispiel: 10TB raw storage wird in Snowflake überführt. Dies wird von Snowflake mit überlicherweise dem Faktor 4-10 komprimiert. Annahme Faktor 5, wären es also noch 2TB/Monat. Je nach Cloud Anbieter und Region wären somit die Kosten 2TB x 40-46$/Monat bei OnDemand Kunden, oder 2TB x 23-24.5$/Monat bei Capacity Kunden.
Der Storage beinhaltet folgende Komponenten:
- Interne Stages
- Aktive Tabellen
- Views
- Materialized Views
- Time Travel und
- Fail-Safe Daten.
Am Beispiel von Time Travel kann man einen Einflussfaktor bezüglich der Grösse des benötigten Speichers bzw. Storage gut erklären. Time Travel ist ein Feature, welches erlaubt, in der Zeit zurück zu gehen. Man kann so z.B. das (versehentliche) Löschen von Tabellen rückgängig machen. Die für den Zeitsprung verfügbare Spanne für Time-Travel kann man von 1 bis 90 Tage einstellen. Wenn man jetzt Time Travel auf das Maximum von 90 Tagen einstellt, dann wird logischerweise mehr Storage benötigt.
Ein letzter wichtiger erwähnenswerter Faktor bezüglich der Speicherkosten ist das Messverfahren: die Speicherkosten werden auf dem durchschnittlich gebrauchten Speicher pro Monat über alle Kundendaten (nach Kompression der Daten) bemessen.
Compute (Rechenleistung)
Das Ausführen von Abfragen, also die Rechenleistung, kostet sogenannte «Credits». Die Credits unterscheiden sich im Preis je nach der gewählten Version (siehe nachfolgende Grafik) von Snowflake. Die Preise gehen von ungefähr 2.5 Dollar bis zu 5 Dollar pro Credit. Im letzten Blogbeitrag habe ich bereits folgende Grafik vorgestellt. Sie gibt einen Überblick über die verschiedenen Versionen von Snowflake. Diese sind unabhängig vom Bezahlmodell (On Demand oder Capacity) frei wählbar. Je nach Version fallen die Preise der Credits unterschiedlich teuer aus.
*************
Ein kurzer Einschub zu den Versionen sei an dieser gestattet: Gemäss den Informationen, welche ich in der Snowflake-Zertifikations-Schulung erhalten habe, ist die Enterprise Version die meist verwendete Snowflake-Version. In der Enterprise Edition hat man zum Beispiel die Möglichkeit, ein sogenanntes «Scale Out» zu machen. Ein «Scale Out» ist hilfreich, wenn man Ansprüche an Concurrency bzw. Gleichzeitigkeit von User Abfragen hat. Wenn die Ressourcen am Limit sind, dann werden (auf Wunsch automatisch konfigurierbar) zusätzliche Cluster zur Verfügung gestellt. Aber Achtung: ein Scale Out kostet auch wieder mehr Credits. Jedes zusätzliche Cluster kostet gleich viel wie das Erste. Wenn also ein Cluster pro Stunde 4 Credits kostet, dann kosten 4 Cluster 16 Credits.
Nach meiner Meinung unterschieden sich die Versionen aber hauptsächlich im Support, der Datenverschlüsselung und dem Datenschutz.
Bezüglich dem Virtual Private Snowflake (VPS) wurde seitens Snowflake in der Schulung erwähnt, dass ein Projekt mit der Version VPS eine gewisse Vorlaufzeit braucht. Diese Vorlaufzeit wurde mit mehr als einem Monat beziffert. Zudem muss man das Projekt auch zusätzlich mit der Hilfe von Snowflake planen.
*****************************
Die Credit-Beschaffung:
Bezugsmodell «On Demand»: Die Preise für Credits können Sie am Beispiel eines Cloud Standort in der nachfolgenden Tabelle sehen.
On Demand | Price per Snowflake Credit EU (Frankfurt) |
Standard | $2.7 |
Premium | $3.0 |
Enterprise | $4.0 |
Business Critical | $5.4 |
Bezugsmodell Pre-Paid Capacity: Hier wir einmalig vor dem Kontrakt eine ca. 1 stündige Kapazitätsplanung auf Basis des aktuellen Wissenstand zusammen mit Snowflake durchgeführt. Wichtig, dies ist lediglich eine finanzielle Planung im Bezug auf Budgetanträge etc. Technisch wird kein Sizing benötigt und man kann nach Bedarf rauf, raus und wieder zurück skalieren. Je mehr gekauft wird, desto billiger werden die Credits. Es wurde bereits oben beschrieben, dass man einen Gesamtbetrag bei Snowflake einkauft. Bei Interesse für eine solche Capacity ist die Anfrage bei Snowflake unumgänglich, damit man ein verlässliches Angebot erhält. Wir von IT-Logix unterstützen Sie gerne dabei.
Der Credit-Verbrauch / Konsum:
Die Credits werden immer durch virtuelle Warehouses verbraucht. Die nachfolgende Tabelle seitens Snowflake zeigt die Kosten pro Warehouse.
Warehouse Size | Servers / Cluster | Credits / Hour | Credits / Second |
X-Small | 1 | 1 | 0.0003 |
Small | 2 | 2 | 0.0006 |
Medium | 4 | 4 | 0.0011 |
Large | 8 | 8 | 0.0022 |
X-Large | 16 | 16 | 0.0044 |
2X-Large | 32 | 32 | 0.0089 |
3X-Large | 64 | 64 | 0.0178 |
4X-Large | 128 | 128 | 0.0356 |
Wenn man jetzt als Beispiel ein 4X-Large Warehouse 1 Stunde lang zu beispielsweise 3 Dollar Creditspreis (Version Premium) betreibt, dann bezahlt man für diese Stunde 384 Dollar. Man könnte jetzt sagen, dass ist relativ kostenintensiv, aber man bekommt dafür die Rechenpower von 128 Servern.
Folgende Fakten sind wichtig für den Verbrauch von Credits:
- Credits werden pro Sekunde verrechnet. Zudem gilt ein 60-second Minimum. Dies bedeutet, dass man im Minimum immer eine Minute bezahlt.
- Jedes Mal, wenn ein Warehouse gestartet oder in der Grösse verändert wird, wird eine Minute basierend auf der stündlichen Rate in der obigen Tabelle verrechnet.
- Nach einer Minute wird im Sekundentakt abgerechnet.
- Stoppen oder Neustart eines Warehouse innerhalb der ersten Minuten kostet nach wie vor eine Minute.
- Ergänzend zu 2. gilt, wenn ein Warehouse in der Grösse verändert wird, dann werden nur die zusätzlichen Server, welche provisioniert wurden, verrechnet. Beispiel: Small (2 Server) zu Medium (4 Server) führt zu einer zusätzlichen Verrechnung von 2 Credits pro Minute.
- Wichtig zu wissen ist auch, dass man den Verbrauch von Credits über sogenannte «Resource Monitors» managen kann, indem man zum Beispiel automatisierte Kosten-Limiten festlegt. Es kann so nicht zum unkontrolliert teuren Verbrauch kommen. Auf der anderen Seite: Wenn man aber beispielsweise eine wichtige Abfrage eines Data Scientisten laufen lässt und der Monitor dann (automatisiert wegen Kostenlimiten-Erreichung) die Abfrage abbricht, dann kann es auch unschöne Folgen haben.
- Data Sharing ist ein tolles Feature von Snowflake. Dieses ermöglicht es Ihnen, einem Partner, Regulator oder Kunden Daten zur Verfügung zu stellen, ohne dass man z.B. die Daten physisch zur Verfügung stellen muss. Es gibt an dieser Stelle zwei Möglichkeiten:
- Der Partner bzw. Kunde hat bereits einen Snowflake Account: Dann bezahlt dieser die Kosten für jede Abfrage. So kann man die Kosten auslagern.
- Der Partner / Kunde hat keinen eigenen Snowflake-Account: dann stellen Sie einen sog. Reader Account zur Verfügung: konsequenterweise bezahlen Sie resp. Ihre Organisation dann für jede Abfrage des Partners / Kunden. Diese Kosten können Sie dann bei Bedarf ihrem Kunden natürlich auch weiterverrechnen.
Was verursacht KEINE zusätzlichen Speicherkosten?
Der bekannteste und wichtigste Use Case, für den keine zusätzlichen Speicherkosten anfallen, ist die Erstellung von sogenannten «Clones». Wenn man einen Clone (Datenbankobjekt Replikation) erstellt, dann entstehen solange keine zusätzliche Speicherkosten, bis Änderungen am Original oder dem Clone gemacht werden.
Was kostet KEINE zusätzlichen Credits in Snowflake?
Eines der tollsten Features von Snowflake ist meines Erachtens der Metadata Cache. Beim Laden von Daten sammelt Snowflake nachfolgende Metadaten und schreibt diese in den Metadata Cache:
- Row Count
- MIN / MAX Values
- Number of DISTINCT Values
- Number of NULL Values.
Metadata Cache Abfragen in Snowflake kosten keine Credits.
- In diese Abfrage-Kategorie gehören z.B. «Show»-Befehle und Abfragen des «Information Schema» (eine Art Audit). Dies gilt auch für das Löschen aller Daten. Jegliche Abfragen dieses Typs werden nicht mit Credits belastet. Wenn man eine Abfrage schreibt, welche eine der oben aufgeführten Informationen enthält, dann zahlt man keine Credits.
Zudem gibt es auch noch den Query Result Cache. Dieser beinhaltet die Resultate bereits abgesetzter Queries. Die Aufbewahrungszeit sind 24 Stunden. Wenn in derselben Zeit nochmals die gleiche Query mit dem identischen Resultat abgesetzt wird, dann wird auch kein Warehouse verwendet und es entstehen keine Kosten.
Man generiert ebenfalls keine Kosten, wenn das Warehouse im sogenannten Suspend Modus ist. Dann werden keine Credits verbraucht, es können aber auch keine Abfragen ausgeführt werden. Sollten jedoch Anfragen kommen, dann wird das Warehouse automatisch wieder raufgefahren.
Wie reduzieren Sie die Compute- und Storage – Kosten in Snowflake?
Folgende Tipps kann man verwenden, um Kosten zu sparen (IT-Logix unterstützt Sie gerne bei der Implementation / Umsetzung dieser Tipps):
Bezüglich Storage-Kosten:
- Die Verwendung von temporären Tabellen kann die Kosten reduzieren. Daher empfiehlt es sich, sich mit dem Thema der temporären Tabellen auseinanderzusetzen.
- Clustering sollte nur bewusst in Einzelfällen genutzt werden, da es sonst Storage-Kosten verursacht.
Bezüglich Compute-Kosten:
- Unnötige Jobs ausplanen oder entfernen. Legacy Jobs oder Lösungen sollten entfernt werden.
- Der Einsatz von Materialized Views kann den Verbrauch von Credits (und Storage) massiv erhöhen. Daher sollten diese nur in vernünftigem Mass eingesetzt werden.
- Man kann auch die Anzahl und Grösse der Virtual Warehouses aktiv bewirtschaften. Themen wie z.B. Aktivitätszeit, Ausnutzen Caching, Concurrency können dabei von Interesse sein.
Fazit
Man kann kritisch bemerken, dass man sich bei der Capacity verschätzen kann. In einem Telefonat mit Snowflake wurde mir berichtet, dass Kunden meistens eher konservativ beginnen und dann nach oben skalieren. So kann man die Gefahr eines Verschätzens minimieren. Verlieren kann man jedoch nichts, denn kauft man zuviel, nimmt man es ja in die nächste Vertragsperiode hinüber
Auch wenn Snowflake betont, dass das Bezahlmodell transparent und klar ist, gibt es doch einige potentielle Stolperstellen. Sie können sich gerne mit uns in Verbindung setzen und wir werden das Thema mit Ihnen und Snowflake angehen. Dieser Artikel kann nur eine Unterstützung bzw. Einblick bieten.
IT-Logix bleibt am Ball und hält Sie via weitere Blogs und Erfahrungsberichte auf dem Laufenden. Für Fragen stehen wir Ihnen sehr gerne zur Verfügung.
Links
https://docs.snowflake.net/manuals/index.html
https://www.snowflake.com/blog/whats-new-with-the-snowflake-cloud-services-billing-model
Sowie Austausch mit Snowflake