2010-09-05 21 views
6

Ich wurde von Slashdot inspiriert, ich hörte, dass es sehr begrenzte Server verwendet, um viele Benutzer mit schneller Reaktion zu unterstützen. Und es gibt eine Website namens slashcode, nicht sicher, ob slashdot seinen Quellcode verwendet.Ist perl der schnellste Weg, um eine Hochleistungsseite zu schreiben?

Ich frage mich, ob Perl der beste ist, um eine Hochleistungs-Webseite zu schreiben? Ich weiß, dass Apache oder IIS viel Overhead haben wird?

Irgendeine Idee, Bücher, Papiere, Tutorials?

+9

Eine gute Architektur wird wichtiger sein als die Sprache. Dazu gehören die anderen Ebenen wie Caching, Datenbank, Dateiablage usw. –

+0

Ja, Slashcode ist ein Code hinter Slashdot. Es verwendet Apache + mod_perl. –

Antwort

14

Ich gehe davon aus, dass Sie unter "hohe Leistung" sowohl die tatsächliche Zeit für die Erstellung einer Seite verstehen, als auch die Anzahl, die gleichzeitig zur Verfügung steht.

Die Programmiersprache ist nicht so wichtig wie Ihre Server und Algorithmen. Vielleicht möchten Sie in The C10k Problem schauen, das eine Reihe neuer Technologien und Verfeinerungen von Techniken mit dem Ziel ist, einem einzelnen Webserver zu ermöglichen, gleichzeitig mehr als 10.000 gleichzeitige Verbindungen zu verarbeiten. Dinge wie die Nginx und lighttpd Webserver und varnish Cache kamen aus diesem Projekt.

Große Gewinne entstehen durch die Verwendung eines sehr leichten, sehr schnellen, sehr modularen Webservers (Apache und IIS), mit einem sehr leichten, sehr schnellen Cache davor, um das gleiche zweimal zu verarbeiten . Bei einem Server mit hohem gemeinsamen Zugriff können Sie selbst durch das Caching für einige Sekunden Hunderte oder Tausende von Prozessen speichern. Indem Sie eine statische Seite in eine Reihe von AJAX-Anforderungen zerlegen, können Sie die statischeren Bits und Teile unabhängig von den Bits, die sich häufig ändern, zwischenspeichern.

Anstatt mod_blah zu verwenden, das Ihr Programm in einen Webserver einbettet, verwenden Sie FastCGI oder ähnliches, das Ihre Programme in ihre eigenen kleinen Anwendungsserver bringt. Dadurch können sie unabhängig vom Webserver, möglicherweise auf Remote-Computern und mit Lastenausgleich, ausgeführt werden. So können Sie Ihre Rechenleistung einfach skalieren.

Schließlich werden Sie wirklich wichtige Teile Ihres Anwendungscodes bis zu dem Punkt mikrooptimieren, an dem die Sprache zählt, aber Sie können sich auf die wirklich wichtigen Bits konzentrieren, anstatt das gesamte Projekt allein nach der rohen Leistung auszuführen .

0

This post auf serverfault schlägt vor, dass Sie ein Erweiterungsmodul zu nginx für das Dienen von dynamischem Inhalt schreiben könnten.

Solche Module müssen zu nativem Maschinencode kompiliert werden, also sind sie wahrscheinlich schneller als Perl.

+0

Danke, aber irgendwie möchte ich C/C++ nicht verwenden, um die Webseite zu schreiben, Python wird vielleicht bevorzugt ... Sieht web.py gut aus? –

3

Unabhängig davon, wie schnell Ihr Code ist, wird der Engpass irgendwann aufhören, Ihr Code zu sein und der Webserver selbst zu sein.

2

Solange Sie die CGI-Schnittstelle [1] nicht verwenden, um mit dem Webserver zu sprechen, wird die Sprache in 99% der Fälle keinen spürbaren Einfluss auf die Leistung haben. Die Ausnahmen sind solche, bei denen Sie eine umfangreiche Back-End-Verarbeitung durchführen, anstatt einfach etwas aus einer Datenbank zu holen, leicht zu massieren und an den Benutzer zu senden - und wenn Sie so etwas tun, Wahrscheinlich ist es besser, wenn möglich asynchron zu machen und die Ergebnisse in eine Datenbank zu stopfen, um sie leicht massieren und später betrachten zu können.

