Das Preismodell von Azure gibt immer wieder Anlass zu Diskussionen. Nachdem die Abrechnung deutlich anders als bei Microsofts klassischen Client- und Serverprodukten ist, fällt es immer wieder schwer, genau zu beziffern, welche Kosten unterm Strich für den Anwender anfallen. Ausschlaggebend für diese Kosten ist nämlich nicht – wie im klassischen Software-Business üblich – eine einfache Preisliste, aus der man die finalen Kosten unmittelbar ablesen könnte, sondern die Nutzungsdauer und Nutzungsintensität. Diese muss der Anwender im Vorfeld abschätzen können, um eine Vorstellung von den Kosten zu erhalten. Wenn man so will, ist dies die Kehrseite des Versprechens der Cloud, dass Kosten nutzungsabhängig anfallen. Viel Nutzung, hohe Kosten, wenig Nutzen, niedrige Kosten.

In diesem Blog-Artikel möchte ich die Zusammensetzung der für die Azure-Nutzung anfallenden Kosten diskutieren und damit einen besseren Überblick über die Kostenarten geben. Letztlich soll dies einem potenziellen Azure-Anwender helfen, die Kosten für die Nutzung besser abschätzen zu können. Hierzu soll schrittweise ein Berechnungsdiagramm aufgebaut werden, mit dessen Hilfe die Kosten für Azure ermittelt werden können.

Wichtig: in diesem Beitrag wird ausschließlich das rein verbrauchsabhängige Abrechnungsmodell betrachtet. Für konkrete Projekte muss in jedem Fall berücksichtigt werden, dass sich durch Verwendung von Abo-Angeboten (Development Accelerator etc.) zum Teil massive Kosteneinsparungen realisieren lassen. Abo-Modelle werden in einem Folge-Blog betrachtet.

Grundlegendes

Slide1

Abb 1: Kosten für die Bereithaltung und Kosten für die Nutzung

Grundsätzlich gibt es wie bei fast allen derzeit auf dem Markt befindlichen Cloud-Angeboten zwei Arten von Kosten, die anfallen (siehe Abb 1):

  • Kosten für die Bereithaltung 
    Hierunter fallen alle Kosten, die allein dafür anfallen, dass die gewünschten Ressourcen vorgehalten werden und für einen Zugriff zur Verfügung stehen. Die Bereithaltungskosten sind also unabhängig davon, ob tatsächlich ein Anwender auf die Ressourcen aktiv zugreift. Wer also weiß, dass zu bestimmten Zeiten keine aktive Nutzung der Ressourcen erfolgt, sollte prüfen, ob in diesen Zeiten eine Bereithaltung erforderlich ist.
  • Kosten für die aktive Nutzung 
    Nutzungskosten fallen immer dann an, wenn Anwender aktiv mit den bereitgehaltenen Ressourcen arbeiten. Dazu gehören sowohl die direkten Zugriffe (z.B. das Auslesen von Daten) als auch abgesetzte – ggf. asynchron ausgeführte – Arbeitsaufträge (z.B. die Ausführung von Rechenoperationen).
     

Bei diesen beiden Kostenarten darf Bereithaltung nicht mit Bereitstellung verwechselt werden. Letztere bezieht sich auf einen Zeitpunkt bzw. kurzen Zeitraum, in dem die gewünschten Cloud-Ressourcen installiert und konfiguriert werden, aber noch nicht für eine aktive Nutzung zur Verfügung stehen. Für diesen fallen, wie im Cloud-Kontext üblich, keine Kosten an.

Die Kosten für Azure setzen sich aus der Summe von Bereithaltungs- und Nutzungskosten zusammen. Wie aber setzen sich nun diese beiden Kostenarten zusammen?

Slide2

Abb 2: Grundsätzliche Zusammensetzung von Bereithaltungs- und Nutzungskosten

Die Bereithaltungskosten sind das Produkt aus

  • tBereithaltung (= die Dauer der Bereithaltung der betreffenden Cloud-Ressource)
  • nBereithaltung (= die Menge der bereitgehaltenen Cloud-Ressource)
  • KBereithaltung Azure-Ressource (= Kosten pro Zeiteinheit pro Mengeneinheit der bereitgehaltenen Ressource)
     

Um die Bereithaltungskosten so gering wie möglich zu halten, sollte also die Bereithaltungsdauer minimiert werden (also in Zeiten, in denen keine Zugriffe erfolgen, die Ressourcen ggf. deaktiviert werden) und die Menge der bereitgehaltenen Ressourcen minimiert werden. Letzteres ist dank der flexiblen Skalierbarkeit der Cloud sehr einfach möglich.

