Cloudbasierte Plattformen, z.B. CloudStack bieten eine API zur Provisionierung und Verwaltung von Infrastruktur on-Demand. Möchte man diese nutzen, kann man auf bestehende Implementierungen zurückgreifen[1] oder einen eigenen Client entwickeln. Entscheidet man sich für die Eigenentwicklung, stellt jede Änderung am API eine Herausforderung dar. Sollte es möglich sein, diese Problematik zu umgehen? Kann man einen Client generieren, der bei API Änderungen Kompatibilität sicherstellt?

In dieser Blog-Serie soll anhand eines Proof of Concepts gezeigt werden, wie man einen PHP API Client dynamisch generieren kann. Der Client soll darüber hinaus in der Lage sein, als Web Applikation zur Skalierung von Drittapplikationen eingesetzt zu werden. So soll es bespielsweise möglich sein Indikatoren aus Nagios abzufragen bzw. kontinuierlich zu überwachen und on-Demand Virtual Machines (VMs) zu provisionieren, sobald bestimmte Lastkennzahlen überschritten werden.

Über CloudStack

Apache CloudStack ist eine Open-Source Initiative zur Unterstützung des Servicemodells Infrastructure as a Service (IaaS), das entgegen dem klassischen Kaufen von Rechnerinfrastruktur, das Mieten bei Bedarf (on demand) bietet. Die CloudStack Plattform unterstützt die Verwaltung und Provisionierung von VMs. Sie beinhaltet einen Management Server und Erweiterungen für Industrie-Standard-Hypervisor-Software (zB XenServer, vSphere, KVM), welche auf den Cloud Hosts installiert werden.

Symfony2 als Web Application Framework

Für die Entwicklung des Clients soll Symfony2 verwendet werden. Folgend einige Entscheidungsgrundlagen die für den Einsatz des Full Stack HTTP Frameworks sprechen:

  • Hochperformantes HTTP Framework
  • Einfaches Kofigurations- und Fehlermanagement
  • Voll modularisiert
  • Mächtige Bordmittel wie DIC bzw. Service Container, HTTP-Client, Event-Engine, DomCrawler
  • Hält sich an gängige Standards
  • Sehr viele Erweiterungen und gute Dokumentation
  • Grosse Community

Herausforderung Aktualität und Wartbarkeit

Die CloudStack API hat einen sehr grossen Funktionsumfang und entwickelt sich rasant weiter. Daher wäre die Entwicklung eines “feature-complete” API Client sehr aufwändig und nicht leicht aktuell zu halten.

Bei der Sichtung der API-Dokumentation fällt auf, dass diese automatisch von einem Tool generiert wird und sehr viele Informationen zur Verfügung stellt. Damit müsste es also möglich sein anhand der Informationen aus der API Dokumentation auf der Clientseite eine Art Remote Facade zu generieren (vgl. Abbildung 1).

Abbildung 1: Architecture Blueprint

Das Konzept

Mittels Web Scraping können relevante Daten aus der API Dokumentation extrahiert werden, aus welchen wiederum der PHP Code für den API Client generiert werden kann. Gegenüber einer “händischen” Implementierung kann daher viel Zeit gespart und Fehlerquellen ausgeschlossen werden.

Bei der Verwendung dieser Technologie wird davon ausgegangen, dass die API Dokumentation komplett und korrekt ist. Ist dies nicht der Fall, funktioniert der Client (teilweise) nicht. Wir nehmen zudem an, dass “backward compatibility breaks” dokumentiert sind, da diese bei einem Versionsupdate und der damit verbundenen Neugenerierung direkt in den Client übergehen.

Rahmenbedingungen

Zur Realisierung des dynamischen CloudStack Clients sollen folgende Komponenten und Tools verwendet werden:

Im nächsten Artikel der Serie CloudStack & Symfony2 erfahren Sie, wie man Guzzle-HTTP und den Symfony DOM Crawler als Web Scraper einsetzen kann. Haben Sie Fragen oder Feedback? Verfassen Sie unten einen Kommentar oder Twittern Sie an @frank_neff

(This blog post is also available in English)

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *