2010-04-30 3 views
9

Kann irgendjemand kommentieren, was zwischen RoR und PHP besser skalierbar ist? Ich habe gehört, dass RoR weniger skalierbar als PHP ist, da RoR mit seinem MVC-Framework ein wenig mehr Overhead hat, während PHP niedriger und leichter ist. Dies ist ein bisschen vage - kann jemand besser erklären?Skalierbarkeit von Ruby on Rails im Vergleich zu PHP

+0

* (verwandt) * http://stackoverflow.com/questions/503684/ruby-on-rails-scalability-performance – Gordon

+0

* (verwandt) * http://stackoverflow.com/questions/2720523/will-php -Die-in-Web-Seite-Entwicklung-Welt-geschlossen – Gordon

+0

* (verwandt) * http://stackoverflow.com/questions/1163012/cost-of-scaling-rails-vs-cost-of-scaling-php- vs-python-frameworks – Gordon

Antwort

32

MVC ist die Abkürzung für Model-View-Controller, ein bekanntes und gebräuchliches Entwurfsmuster, das eine klare Unterscheidung zwischen Ihrer Geschäftslogik (z. B. dem Modell) und der Darstellungsschicht (Ansicht und Controller) erreichen soll. Dies wurde ausführlich im Internet und SO behandelt, also einfach eine Suche durchführen.

RoR ist ein Framework, das sich um MVC und ActiveRecord dreht, das auf der Programmiersprache Ruby aufbaut, wie Zend Framework oder Symfony ein Framework, das auf der Programmiersprache PHP aufbaut. Beim Vergleich der Skalierbarkeit eines Frameworks mit einer Sprache werden Äpfel und Birnen verglichen.

Was die Skalierbarkeit von RoR angeht: Ja, RoR wurde kritisiert, dass es 2008 schlecht skaliert war, als Twitter Leistungsprobleme hatte. Dies wurde kurz darauf von einer Reihe von Menschen widerlegt. Und obwohl ich nicht in der RoR-Community verwurzelt bin, ist meine Vermutung, RoR skaliert, wenn Sie es richtig machen. Aber denken Sie daran, dass die meisten von uns das Bedürfnis nach Skalierbarkeit haben, aber wirklich nicht.

Also, wenn Sie eine wichtige geschäftliche Entscheidung zwischen der Verwendung von Ruby oder PHP treffen müssen, kümmern Sie sich nicht darum, wie sie skalieren. Und wenn Sie haben, erwägen Sie, Berater einzustellen, um hier zu fragen. Und vergeude nie deine Zeit in Flammen zwischen den Sprachen.

+6

+1 "verschwenden Sie nie Ihre Zeit in flamewars zwischen Sprachen". benutze alles, was zu deinen Fähigkeiten und Bedürfnissen passt. selbst dort gibt es einen wissenschaftlichen Beweis dafür, dass PHP skalierbarer ist als RoR (oder umgekehrt), also was !? Bedeutet das etwas für deine Bewerbung? – ohho

+0

Dies ist eine Interviewfrage. Hat jemand eine akademische und keine praktische Antwort auf die Frage? – Daniel

+11

@Daniel wie was? Skalierbarkeit ist nicht nur eine Frage der Auswahl einer Sprache oder eines Frameworks. Es ist eine architektonische Frage und betrifft den gesamten Stack. Die schnellste Programmiersprache wird nicht skaliert, wenn sie mit ineffizientem Code, einer langsamen Datenbank oder einem schwachen Server usw. verwendet wird. – Gordon

3

Bearbeiten: Gordon +2. +1 für die Antwort und +1 für den Kommentar! :)

Skalierbarkeit für ein Framework beschränkt sich auf Caching, Session-Speicher, Reduzierung der Anzahl der HTTP-Anfragen, sogar UI-Teile der App wie Erstellen von Sprites, Caching js-Dateien usw.! Du kannst RoR/ZendPHP/CakePHP verwenden, egal was es am Ende immer noch ist. Der Vorteil der Verwendung von RoR ist, dass es dem reinen MVC-Paradigma folgt. Es ist einfacher, sich auf Ihre Geschäftslogik zu konzentrieren, als Zeit für die Konfiguration zu verschwenden. Hier ist RoR gegenüber jedem anderen Rahmen erfolgreich.