Die Nutzungskosten fallen bei aktiver Nutzung der bereitgehaltenen Ressourcen an und sind das Produkt aus

  • nNutzungsfall (= Zahl der Aktionen, die zur Ausführung bereitgehaltene Cloud-Ressourcen nutzen)
  • KNutzungsfall (= Kosten, die pro Nutzungsfall anfallen)
     

Um die Nutzungskosten so gering wie möglich zu halten, sollte also die Zahl der Nutzungsfälle (z.B. Speichertransaktionen, Datenübertragungen etc.) minimiert werden.

Bereithaltungs- und Nutzungskosten am Beispiel der Windows Azure Platform

Was sich nun im einzelnen hinter Bereithaltungs- und Nutzungskosten verbirgt, hängt vom jeweiligen Dienst der Cloud-Plattform ab.

Slide3

Abb 3: Zusammensetzung der Bereithaltungs- und Nutzungskosten aus den Kosten für die einzelnen Azure Services

Die Kosten berechnen sich jeweils als Summe aus den Einzelkosten für (siehe Abb 3):

  • Windows Azure Compute
  • Windows Azure Storage
  • SQL Azure
  • Windows Azure AppFabric
  • Sonstigen Kosten (z.B. Datentransfer)
     
Kostenart Azure Service Kosten berechnen sich als Produkt aus…
Bereithaltung Compute
  • Dauer der Bereithaltung von Rechenkernen
  • Anzahl bereitgehaltener Rechenkerne
  • Kosten für einen Rechenkern (pro Zeiteinheit)
  Storage
  • Dauer der Speicherplatzbelegung
  • Menge des belegten Speicherplatzes
  • Kosten für Speicherplatz (pro Platzeinheit und Zeiteinheit)
  SQL Azure
  • Dauer der Bereithaltung von SQL Azure Datenbanken
  • Anzahl und Größe der bereitgehaltenen Datenbanken
  • Kosten für die Datenbanken (pro Zeiteinheit)
  AppFabric
  • Dauer der Registrierung von Services im Service Bus
  • Anzahl registrierter Services
  • Kosten für die Registrierung (pro Service pro Zeiteinheit)
  Sonstiges

N/A, keine weiteren Bereithaltungskosten

Nutzung Compute

N/A, keine Nutzungskosten beim Compute Service

  Storage
  • Anzahl Speichertransaktionen
  • Kosten pro Speichertransaktion
  SQL Azure

N/A, keine Nutzungskosten bei SQL Azure

  AppFabric
  • Anzahl Zugriffsprüfungen im Access Control Service
  • Kosten pro Zugriffsprüfung
  Sonstiges
  • Menge ein-/ausgehender Daten
  • Kosten pro ein-/ausgehender Dateneinheit

Tabelle 1: Bereithaltungs- und Nutzungskosten der Windows Azure Platform

In das in den Abbildungen 1-3 aufgebaute Diagramm eingezeichnet, ergibt sich für Azure unter Berücksichtigung der in Tabelle 1 aufgeführten Kostenblöcke, folgende Darstellung:

Slide6

Abb 4: Konzeptionelle Berechnung von Bereithaltungs- und Nutzungskosten in der Windows Azure Platform

Damit ist die konzeptionelle Berechnung der Kosten für Azure bereits vollständig dargestellt. Jetzt soll dieses Berechnungsmodell noch um die tatsächlichen Kostenbeträge ergänzt werden.

Tatsächliche Kosten für Azure (bei rein verbrauchsabhängiger Abrechnung)

Was nun im Berechnungsdiagramm noch fehlt, sind die tatsächlichen Kosten für die einzelnen Azure-Posten. Diese Kosten können der Kostenübersicht auf der Azure-Homepage entnommen werden. In das Berechnungsdiagramm eingetragen ergibt sich mit den Abrechnungsbeträgen folgendes Bild:

Slide7

Abb 5: Berechnung von Bereithaltungs- und Nutzungskosten

Dieses Berechnungsdiagramm berücksichtigt jetzt alle Kostenposten, die bei der Verwendung von Azure anfallen können. In dieser Form ist das Ganze tatsächlich recht komplex. Zu bedenken ist allerdings, dass natürlich nicht in allen Szenarien auch wirklich alle Kosten zum Tragen kommen. In zwei kleinen Beispielszenarien soll die Berechnung der monatlichen Kosten (und die Vereinfachung des Diagramms) erläutert werden.

Beispielszenario: einfache Web-Anwendung mit SQL Azure

