Wie ihr vielleicht schon bemerkt habt bin ich aktuell an einem neuen “etwas größerem” Projekt beteiligt. Was das genau ist darf ich noch nicht verraten, aber ein paar der Anforderungen machten es notwendig, dass ich mich nach einer neuen Platform umsah, die diese erfüllen kann.

Scale fast, efficient and seamless.

Eine der größten Herausforderungen ist, dass das System skalieren muss und zwar ohne neue Hardware zu kaufen oder gar das System grundlegend umbauen zu müssen. Damit fiel das klassische Dedicated Server Model weg. Ich kann nicht einen “Monsterserver” kaufen, der sich dann anfangs langweilt und wenn er dann doch ins Schwitzen kommt ersetzt werden muss. Sowohl die Performance als auch die damit verbundenen Kosten müssen skalieren und zwar “von selbst” und berechenbar.

IaaS, PaaS, SaaS

Sollten euch diese Abkürzungen noch kein Begriff sein empfehle ich euch diese kurze Beschreibung auf Wikipedia: Everything as a Service.

Ich als Entwickler will und genau genommen soll mich auch nicht zu sehr um die Infrastruktur kümmern müssen, sondern mich auf meine Kernkompetenz, das Entwickeln von Anwendungen und Services, konzertieren. In unserem Fall bauen wir einen  Service, also den SaaS Teil. Das bedeutet jemand muss mir IaaS, die technische Infrastruktur, und PaaS die (Enwicklungs-)Platform zur Verfügung stellen.

Amazon, Microsoft, Google

Der Markt ist nicht wirklich groß, aber heiß umkämpft. Es gibt eigentlich nur zwei Anbieter solcher Dienste, die in Frage kommen: Amazon Web Services (AWS) und Google Cloud Platform (GCP).

Microsoft Azure Cloud fällt leider auf Grund ihres Rückstandes sowohl was Features als auch Infrastruktur angeht, leider gleich von vorne weg aus.

AWS ist in diesem Geschäft schon lange eine Größe für sich und ich habe auch in diversen Projekten bereits mit Diensten wie S3 (Storage) und EC2 (Elastic Compute Cloud) gearbeitet und war auch recht zufrieden. In meinem aktuellen Fall brauche ich aber mehr als IaaS, ich brauche eine Entwicklungsplatform.  Also ein möglichst komplettes Framework aus Diensten und Tools. Dies geht von APIs für Services und Storage hin bis zu intelligenten Deployment Tools und Versionierung.

Out of the box

Da kommt Google ins Spiel. Ein Teil der GCP ist die Google App Engine. Dieser Teil der GCP dient zum Hosten von Webanwendungen und Services auf Googles eigener Infrastruktur. Damit erschlage ich gleich zwei meiner Anforderungen. Als PaaS dient die selbe skalierbare Infrastruktur auf der auch alle Google Services laufen, so schlecht kann diese also nicht sein, und es erlaubt mir in Python, Java, PHP oder Go Webapplikationen und Serivces zu implementieren und auf diesem System laufen zu lassen (PaaS).

Requirements: Check!

Was bietet mir GCP also genau? Wie bereits angesprochen beginnt alles mit der Infrastruktur. Hier wird mir wirklich Googles eigene Infrastruktur geboten und diese ist, wie wir ja wissen, mehr als performant. Darüber hinaus brauche ich einen Application Server der ohne wenn und aber läuft, den ich nicht warten muss und der je nach aktueller Last von ganz alleine skaliert. Dies wird mir in Form der Google App Engine geboten, welche mir neben einem Release Management auch detaillierte Logs liefert und eben ja nachdem was benötigt wird mehr oder weniger kostet. Ein schöner Nebeneffekt ist hier, dass Python als Programmiersprache unterstützt wird und mir somit noch weiter entgegen kommt.

Außerdem brauche ich Storage und zwar in zwei verschiedenen Formen. Einerseits brauche ich Storage um Objekte abzulegen. Also Daten die man normalerweise in Datenbanken legen würde. Dafür kann ich entweder CloudSQL verwenden, eine relationale Datenbank in der Cloud oder den NDB Object Storage. Letzteres ist eine NoSQL DB und genau auf diese werde ich auch aufbauen.

Andererseits muss ich auch Files ablegen. Diese werde ich in den Google Cloud Storage legen, der natürlich mit sehr einfachen Mitteln (SDK) aus meiner Applikation verwendbar ist und auch ein dynamisch skalierendes Preismodel bietet. Als letzten Punkt benötige ich noch eine sichere und skalierbare Service Technologie um zu guter Letzt mit “der Cloud” kommunizieren zu können und auch hier gibt es bereits eine fertige Lösung: Google Cloud Endpoints.

