Ich suche für ein Kundenprojekt einen SMS-Versand Anbieter mit einer ordentlichen Schnittstelle, am liebsten ein Webservice. Man soll per Schnittstelle SMS an mehrere Nummern senden oder seine eigene(n) Verteilerliste(n) pflegen können. Anbindung erfolgt dann per PHP.
Sobald ich was gefunden hab, folgt hier natürlich eine Liste der besten Kandidaten:
Es ist nicht ganz einfach hier einen Überblick zu bekommen. Man muss sowohl Kinderzimmer- als auch unseriöse Anbieter aussortieren und dann noch darauf achten, dass geeignete Schnittstellen vorliegen.
Was soll man z.B. von Anbietern halten, die eine “kostenlose” Registrierung verlangen, nur um sich die Schnittstellenbeschreibung runterladen zu können?
Massenversand.de mit HTTP-Schnittstelle für einzelne SMS und Email Schnittstelle für mehrere SMS scheint mir da schon zum oberen Ende zu gehören und wird wohl unsere Wahl.
14. Mai 2007
Die Kosmonauten, mit denen ich zu Beginn meiner Freelancer-Zeit schon einmal zusammen gearbeitet habe, kontaktierten mich zu Beginn des letzten Wochenendes mit der eiligen Bitte, mir die Performance einer von ihnen entwickelten Partyseite einmal genauer anzuschauen.
Der Grund war, dass die frisch gelaunchte Seite Eraffe.de ab einer Last von 250 Usern die gleichzeitig online waren, extrem langsam wurde bzw. den Server fast komplett lahm legte. Die Seite ist in PHP mit Mysql Anbindung umgesetzt und lief auf Mysql 5.0 und einem Apache 2.2 mit PHP 5.2. Zugrunde lag eine Datenbank mit Daten von ca. 15.000 Usern.
Da sowohl die Entwickler als auch das Team der Community davon ausgingen, dass das Problem mit einer Erweiterung der Server Architektur relativ einfach zu lösen war, waren zum Zeitpunkt meiner Beratung schon neue Server unterwegs. So konnten wir über 4 zusätzliche leistungsstarke Server verfügen, von denen drei als Appserver (Apache 2.2, PHP 5.2) und einer als reiner DB-Server vorgesehen waren.
Meine Arbeit bestand darin, den Entwickler sowie den Serveradmin der Kosmonauten zu beraten und teilweise helfend in die Programmierung einzugreifen. Erste Anhaltspunkte waren die per Skript gemessenen Parsezeiten von einzelnen Programmteilen und die hohe CPU Last die Mysql zog.
Nachdem ich den Code kurz überflogen hatte um mir einen Überblick zu verschaffen begannen wir damit,eine Kopie der Seite auf einen externen Server zu legen. Dieser war noch etwas leistungsschwacher, aber durchaus geeignet um die Anwendung zu Testzwecken darauf laufen zu lassen. Auf dem Liveserver war dies nicht möglich, da sich auch Nachts noch eine größere Anzahl Benutzer darauf befand.
Server Software: Als ersten Schritt wechselten wir von Apache 2.2 auf den weniger speicherintensiven Lighttpd und die neusten Mysql/PHP Versionen sofern noch nicht aktuell. Zudem wurde auf PHP-Ebene Opcode-Caching durch APC aktiviert.
Code Profiling: Um den Flaschenhals im Skript zu finden, nutzten wir zunächst die PHP Extension Xdebug. Xdebug wird einfach auf dem Server installiert und man kann per Profiler genau sehen, wo sich der oder die Flaschenhälse im PHP Teil der Anwendung befinden. Xdebug benötigt auch noch zusätzliche Serverressourcen, deshalb sollte man ihn nicht ständig laufen lassen. Ist aber auch gar nicht nötig, da man innerhalb kürzester Zeit große Datenmengen zum Profiling erhält. Diese Daten können dann mit WinCacheGrind oder KCacheGrind (KDE) analysiert werden und zeigen bis zur letzten ausgeführten Funktion genaue Daten zur Parsezeit und Speicherintensität an.
Query Analyse: Das Profiling ergab, dass sich unser Flaschenhals bei den Mysql Queries befand. Um die langsamen Queries rauszufiltern kann man am Mysql Server das Slow Query Log aktivieren.
Daraus ergab sich, dass bei unserer Anwendung die Queries zur Auslese der sich auf der Seite befindlichen User (das typische Onlineuser Skript) sowie einige Schreibbefehle (sowohl INSERT als auch UPDATE) mit mehreren Datumsfunktionen die langsamsten waren.
Bei fast allen Queries lies sich noch einiges optimieren, dennoch blieb die Anwendung langsam.
Um das zu messen muss man natürlich Lasttests auf der Seite fahren, möglich durch Apache-Benchmark, Siege oder ein Windows-Tool zur Trafficanalyse.
Caching: Das Naheliegendste war nun, eine Form von Caching zu aktivieren. Da im Projekt Smarty eingesetzt wurde, bot sich das Smarty eigene Caching an, erwies sich aber als die schlechtere Lösung. Um die erste Nacht zu überstehen, deaktivierten wir auf dem Liveserver dann die Onlineuser-Anzeige und benutzten dateibasiertes Caching der Mysql Ergebnisse von einigen anderen Funktionen, deren Abfragen sich als langsam erwiesen. Am Ende der Nacht war zumindest die Startseite und einige andere häufig benutzte Funktionen der Seite wieder benutzbar.
Im Endeffekt erwies sich dann das mir bis dato unbekannte memcached als die beste Lösung zum Speichern von aus der DB gelesenen Daten. Im Laufe des Tages bauten wir es in jede Funktion ein, wo dies Sinn machte [ PHP.net/memcache ].
Damit war mein Job so gut wie erledigt, doch ein paar weitere Tipps konnte ich dem Entwicklerteam noch auf den Weg geben:
- Keine Superklassen, die alles können (und womöglich noch statisch aufgerufen werden) benutzen.
- Keine Angst vor einzelnen Funktionen. Sie sind schneller als statisch aufgerufene Methoden die bunt in eine Klasse geworfen werden.
- Programmteile nur unmittelbar an der Stelle an der Sie benötigt werden nachladen (gilt für Klassen, Objekte, Funktionen, Konstanten..).
- PHP Optimierung (Kommentare durchsehen), Lighttpd Optimierung, Apache Optimierung, Mysql Optimierung ist weiterhin nötig!
Innerhalb von zwei Tagen konnten wir so die Seite auf eine angenehme Geschwindigkeit bringen und die Last auf den Servern deutlich verringern, auch wenn der Code noch nicht optimal ist.
12. Mai 2007
Die Internet Explorer Developer Toolbar von Microsoft ist fertig.
The Microsoft Internet Explorer Developer Toolbar provides a variety of tools for quickly creating, understanding, and troubleshooting Web pages.
Die Developer Toolbar erlaubt ein ähnliches Debuggen des Quelltextes wie es unter Firefox mit der Firebug Extension möglich ist und funktioniert unter IE 6 sowie IE 7.
11. Mai 2007
Bei Read/Write Web gibt es mehr über die neuen Pläne von Last.fm, den Musik-Vorschlagsdienst auch auf Videos auszuweiten.
When I read that, I immediately thought of Last.fm as the Web 2.0 version of MTV! That certainly seems to be their goal, and good on them for setting their sights so high. The fact they have at least a couple of big labels on board already (EMI and Warner, both of whom already have agreements with Last.fm regarding radio music) and they seem to be in good negotiations with others (Universal and Sony) indicates that it’s not an impossible dream. The Web 2.0 age needs a new form of MTV, so why not Last.fm to provide it!
10. Mai 2007
Mozilla und eBay veröffentlichen den Firefox Companion für eBay. Es handelt sich hierbei um ein Firefox Add-on, keine alleinstehende Firefox Version, wie mancherorts angenommen.
Durch das Add-on ist man ständig bei eBay angemeldet, bekommt Benachrichtigungen wenn sich der Status eines beobachteten Artikels ändert und kann sicher gehen, dass man auf den Original-eBay-Seiten ist und nicht einer Daten pflückenden Phishing-Seite.
Ein Ersatz, der zudem noch das beliebte Snipern (Abgeben von Geboten in letzter Minute um die Auktion sicher zu gewinnen) unterstützt, wäre die Firefox-Erweiterung Biet-O-Zilla.
10. Mai 2007
Google Analytics wurde verbessert.
In der neuen Google Analytics Tour könnt ihr euch das genauer anschauen, allerdings scheint es noch nicht für alle Konten verfügbar zu sein.
9. Mai 2007
Habe gerade die Zeit bis Kommentare bei neuen Beiträgen ausgestellt werden auf 60 Tage angehoben. Kommt dank Akismet sowieso seltenst Spam durch.
Letztes Wochenende habe ich an der Performance-Optimierung einer größeren Seite gearbeitet, die gesammelten Erfahrungen werde ich demnächst in einem längeren Beitrag mal aufschreiben.
Mai 8, '07

Die Webseite der Bright Messe in Frankfurt erstrahlt in neuen Farben. Mir persönlich gefällt sie so sehr gut, deutlich besser als die etwas anstrengende orange Vorgängerversion.
14. März 2007

Im Moment ist Runde 4 (und folgend die Finals) des ersten Stops der Weltmeisterschaftstour live im Webcast zu sehen.
6. März 2007