REST API erstellen - Tipps, Erfahrungen,...?

  • REST API erstellen - Tipps, Erfahrungen,...?

    Hallo zusammen,

    momentan erstelle ich für einen Kunden eine REST API auf einem Webserver mit dem die Clients (Android, iOS und Windwos Phone) kommunizieren. Momentan ist es ein einfacher LAMP Server (Linux, Apache, MySQL und PHP) mit diversen PHP Skripten auf dem die REST API basiert. Die Daten werden per JSON übertragen.

    Nun ist meine Frage ob jemand Tipps oder Erfahrungen hat wie man mehr aus dem Server rausholen kann. Kann man z.B. PHP durch eine effizientere Sprache ersetzen oder den Apache z.B. durch einen anderen, kleineren und "leichteren" HTTP Server? Gibt es sonst andere Tipps?

    Ich bin für jeden Tipp, Ratschlag,... dankbar.

    Gruß Tuni
  • Meine Wahl: Python + Django + gunicorn + nginx ( + PostgreSQL) :D
    Ordentliche Sprache, ordentliches Framework, ordentliche Performance.

    Ich hab den Namen vergessen, aber ich wurde neulich mal auf ein Tool hingewiesen, was über verschiedene Sprachen hinweg aus einem definierten Protokoll Code erzeugt, wodurch eventuell das Pflegen von einer REST API einfacher wird. So ganz traue ich dem aber nicht. Wenn es mir wieder einfällt, sag ich aber bescheid.
    C++
  • Danke für den Tipp. nginx habe ich schon öfters gehört das der sich dafür anbietet. Der Umstieg kommt sowieso erst in ein paar Wochen in Frage. Hatten extremen Zeitdruck und mussten für ein Test Event erstmal ein funktionierendes Gerüst aufbauen. Danach wird dann optimiert bevor das Produkt an den Markt.
  • Tuni schrieb:

    Nun ist meine Frage ob jemand Tipps oder Erfahrungen hat wie man mehr aus dem Server rausholen kann. Kann man z.B. PHP durch eine effizientere Sprache ersetzen oder den Apache z.B. durch einen anderen, kleineren und "leichteren" HTTP Server? Gibt es sonst andere Tipps?
    Ich würde mal sagen: ja, man kann auf jeden Fall mehr rausholen. Aber das »Wie« erfordert einen genaueren Blick. Natürlich kann man statt Apache Lighttpd oder Nginx nehmen (oder einen ganz anderen Ansatz, wie etwa Node.js), ebenso kann man PHP gegen was anderes austauschen. Aber löst das Dein Problem? (BTW: Hast Du überhaupt ein Problem? In Deinem Posting steht davon nichts.) In aller Regel ist bei serverseitiger Programmierung nicht die Programmiersprache oder der Webserver der Bottleneck, sondern Datenbank-Queries – weil es viele sind, weil es schlecht optimierte sind, weil Indexe fehlen o.ä.

    Ein sinnvoller Ansatz bestünde daher erstmal im Herausfinden des »Was ist überhaupt schnell oder langsam«, z.B. zu Fuß per Einbau von Timing-Mess-Code in die Skripte oder per Profiling mit Xdebug, xhprof o.ä. Solltest Du dann immer noch meinen, Apache ist zu lahm, nimm Nginx. Solltest Du zum Schluss kommen, PHP ist zu lahm (und Du der Ansicht bist, es liegt nicht an Deinem Code), wäre erste Wahl die Nutzung eines Bytecode-Caches (APC, XCache, …) oder ggf. andere Arten des Cachings, sofern anwendbar. Erst dann würde ich an Deiner Stelle darüber nachdenken, Komponenten des bestehenden Systems komplett auszutauschen.

    Carsten
  • Es besteht bisher nicht wirklich ein Problem. Wir haben aber auch noch nicht die Anzahl an Nutzer auf dem Server ab der wir das wirklich sehen können wo es Probleme gibt. Das wird erst in den kommenden Wochen der Fall sein. Es ginge mir nur darum vorher hier nachzufragen ob es irgendwelche Tipps gibt die in jedem Fall zu beherzigen gilt. Momentan bestehen die PHP Skripte zu 90% aus einer MySQL Abfrage. Die werden mit dem Laufe der Zeit und den neuen Features für kommende Version noch umfangreicher.

    Grundgedanke war eben besser zu früh als zu spät um Rat fragen. :)
  • Ich freu mich ja immer wieder, das Django etwa den kompletten Datenbank Zugriff weg-abstrahiert. Darum war der Wechsel von sqlite (erste Tests) auf postgreSQL in 20 Minuten vollzogen (hatte ein wenig Probleme mit der Migration der Daten, weil sqlite gar keine Constraints sichert..)

    Ich habe ja schon mehrfach meine Abneigung gegenüber PHP geäussert und begründet. Sicherlich funktioniert PHP für viele, aber ich denke immer noch, dass sich ein Wechsel auf etwas Anderes hier immer lohnt.
    C++
  • zerm schrieb:

    Sicherlich funktioniert PHP für viele, aber ich denke immer noch, dass sich ein Wechsel auf etwas Anderes hier immer lohnt.

    Läuft Python mittlerweile auf allen verfügbaren Werbservern, die man auch als Privatmensch für relativ günstig nutzen kann?
    Gibt es ein TYPO3-vergleichbares CMS auf Python Basis?

    Ich sehe PHP vs. Python ungefähr so wie C++ vs. Objective-C.
    Ersteres ist weit verbreitet, taugt aber nix. Doch durch die weite Verbreitung gibt es halt eine Fülle an darauf basierenden Frameworks und Lösungen, so dass es schwierig wird die Platzhirsche loszuwerden.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • PHP ist nur im unprofessionellem bis semi-professionellem Bereich "Platzhirsch" - zumindest, soweit ich weiss. Ich würde eher Java und .NET als Platzhirsche bezeichnen. PHP mit C++ zu Vergleichen ist auch sehr, sehr weit hergeholt.

    Ein Managed-Server bekommt man, soweit ich weiss, für rund 3 bis 6 Euro/Monat in Deutschland. Da sollte dann Python kein Problem sein.

    Ich kenne TYPO3 nicht näher (ich weiss nur, dass es schrecklich sein soll). Ein CMS kann man sich aber mit Django relativ schnell zusammenbauen (Django stammt ursprünglich als CMS/Framework für die Webseite der Washington Post).
    C++
  • Tuni schrieb:

    Wir haben aber auch noch nicht die Anzahl an Nutzer auf dem Server ab der wir das wirklich sehen können wo es Probleme gibt.
    Es gibt Siege, JMeter, Apache ab etc. Wenn Du wirklich wissen willst, wie das System performt, kannst Du das auch jetzt schon herausfinden.

    Tuni schrieb:

    Momentan bestehen die PHP Skripte zu 90% aus einer MySQL Abfrage.
    Und dann fragst Du danach, ob es Sinn macht, PHP oder Apache auszutauschen, statt Dir Gedanken darüber zu machen, wie die Datenbank bei der Performance abschneidet? Lustig.

    Carsten
  • zerm schrieb:

    PHP ist nur im unprofessionellem bis semi-professionellem Bereich "Platzhirsch"
    Das ist doch wirklich albern. Zum einen ist so eine Aussage – egal, um welche Programmiersprache es geht – ohnehin nutzlos, wenn man nicht den Bereich präzisiert, auf den man sich bezieht, zum anderen fallen mir ohne langes Nachdenken ein paar nicht gänzlich unprofessionelle Unternehmen ein, die sehr stark auf PHP setzen.

    zerm schrieb:

    Ich würde eher Java und .NET als Platzhirsche bezeichnen.
    Das ist mit Sicherheit in manchen Bereichen richtig, aber die Trennlinie verläuft nicht zwischen »professionell« und »unprofessionell«, sondern zwischen verschiedenen Anwendungsbereichen; wobei Überschneidungen natürlich existieren.

    zerm schrieb:

    Ich kenne TYPO3 nicht näher (ich weiss nur, dass es schrecklich sein soll).
    Da bin ich mal Deiner Meinung. Wobei Typo3 extrem polarisiert: es gibt Leute, die finden es auf den ersten Blick intuitiv und lieben es, ich kenne aber auch Fälle, wo Entwickler den Arbeitgeber gewechselt haben, um ein Typo3-freies Leben zu führen.

    Carsten
  • Und dann fragst Du danach, ob es Sinn macht, PHP oder Apache auszutauschen, statt Dir Gedanken darüber zu machen, wie die Datenbank bei der Performance abschneidet? Lustig.
    Nicht lustig, sondern berechtigt und sinnvoll. Wenn letzten Endes die eigentliche "Arbeit" bei der DB liegt, ist es beispielsweise unnötig einen fetten Apache mit zig Modulen zu betreiben, der bei vielen gleichzeitigen Requests zum Flaschenhals werden kann und unnötig viel Hauptspeicher verbrät, den – sofern auf dem gleichen Server gehostet – viel besser die DB zum Cachen nutzen könnte. cu McPringle
    Flattr this
  • McPringle schrieb:

    Und dann fragst Du danach, ob es Sinn macht, PHP oder Apache auszutauschen, statt Dir Gedanken darüber zu machen, wie die Datenbank bei der Performance abschneidet? Lustig.

    Nicht lustig, sondern berechtigt und sinnvoll. Wenn letzten Endes die eigentliche "Arbeit" bei der DB liegt, ist es beispielsweise unnötig einen fetten Apache mit zig Modulen zu betreiben, der bei vielen gleichzeitigen Requests zum Flaschenhals werden kann und unnötig viel Hauptspeicher verbrät, den – sofern auf dem gleichen Server gehostet – viel besser die DB zum Cachen nutzen könnte.
    Ich sag’s mal so: mich stört die Reihenfolge. In aller Regel liegt das größte Optimierungspotential bei dem beschriebenen Szenario doch mit großer Wahrscheinlichkeit bei der Datenbank bzw. den Zugriffen auf selbige (wie Du selbst sagst: die eigentlich Arbeit macht die Datenbank). Ich sehe nicht ganz, warum man nicht dort mit einer Suche nach potentiellen Performance-Bottlenecks anfangen sollte.

    Aber wie ich weiter oben schonmal geschrieben habe: letztendlich nutzt diese ganze Rumspekuliererei (meine eingeschlossen) nicht allzu viel, solange man nicht durch Messen ermittelt hat, an welcher Stelle es am ehesten hakt.

    Carsten
  • Ich sehe es genauso wie BlueM.
    Apache mag mit all seinen unzähligen Modulen vielleicht ein wenig Speicher benötigen, aber mal ernsthaft: ich bezweifle, dass das wirklich ins Gewicht fällt.
    Und falls doch: schalte er doch die unnötigen Module einfach ab. (z.B. libexec/apache2/libphp5.so +scnr+)

    Ernsthaft, wenn PHP läuft, braucht man dann wirklich das CGI Modul? Müssen DAV und VHOST wirklich sein?
    Mir sind zumindest keine Fälle bekannt, in denen Apache jetzt das 'Bottleneck' ist. Schon gar nicht, wenn Spaß- und Performancebremsen wie PHP und MySQL mit von der Party sind.

    Sicherlich steigt die Last bei gestiegenem Zugriff, doch wenn die Anfrage- und Skriptzeiten kurz sind gibt es dort vermutlich keine Probleme.
    Davon ab ist das Ganze ja auch noch hosterabhängig. Wenn es nur Apache mit PHP und MySQL gibt, welche Möglichkeiten hat man dann?
    Und wenn es der eigene Mac mini in der Abstellkammer ist, wird das Bottleneck eher die Internetverbindung sein.

    Mir riecht das alles schon wieder zu sehr nach POITROAE.

    Zumal, wenn man das Ganze wirklich professionell aufziehen will, man ganz andere Kaliber bräuchte.
    Da wären dann mindestens ein Webserver und ein Datenbankserver von Nöten - beide mindestens im Gigabit Ethernet, besser wären natürlich zwei oder mehr Gigabit Ethernet.
    Und der Datenbankserver sollte dann auch bitte kein popeliges Oracle SQL/Microsoft SQL Gerödel sein, sondern eine vernünftige IBM Series i oder höher.

    (Mir ist bekannt, dass das für gefühlt 98% aller RESTful APIs mehr als nur übertrieben ist. Das kommt dann aber dabei raus, wenn man PO mal ein wenig übertreibt.)

    Zum Thema TYPO3:
    Es hat Vor- und Nachteile.
    Vorteil: man kann damit wirklich alles selber machen.
    Nachteil: man muss daran wirklich alles selber machen.
    Eine derart mächtige Extensions- und Scriptengine ist mir in noch keinem anderen CMS untergekommen.
    Das dürfte alles sehr python-untypisch sein, deshalb frag ich ja. :D
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P