“Out of the box” bedeutet hier übrigens keinesfalls, dass es sich hier um so eine dubiose “No Coding Required” Lösung handelt. Ganz im Gegenteil. All das sind Services die mir geboten werden um sie in meiner Implementierung zu verwenden, also in meinem ganz eigenen Code. Ohne diese Freiheit wäre auch keine Eigene Lösung mit eigenen Anforderungen möglich.

More than this.

Wir wissen aber alle, dass “fertige Lösungen” nie zu 100% die Anforderungen einer eigenen Lösung abdecken können und natürlich ist dies auch hier der Fall. Die Tatsache, dass GCP aber keineswegs auf den Einsatz Google-eigener Technologien beschränkt ist, erleichtert mir das Leben also ungemein. Es steht mir frei jederzeit jede eigene Lösung, Library und/oder SDK in meine Applikation auf der GCP zu integrieren und so um Funktionalität zu erweitern.

Money, Money, Money

Nun aber zu einem zwar immer etwas unangenehmen aber umso wichtigeren Punkt: Was kostet der Spaß?

Die gute Nachricht ist, dass es das kostet was man eben braucht. Hier liegt nämlich genau die Stärke solcher Platformen. Man zahlt genau nur das was man auch braucht.  Alles wird in Cents einzeln verrechnet, jeder Request, jede Frontend Instance Hour und so weiter. Beim Kalkulieren ist man zwar etwas länger beschäftigt, aber man kann sich sicher sein, dass man nicht für “Leerlauf” zahlt. Denn wenn mein Service genutzt wird zahle ich dafür, habe aber auch eindeutig “Kunden” die mir das finanzieren. Habe ich weniger Nutzung zahle ich weniger, habe ich mehr zahle ich mehr. Ein weiterer Vorteil ist hier auch, dass ich durch Optimierung meiner Applikation auf dieses Preismodel direkt die Kosten dafür drücken kann. Läuft mein Service effizienter, kostet der Betrieb weniger.

Sollte euch das Model im Detail interessieren gibt es hier die aktuellen Preislisten jener Services, die ich nutzen werde im Überblick (GCP bietet aber noch um einiges mehr. Siehe -> Google Cloud Platform – Products)

PlayGround

Immer ein Punkt von äußerster Wichtigkeit für die Entwicklung ist ein “Spielplatz”. Denn ohne eine Technologie genau zu kennen und das bedeutet wirklich damit gearbeitet zu haben, ist es unmöglich eine saubere Architektur für das “echte Produkt” zu bauen. Wie bei Google üblich können alle Services gratis getestet werden und darauf Prototypen gebaut werden, so lange sich ihre Last in den Free Quota, welche sehr großzügig sind, bewegt. Außerdem gibt es natürlich für alles API Samples und ausführliche Developer Dokumentation.

Des Weiteren erlauben mir diese Free Quota auch ein Entwicklungs- und ein Test/QM-System zu betreiben ohne damit zusätzliche Kosten zu verursachen.

Performance

Ich habe schon einige Prototypen auf der GCP laufen um mir meine Gedanken über Performance und Kosten zu machen, aber alle möglichen Platformen direkt mit einander zu vergleichen kostet Zeit, die ich nicht habe. Netterweise hat das aber jemand anderes für mich erledigt. Zu sehen gibt es den detaillierten Vergleich, welcher mich auch in meiner Entscheidung bestätigt, hier.

Fazit

Ob meine Entscheidung nun richtig war oder nicht wird die Zeit zeigen, aber im Moment habe ich ein gutes Gefühl. Denn hier kommen einfach alle für mich wichtigen Faktoren, sowohl aus technischer als auch Wirtschaftlicher Sicht, zusammen und diesen Eindruck teilen auch andere mit mir, die bereits erfolgreich auf dieser Platform Applikationen betreiben und mir ihre Erfahrungen in Gesprächen (Hangouts, Mails, etc..) mitteilten.

Ein weiterer Faktor der Sicherheit ist, dass diese Platform auch von richtig großen Kunden, teils auch mit ähnlichen Geschäftsmodellen, genutzt wird und somit sich gewisser Maßen bereits am Markt etabliert hat.

Ein paar Referenzenkunden der Google Cloud Platform findet ihr hier.

Abschließend habe ich noch ein Video für euch, welches schon veranschaulicht wie es unter der Haube der Platform aussieht und wo eben die Vorteile liegen.