Der Grund ist ganz einfach, dass Netzwerkverbindung und Datenübertragungszeiten so viel länger als die Ausführungszeit Ihres Programms sind, dass es nicht einmal lustig ist. Wenn es zwei Sekunden dauert, um eine Netzwerkverbindung zum Server herzustellen und die Datenübertragung in jede Richtung durchzuführen, wird sich niemand darum kümmern, ob die Verarbeitung auf dem Server 0,1 s oder 0,2 s zusätzlich zu den zwei Netzwerkaktivitäten hinzufügt.

[1] Beachten Sie, dass ich hier über die Vanille CGI „einen neuen Prozess starten jede eingehende Anforderung zu bedienen“ spreche Modell, nicht das Perl-CGI-Modul (CGI.pm/use CGI). Es gibt Möglichkeiten zu use CGI, während auch ein langlebiger Prozess verwendet wird, der mehrere Anforderungen während seiner Lebensdauer behandelt.

1

Architektur und Systemdesign sind wichtiger als die Sprachwahl für eine App mit hohem Traffic.

Aber die Auswahl einer Sprache ist nicht das erste, was Sie tun sollten, es sei denn, Sie planen, alles von Grund auf zu schreiben.

Sie sollten ein Toolset auswählen.

Wenn Sie etwas am ehesten haben möchten, schauen Sie sich bestehende Web-Anwendungen an. Was erfüllt Ihre Bedürfnisse? Wie anpassungsfähig ist das? Erfüllt es Ihre Leistungs-/Skalierbarkeitsanforderungen? Wenn dies der Fall ist, entspricht die von Ihnen verwendete Sprache der Sprache, die Ihre App verwendet.

Wenn Sie in vorhandenen Apps keine gute Übereinstimmung finden, schauen Sie sich verschiedene Frameworks an, Catalyst, Rails, Squatting, Camping, Jifty, Django. Es gibt a nice list of them on Wikipedia.

Sie sollten in der Lage sein, einen Rahmen zu finden, der die Arbeit erledigen wird, viele von ihnen. Wähle ein paar Anwärter und wähle einen aus. Die Sprache, die Sie verwenden, ist die Sprache, die Ihr Framework verwendet.

-1

Ich glaube nicht, dass es schneller als andere allgemeine Optionen wie PHP, Python, Ruby, Java oder C# wäre.

+0

mod_perl ermöglicht eine sehr enge Integration mit Apache (Ihr Programm wird zu einer Subroutine innerhalb von Apache), also kann es schneller sein. –

+0

@Alexandr Ciornii wow, danke für den Downvote. Aber es gibt keinen Beweis, dass Perl eine höhere Leistung als PHP, Python, Perl usw. auf Apache ist. –

1

Es gibt wirklich keine "Hochleistungsseite". Das ist, als würde man fragen, was das schnellste Auto ist (und wenn Sie genug sehen Top Gear, Sie wissen, dass das keine einfache Antwort ist). Sie müssen darüber nachdenken, was Sie eigentlich tun möchten (d. H. Die jeweilige Aufgabe), was Sie tun müssen, um dies zu erreichen, und welche Werkzeuge dafür am besten geeignet sind.

Werden Sie viele Leute haben, die viele kleine Dinge machen, oder weniger Leute, die wirklich große Dinge tun? Wird es auf einmal passieren (d. H. Spikes), oder wird es eine konstante Nachfrage sein? Senden Sie kleine Datenblöcke zurück oder bereiten Sie wirklich große Dateien vor?

Angenommen, dass jede Portion so schnell wie möglich war. Es ist sicher eine Fantasie, aber bedenke es trotzdem. Nun, da alles so schnell wie möglich ist, ordnen Sie jeden Teil danach an, wie schnell er ist. Was ist der langsamste Teil? Ist es Festplattenzugriff? Netzwerk IO? Socket-Verfügbarkeit?

Wenn Sie nicht an dem Punkt sind, an dem Sie bereits darüber nachdenken, ist die Sprache wahrscheinlich nicht so wichtig, außer dass Sie damit vertraut sind.

Es gibt eine Menge Bücher über Web-Performance da draußen. :)

Verwandte Themen