PHP Clouds und Platform as a Service (PaaS): cloudControl
Wie bereits gestern in der PHP-PaaS-Übersicht angekündigt hier nun die Nutzung eines PHP-PaaS-Dienstes anhand von cloudControl, dem aktuell einzigen am Markt befindlichen Anbieter für PHP-Clouds (2 weitere stehen bereits in den Startlöchern, siee Übersicht). Ein weiterer Vorteil ist dass cloudControl eine deutsche Firma ist und aktuell auf den Amazon EC2 Servern in Irland hostet, und mit Servern in der EU hat man tendentiell weniger rechtliche Probleme als außerhalb.
Dann mal los, wir wollen als Beispiel hier ein kleines Script deployen damit es online verfügbar ist. Es geht natürlich genauso mit größeren eigenen Applikationen oder WordPress-Installationen, Typo3, was auch immer, solange die technischen Einschränkungen uns keinen Strich durch die Rechnung machen. Mein kleines Script soll einfach nur die Serverzeit als JSON zurückgeben:
<?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode(array('serverTime' => time()));
Je nach Betriebssystem muss man nun die benötigten Tools installieren, eine Anleitung für Windows, Mac OS X und Linux ist vorhanden und leicht durchzuführen. In meinem Fall habe ich Windows und brauche nur den cctrl Kommandozeilen Client für cloudControl installieren, Git und Putty sind bereits vorhanden.
Was wir als erstes benötigen ist ein Account bei cloudControl. Nach nicht mal 30 Sekunden ist der Account erstellt und aktiviert, es kann losgehen. Alternativ kann man das auch mit dem Kommandozeilen Client erledigen:
cctrluser create
cctrluser activate <username> <activationcode>
Dann benötigen wir einen SSH-Key, den wir mit puttygen.exe erstellen (genaue Schritte siehe Anleitung für das entsprechende Betriebssystem).
Den public Key fügen wir dann dem cloudControl Account hinzu:
cctrluser key.add cloudControl.pub
Das waren die Vorbereitungen, nun geht es weiter mit der Applikation selbst. Dazu benötigen wir ein Bazaar-Repository oder ein Git-Repository. Da ich Git-Nutzer bin hier die Schritte:
cd <AppVerzeichnis> git init git add . git commit -m 'first commit of timeserver'
Damit wir diesen Code pushen können legen wir eine neue Applikation bei cloudControl an. Der Name bestimmt auch gleich die URL, unter der sie dann erreichbar ist.
cctrlapp timeserver create php --repo git
Das Git-Repository können wir dann pushen wann immer wir möchten:
cctrlapp timeserver push
oder direkt mit git:
git push ssh://timeserver@cloudcontrolled.com/repository.git master
Nun ist der Code auf cloudControl, allerdings erst im Repository. Details zum Repository erhält man via
$ cctrlapp timeserver details App Name: timeserver Type: php Owner: phpgangsta Repository: ssh://timeserver@cloudcontrolled.com/repository.git Users Name Email phpgangsta myemail@phpgangsta.de Deployments timeserver/default
Wenn wir nun die neueste Version des Repositories deployen möchten tun wir das mittels
cctrlapp timeserver deploy
Nach wenigen Sekunden ist die Applikation online unter http://timeserver.cloudcontrolled.com/gettime.php
Dieses kleine Testscript benötigt keine Addons wie MySQL, aber auch das wäre kein Problem, einfach das entsprechende Addon hinzufügen:
cctrlapp timeserver/default addon.add mysql.free
Die Zugangsdaten findet man so:
$ cctrlapp timeserver/default addon Addon : alias.free Addon : mysql.free Settings mysql_password : XXXXXXXX mysql_dbsize : 5 mysql_database : YYYYYYY mysql_hostname : 127.0.0.1 mysql_username : YYYYYYY
Hier findet ihr eine phpinfo() Seite, dort könnt ihr sehen welche PHP-Version und welche Extensions verfügbar sind. Aktuell PHP 5.3.2, APC aktiviert, memory_limit 128M…
Ich habe hier nur das default-Deployment benutzt, es ist aber kein Problem, mehrere Zweige und Versionen seiner App zu deployen, so ist testing/staging einfach möglich.
Man hat Zugriff auf das access und error log des Apache:
cctrlapp timeserver/default log access
und auch Zugriff auf die deploy’ten Dateien via SFTP:
sftp://<deploymentId>@cloudcontrolled.com/
Natürlich gibt es noch viele Details und Feinheiten, Addons die man nutzen kann usw, dazu sollte man die Developer-Seiten von cloudControl (Tutorials, Documentation, FAQ) oder den YouTube Channel durchstöbern. Das Cheet Sheet ist auch interessant. Wichtig zu wissen ist unter anderem die Definition einer Box sowie die darauf aufbauende Abrechnung, wenn man mehr als die freie Performance benötigt. Man kann beim Deployment festlegen, wieviele Boxen genutzt werden sollen (min und max). Und dann wird automatisch skaliert, je nachdem wie viele Requests reinkommen werden automatisch weitere Boxen gestartet und auch wieder beendet. Dabei werden nur die PHP-Requests beachtet, statische Dateien bzw. Daten aus dem Varnish-Cache werden nicht mit einbezogen. Man kommt also mit einer Box (=2 parallele Requests) schon recht weit, wenn man für einen Request 100 Millisekunden ansetzt wären das 20 PHP-Requests pro Sekunde.
Also nichts wie ran, die Basisversion ist kostenlos: eine Box für jedes Deployment, 10GB Storage, unlimitierten Traffic, mehrere Applikationen plus alle kostenlosen Addons, das soll ungefähr für einen Blog mit 200-300 Besuchern pro Tag reichen.
Schönes Turorial. Was ich schade finde sind die Kosten bei CloudControl wenn man um nur eine Box erhöht. So zahle ich denn gleich ca 23 Euro im Monat. Leider gibt es hier auch keine Crobjobs. Dafür müsste ich mir denn etwas anderes einfallen lassen.
Das bekomme ich evtl. schon für 7-8 Euro im Monat.
Was sehr von Vorteil ist sind natürlich die Addons die ich kostenlos erhalte.
PHPLehrling
23 Feb 11 at 16:02
@PHPLehrling: Wenn du die eine zusätzliche Box aktivierst, die in Lastzeiten mit einspringen soll, und die voll auslastest, 24 Stunden pro Tag, dann zahlst du 23 Euro im Monat, das kann sein. Aber der Normalfall dürfte sein dass du diese Zusatzbox nur 2 oder 3 Stunden pro Tag brauchst, in den anderen Stunden reicht auch eine Box (die kostenlos ist).
Bei 3 Stunden pro Werktag wären das dann knapp 3 Euro im Monat, aber mit der Flexibilität nach oben, sprich wenn du morgen auf Heise/Slashdot/PortalXY einen Backlink bekommst und du 3 Tage unvorhergesehenen Traffic bekommst, dann würde dein 8 Euro VirtualServer down gehen. CloudControl würde das abfedern können, du bleibst online, mußt aber für die 3 Tage eventuell deine Boxen auf maximal 20 aufstocken falls nötig, aber auch nur für diese Lastzeit, danach fällt es wieder auf 1 zurück. Und selbst wenn du das Maximum auf 20 Boxen erhöhst, zahlst du nicht die 20, sondern die 1-20, die wirklich verbraucht werden.
Aber da wir von Virtual Servern reden wirst du keine große Webseite haben und mehr als 10 oder 20 PHP-Requests pro Sekunde haben (das wären im Schnitt 1.600.000 PHP-Hits pro Tag, die Seite möchte ich auf einem VirtualServer sehen), kommst also mit 1 oder 2 Boxen locker hin.
Ich habe mir das auch durchgerechnet und war anfangs skeptisch, wenn man aber mal seinen Bedarf überprüft, merkt man dass man garnicht so viel benötigt wie erst gedacht, und wenn dann doch nur für wenige Peaks pro Tag, die nur einige Minuten anhalten.
Man kann das ganze ja auch mal mit einem Managed Server vergleichen, wo man sich nicht um das Betriebssystem, die Updates, Backup, LAMP-Stack etc. kümmern muss. Das alles nimmt dir cloudControl ja ab, also weniger schlaflose Nächte und mehr Zeit zum Programmieren.
Für Cronjobs gibt es schon etwas, wird Worker genannt, ist auch schon mit cctrlapp verfügbar aber noch nicht in der Doku. Es wird daran gearbeitet, diverse neue Addons zur Verfügung zu stellen.
Ich habe gerade mal ab (Apache Bench) auf mein kleines Timeserver-Script losgelassen, und mit 1 Box kann ich 272 Requests/Sekunde abfangen. Na gut, ist ein sehr einfaches kleines Script, aber es ist genug Power vorhanden.
Wenn du zum Beispiel auch veraltete Forensoftware oder irgendeine ältere Webseite für einen Bekannten oder Verein etc. hostest, macht es auch evtl. Sinn sie dorthin zu verlagern, allein um bei einem Angriff nicht den eigenen Blog mit in den Abgrund zu reißen bzw. wenn der Server übernommen wird. Das ist eine Überlegung die ich aktuell habe.
Klinge schon fast wie ein Fanboy, aber ich überlege was ich alles an Webseiten udn Applikationen dahin verschieben kann.
(Wer die Jungs von cloudControl nett fragt oder in deren Facebook-Profil nachschaut findet einen 30-Euro-Gutschein, den man einlösen kann.)
Michael Kliewe
23 Feb 11 at 16:59
Das mit den Workern hört sich ja gut. Ich denke bei so etwas immer an meinen Arbeitgeber. Wir betreiben ein Browsergame in Deutschland und da zieht man natürlich die parallelen. Ich denke da so an 3000 Request pro Sekunde. Aber wenn man dort die 20 Boxen nimmt ist man immer noch besser dran als einen ganzen Cluster zu bezahlen.
Wie kann man das mit disen Workern verstehen? Ist das so wie ein Cronjob? Einfach ein simulierter Request im Grund?
Ich wollte demnächst meinen Blog veröffentlichen und suche schon nach einer guten Lösung. Werde wohl auf Cloudcontrol zurückgreifen.
PHPLehrling
23 Feb 11 at 17:07
@PHPLehrling: Bei etwas so kompliziertem wie einem größeren Browsergame sollte man sich auf jeden Fall mit den Jungs zusammensetzen, und wie gesagt die Einschränkungen genau prüfen. Falls ihr Job-Queues (Gearman) oder ähnliches habt, oder auf Postgres setzt oder oder muss man das prüfen wie man das umsetzen kann, vielleicht sind diese Addons auch schon in der Entwicklung.
Die Worker sind wie gesagt noch undokumentiert, ich weiß nicht wie sie funktionieren, heute morgen im Chat sagte mir ein cloudControl-Mitarbeiter nur dass es sie schon gibt und die Doku bald folgt (mach mal ein cctrlapp addon.list).
http://cloudcontrol.de/unternehmen/blog/api-performance-and-worker-add-on/
Michael Kliewe
23 Feb 11 at 17:29
Vielen Dank für das interessante Tutorial. Das scheint echt eine tolle Sache zu sein. Für meine aktuellen Projekte lohnt sich das noch nicht so recht. Aber ein sehr sehr großer Vorteil ist die Skalierbarkeit.
Werde das mal die Tage selber testen.
Viele Grüße
Tobi
Tobi
27 Feb 11 at 13:08
[…] Ich habe bereits meine erste Testanwendung bei cloudControl laufen, wie das geht zeige ich im Detail in diesem Artikel. […]
PHP Clouds und Platform as a Service (PaaS): Übersicht | PHP Gangsta - Der PHP Blog
10 Mrz 11 at 12:33