Skalierbarkeit bezieht sich auch auf das von einem Framework verwendete ORM. Je schneller die Lese-/Schreiboperationen sind, desto besser ist die Leistung. Aber wenn Sie nicht ein vollwertiges Framework verwenden möchten, können Sie immer Micro-Frameworks wie Sinatra, Camping usw. verwenden, die den Overhead etwas reduzieren. Rails hat auch Rails Metal eingeführt, das auf einem Rack aufgebaut ist, das zum Beispiel für rekursive Aufgaben verwendet werden kann und dadurch Ihre Leistung erhöht.

In der Realität geht es bei der Skalierbarkeit einer App hauptsächlich um Ihre Hardware, mehr als die betroffene Software. Es befasst sich auch damit, wie Sie Ihre Daten in der Datenbank organisieren. Zum Beispiel verwendet Google BigTable anstelle eines RDBMS (wie MySQL, PostGreSQL, SQLlite3 usw.) für schnelleres Lesen und Schreiben. Es hängt letztlich von Ihrer App ab.

Ich würde vorschlagen, Sie Zeit zu sehen, diese Präsentation von Adam Wiggins, der Gründer von Heroku verbringen:

Horizontal Scalability via Transient, Shardable, and Share-nothing Resources

-5

Beide sind ziemlich langsam.

Ruby ist wirklich sehr langsam, mit einem großen Speicherbedarf, aber eine nette elegante Sprache.

PHP ist ein wenig schneller als Java und dot Net, aber immer noch ziemlich langsam.

C, Pascal oder ml sind ein paar Größenordnungen schneller, aber die meisten Menschen finden es viel langsamer, Web-Anwendungen in ihnen zu schreiben.

Mein Vorschlag ist ein Nginx Load Balancing Reverse Proxy vor und dann wählen Sie Ihr Framework, damit Sie eine ziemlich gut unbegrenzte Anzahl von Instanzen hinzufügen können. Wenn Sie an Hardware- und Stromkosten interessiert sind, dann gehen Sie für einen effizienteren Stapel. Der Schlüssel ist der intelligente Cache.

Wir haben eine Million Benutzer auf einigen virtuellen Nginx-Maschinen, die wegen des vernünftigen Cachings mit minimaler Last laufen. Der dynamische Inhalt ist eine Mischung von Dingen und mindestens 1000-mal ressourcenintensiver als der Cache. Der Schlüssel für das Caching ist, dass Sie nicht zurückgehen müssen, um zu überprüfen, ob der Cache auf dem neuesten Stand ist, das war unsere beste Designentscheidung.

Wir verwenden eine Mischung aus C, C++, PHP, C#, Java, Python und Ruby, je nachdem, was wir erreichen wollen.

Es gibt einen schönen Blog-Artikel auf Ruby-Skalierbarkeit durch die automatische Konfiguration von Maschinen Puppe mit an http://highscalability.com/blog/2011/6/13/automation-on-aws-with-ruby-and-puppet.html

Wir haben eine ähnliche Einrichtung mit Puppet für alle virtuellen Maschinen. Das einzige Problem ist, dass Puppet normalerweise die meisten Ressourcen für alle unsere Nicht-Ruby-Maschinen verwendet. Daher möchten wir Puppet wirklich in etwas weniger Ressourcenintensives umschreiben als Ruby.

+6

PHP ist etwas schneller als .NET? Nein, bro, .NET ist viel schneller als PHP ... – silent

+4

Dieser erste Teil dieser Antwort ist meistens falsch: PHP ist viel langsamer als serverseitiges Java und C#, in einigen Fällen ist es sogar langsamer und CPU-intensiver als Rubin. –

+2

Es ist nicht fair, PHP ohne einen Op-Code-Cache mit den anderen zu vergleichen. Es ist möglich, die Leistungslücke zwischen PHP und .NET zu überbrücken, indem Sie etwas wie xcache, apc oder eAccelerator verwenden. –