Im ersten Beispiel soll eine wie folgt entworfene Anwendung betrachtet werden:

  • Die Anwendung besteht aus einer Web Role
  • Diese Web Role wird in 2 Instanzen, die jeweils die Größe “small” haben, ausgeführt
  • Für die Datenspeicherung kommt SQL Azure zum Einsatz
  • Der Datentransfer (sowohl eingehend als auch ausgehend) beträgt im Monat weniger als 1 Gigabyte
     

Die Berechnung gestaltet sich wie in Abbildung 6 skizziert. Zur Vereinfachung wird angenommen, dass der betrachtete Monat 30 Tage hat.

Slide8

Abb 6: Beispielberechnung für eine einfache Web-Anwendung

Für Azure fallen also in dem betrachteten Monat folgende Kosten an:

  • Bereithaltungskosten für die Web Role-Instanzen: 30 Tage * 24 h/Monat * 2 * 0,0852€ / h = 122,69 €
  • Bereithaltungskosten für SQL Azure: 30 Tage * 1 * 7,09€/Monat = 7,09 €
  • Datentransfer eingehend: 0,07 €
  • Datentransfer ausgehend: 0,11 €
  • Summe: 122,69€ + 7,09€ + 0,07€ + 0,11€ = 129,96 €
     

Für die Ausführung der skizzierten Anwendung auf Azure fallen monatlich also Kosten in Höhe von ca. 129,96 € an.

Beispielszenario: Ersatz von SQL Azure durch Windows Azure (Table) Storage

Gegenüber dem ersten Szenario sollen an der Anwendung folgende Änderungen vorgenommen werden:

  • Anstelle von SQL Azure soll Windows Azure Table Storage verwendet werden
  • Dadurch fallen Kosten für SQL Azure weg
  • Für den im Table Storage belegten Speicher (< 1GB) fallen Bereithaltungskosten an
  • Für die Zugriffe (angenommen 1.000 pro Tag) fallen Speichertransaktionskosten an
     

Die Berechnung sieht nun wie folgt aus:

Slide9

Abb 7: Beispielberechnung für eine Web-Anwendung mit Table Storage

Für Azure fallen folgende Kosten an:

  • Bereithaltungskosten für die Web Role-Instanzen: 30 Tage * 24 h/Monat * 2 * 0,0852€ / h = 122,69 €
  • Bereithaltungskosten für den Speicher: 30 Tage * 1 * 0,11€/Monat = 0,11 €
  • Transaktionskosten für den Speicher: 30.000 * 0,0071€ / 10.000 = 0,02 €
  • Datentransfer eingehend: 0,07 €
  • Datentransfer ausgehend: 0,11 €
  • Summe: 122,69€ + 0,11€ + 0,02€ + 0,07€ + 0,11€ = 123,00 €
     

Durch Ersatz von SQL Azure durch Windows Azure Storage können die Kosten also geringfügig reduziert werden. Für einfache Datenmodelle, kann dies lohnenswert sein. Zu berücksichtigen ist allerdings, dass mit SQL Azure ein deutlich erweiterter Funktionsumfang (Views, Stored Procedures, mehrere Schlüsselattribute auf Tabellen etc.) zur Verfügung steht.

Fazit: Hinweise zur Kostenoptimierung

Die Kosten der Verwendung von Azure setzen sich aus reinen Bereithaltungskosten (die auch ohne aktive Nutzung durch Anwender anfallen) und Nutzungskosten zusammen. Für beide Kostenbestandteile können Hinweise zur Kostenoptimierung gegeben werden:

  • Die Zeiträume für die Bereithaltung der Ressourcen sollten so klein wie möglich gehalten werden. Sind Zeiten bekannt, in denen keine Bereithaltung erforderlich ist, kann die Anwendung z.B. heruntergefahren werden.
  • Menge der bereitgehaltenen Ressourcen sollte so gering wie möglich gehalten werden. Durch die leichte Skalierung von Cloud Anwendungen können beispielsweise immer so wenige Rechenkerne wie möglich und so viele wie nötig bereitgehalten werden.
    Wichtig: bei Windows Azure Compute fallen unabhängig von der aktiven Nutzung allein durch die Bereithaltung von Rechenkernen Kosten an.
  • Die Zahl der Nutzungsfälle (z.B. Speichertransaktionen, Datentransfers) sollte so gering wie möglich gehalten werden.
     

Obige Ausführungen haben bewusst Subscriptions (MSDN Premium, Development Accelerators etc.) ausgeklammert. Durch deren Einsatz können die Kosten zum Teil nochmals erheblich reduziert werden. Hierzu allerdings mehr in einem Folge-Blog.

Weitere Informationen