2009-06-03 7 views
4

Referenz another SO question ich hatte, war mir this article über Twitter Wechsel von Rails zu Scala gegeben, und in dem Artikel ist dieser Kommentar:Was bedeutet Middleware für Twitter und Scala?

Bis zum Ende dieses Jahres, sagte Payne, Twitter seine gesamten haben hofft Middleware-Infrastruktur und ihre APIs portiert auf die neue Sprache. Ruby wird bleiben, aber nur am Frontend. „Wir sind immer noch glücklich mit Rails für Gebäude Benutzer zugewandter Funktionen ... Performance-weise, ist es für die Menschen Klicken um Web-Seiten in Ordnung. Es ist die schweres Heben, asynchrone Verarbeitung Art von Sachen, die wir bewegt haben weg von. "

Was bedeutet Middleware hier? Was genau bedeutet es, Ruby am Frontend zu haben? Heißt das Schienen am vorderen Ende mit sehr wenig ORM? Wie trifft es sich mit Scala? Was bedeutet dieser Kommentar?

Nur versuchen, die Architektur zu verstehen. Vielen Dank.

Antwort

5

Es ist eine Form von N-Tier Architecture. Anfangs werden die meisten Sites als 2-Tier-Architektur mit einem Webserver und einer Datenbank gestartet. Der Webserver liefert die Seiten, die der Benutzer sieht, während auf die Datenbank von diesen dynamischen Seiten zugegriffen wird.

Wenn eine Architektur in mehrere Ebenen unterteilt ist, haben Sie in der Regel eine Webanwendung an der Vorderseite mit einer Art Anwendungsserver, den die Webanwendung aufruft. Dieser Anwendungsserver enthält die Geschäftslogik und macht die Anwendung funktionsfähig. Das "Gesicht" für die Anwendung lässt die Dinge einfach hübsch aussehen und formatiert sie für die Benutzer.

Der Anwendungsserver oder "Middleware" ist einfach eine Sammlung von Funktionen, die von den Webservern aufgerufen werden können. Die Middleware muss für eine Seite wie Twitter, auf der die meiste Aktivität beim Versenden von Nachrichten stattfindet, leistungsfähig sein, und es gibt nicht so viel Aktivität von Leuten, die auf die Website zugreifen. Die Verbindung zwischen Schichten ist wahrscheinlich eine Standard-Web-Service-Technologie, könnte aber eine benutzerdefinierte Sache sein, vielleicht eine REST- oder eine andere Art von Web-Service, bei der die Web-Anwendung (Ruby on Rails) auf Anwendungsdaten zugreifen kann.

In dieser Art von Architektur hat Rails sicherlich alle ORM und Datenverwaltung in die Middleware verbannt.

Middleware ist auch ein vager Begriff und kann aus vielen Tiers bestehen, weshalb sie es N-Tier nennen. Ich würde wetten, dass Twitter einen anderen Teil ihrer Middleware für Messaging hat, während ein anderer Teil das Verwalten von Accounts, das Abrufen von Nachrichten usw. behandelt. Die Idee ist, in der Lage zu sein, nach oben zu skalieren, indem man Hardware hinzufügt, wo man eine haben kann Cluster von Servern, die Webseiten bedienen, ein weiterer Cluster, der Nachrichten verarbeitet, und dann ein Cluster von Datenbankservern, der alles unterstützt. Es ist keine exakte Wissenschaft, jede Architektur ist anders, aber im Allgemeinen kann man so denken.

+0

Immer noch eine gute Antwort. Vielen Dank. – johnny

-1

Messaging-Infrastruktur in diesem Fall. Sie haben wahrscheinlich von einer auf Ruby basierenden Lösung auf JMS umgestellt.

+0

JMS genannt? Es tut uns leid. Ich bin hier in meinen Akronymen verloren. – johnny

1

Probieren Sie Googlen für "ruby twitter scala payne" und Sie erhalten mehr, als Sie wahrscheinlich zu diesem Thema benötigen.

Meine (wahrscheinlich unvollständige) Verständnis ist, dass viele der Twitter "Back-End" nicht besonders gut codiert (siehe Obie Fernandez' post, die einige Alex Payne Zitate herausgreift). Dies scheint zumindest teilweise auf den anfänglichen Quick-Hack-Charakter der App zurückzuführen zu sein, der von den Ereignissen überholt wurde. Sie erlebten erhebliche Schmerzen, als der Einsatz der App exponentiell zunahm. Es gab eine beliebige Anzahl von Fingern, die auf Twitter (und durch die Association Rails) auf "nicht skalieren" zu der Zeit hingewiesen wurden.

Twitter stützt sich stark auf Message-Queuing und es ist dieser Teil, den ich in Scala geschrieben habe, was wahrscheinlich (keine persönliche Erfahrung) eine sehr gute Wahl der Sprache für den Job ist.

1

Mein Verständnis ist, dass, was sie zu Scala migrierten, ist die Nachricht "Warteschlange": von einer Ruby-ORM-DB-Lösung zu einem verteilten Messaging-System mit Scala. Ein Dienst mit der Lautstärke von Twitter hat spezielle Anforderungen und sie haben ihre eigene Nachrichtenlösung erstellt. Wird "Kestrel"