Super einfacher Hochleistungs-HTTP-Server

Super einfacher Hochleistungs-HTTP-Server

Ich erstelle eine URL-Shortener-Webanwendung und möchte wissen, welche Architektur sich dafür am besten eignet, um einen schnellen und zuverlässigen Dienst bereitzustellen.

Ich möchte zwei separate Dienste auf unterschiedlichen Maschinen haben.

  • Auf der ersten Maschine befindet sich die Anwendung selbst mit Apache, Nginx usw.
  • Das zweite enthält die Datenbank.
  • Der Dritte ist für die Bearbeitung der Kurz-URL-Anträge zuständig.

AKTUALISIEREN:

Der Dienst ist überhaupt kein URL-Shortener. Es war einfach einfacher, es so zu erklären.

Ich brauche nur eine Maschine, die eine HTTP-Abfrage empfängt und einen Datensatz in eine Datenbank einfügt. Und ich brauche diese Maschine, um diese einfache Aufgabe auf sehr effiziente Weise zu erledigen. Das System wird unter Linux laufen (die Distribution kenne ich noch nicht) und ich bin völlig offen für jede Sprache oder Technologie. Ich dachte daran, für diesen Dienst Yaws, Tornado oder Snap zu verwenden, aber ich weiß es noch nicht und es ist Zeit, die Architektur für diesen Teil zu planen. Die Datenbank wird auf Hadoop aufgebaut.

Für die dritte Maschine muss ich nur eine Art von HTTP-Anfrage akzeptieren (GET www.domain.com/shorturl), aber das muss sehr schnell gehen und sollte stabil genug sein.

Antwort1

Glauben Sie wirklich, dass es noch einen weiteren URL-Shortener braucht? Es gibt nurso vielevon ihnen ... es sei denn, Sie haben zufällig einen sehr kurzen und passenden Domänennamen ergattern können. Ich glaube einfach nicht, dass Ihre Site von irgendjemandem bemerkt wird. Das ist natürlich nur meine Meinung.

Nun aber zum technischen Teil:

  • In welcher Sprache möchten Sie Ihre Bewerbung verfassen?
  • Auf welchem ​​Betriebssystem möchten Sie es ausführen?
  • Verwenden Sie kostenlose oder kommerzielle Software?

Ohne das zu wissen, ist es schwierig, Ihre Frage zu beantworten.

Die einzige Antwort, die hier Sinn ergeben kann, ist: „Vermeiden Sie Java wie die Pest.“ Ein Java-Anwendungsserver ist für viele Anwendungen ein Overkill, und für eine so einfache wäre er es mit Sicherheit auch.

Ich würde hier Linux/Apache/MySQL/PHP wählen ...WennNatürlich kann ich mir jeden guten Grund vorstellen, das Projekt überhaupt zu starten.


Bearbeiten:

Ok, jetzt macht es ein bisschen mehr Sinn; aber der Vorschlag, so einfach wie möglich anzufangen undDannDie Sorge um die Skalierung ist immer noch gültig. Wenn Ihre Anwendung wirklich so einfach ist, sollte jede anständige Kombination aus Webserver, Sprache und Datenbank in der Lage sein,vieleAnfragen pro Sekunde auf moderner Hardware (aber ich rate trotzdem dringend davon ab, Java zu verwenden).

Wenn die Leistung an erster Stelle steht, würde ich eine in C geschriebene CGI-Anwendung wählen.Daswird die schnellstmögliche Lösung sein, um Größenordnungen schneller als jede interpretierte oder VM-Sprache; und es sollte nicht einfach sein, einfache INSERTs und SELECTs in einer Datenbank auszuführen.Alsoschwierig. Aber ich denke, LAMP ist mehr als genug für Ihre Bedürfnisse ... sie laufen tatsächlichFacebookdrauf, weißt du?

Antwort2

Zeichnen diese nur Daten auf oder senden sie auch etwas Interessantes zurück? Wenn sie nur protokollieren, verwenden Sie einfach Apache und werfen Sie die Apache-Protokolle in Hadoop. Wenn sie irgendeine Art von Daten zurückgeben müssen, ist mir überhaupt nicht klar, wie sie die Daten erhalten, die sie zurückgeben.

Dennoch ist Apache, das so eingerichtet ist, dass es bei jeder Anfrage einfach eine statische Datei zurückgibt, verdammt schnell.

Antwort3

Erstens, ich weiß, Sie sagten, es sei kein URL-Shortener, aber wenn es etwas Ähnliches ist, ist ein RDBMS eine schreckliche Möglichkeit, diese Daten zu speichern. Da es keine echte Beziehung zwischen zwei Datenstücken gibt, benötigen Sie eine flache Speicher-Engine. Erwägen Sie Mongo (oder Couch, je nach Ihrem tatsächlichen Lösungsraum).

Was Ihre Lösung betrifft, seien Sie vorsichtigvorzeitige Optimierung. Es gibt viele Möglichkeiten, damit verrückt zu werden; da Sie gefragt haben, das Verrückteste, das mir spontan einfällt, wäre, Varnish zu starten, alle Ihre Seiten in die VCL zu schreiben und es mit Memcache auf dem Backend zu verbinden, um die entsprechenden Daten zu speichern und abzurufen. Aber realistisch gesehen ist dasbeschissenverrückt, es sei denn, Sie stehen unter offensichtlich absurden Belastungen.

verwandte Informationen