2011-01-03 6 views
3

Ich habe eine Anforderung von einem Client für meine PHP-Web-Anwendung zu 3-Tier. Zum Beispiel hätte ich einen Webserver auf Apache in der DMZ, aber es sollte keine DB-Verbindungen enthalten. Es sollte eine Verbindung zu einem Middle-Server herstellen, der die Geschäftsobjekte hostet, sich jedoch hinter der Firewall befindet. Dann verbinden sich diese Objekte mit meinem SQL-Cluster auf einem anderen Server.Wie mache ich eine 3-Tier mit PHP

Ich habe tatsächlich diese mit .NET getan, aber ich bin nicht sicher, wie mein Stack einrichten PHP. Ich nehme an, dass ich meine mittlere Front-Tier-Ebene die mittlere Schicht mit REST-basierten Webdiensten aufrufen könnte, wenn ich meine mittlere Schicht als zweiten Webserver erstelle, aber das scheint übermäßig komplex zu sein.

Der Hauptgrund dafür ist, erweiterte Sicherheit: wir keine Passwörter auf den DMZ ersten Tier-Webserver haben. Der zweite Grund ist die Skalierbarkeit - mehrere Server auf verschiedenen Ebenen zu haben, die die Anfragen verarbeiten können. Der letzte Grund ist für die Bereitstellung - es ist einfacher, wenn ich eine Reihe von Servern für Testzwecke offline nehmen kann, bevor sie wieder in Produktion gehen.

Gibt es ein Open-Source-Projekt, das zeigt, wie das geht? Das einzige Beispiel, das ich finden kann, ist der Webserver, der Dateien von einem freigegebenen Laufwerk auf einem anderen Rechner hostet (so wie DotNetNuke vorgibt, 3-stufig zu sein), aber das ist NICHT sicher.

Anmerkung: Ich habe in SO für diese Antwort sah, und ich habe eine Menge von ähnlichen Fragen sehen, haben aber nicht, dass jemand, der tatsächlich beantwortet gefunden. Dies ist NICHT eine Datenzugriffsschicht (obwohl ich sie verwenden werde) - meine primäre Frage ist das Design zwischen UI und Middle Tier.

Antwort

6

Eine Option wäre FastCGI zu verwenden.

Auf der ersten Ebene müssen Sie einfach die Front-End-Server (Apache, Lighttpd, NginX usw.) mit FastCGI-Servern auf der zweiten Ebene verbinden.

Die andere Möglichkeit wäre, Reverse-Proxy von der ersten Ebene auf die zweite Ebene. Dies ist dem ersten Beispiel sehr ähnlich, außer dass die 2. Stufe einen Webserver betreibt, während dies bei FastCGI nicht der Fall ist.

Aber die Frage, die Sie sich stellen müssen, ist warum. Sie können dasselbe mit 2 Ebenen erreichen und einfach ein separates Netzwerk für jede Ebene haben (so dass die DMZ'd Server 2 Netzwerkkarten haben, eine für jedes Netzwerk). Die DB ist nach wie vor von der Welt isoliert, aber Sie müssen nicht über das Hinzufügen von unnötiger Komplexität im System kümmern ... Denken Sie daran, desto mehr Stücke Ihnen die mehr als kann hinzufügen, scheitert ...

+0

Große Antwort und Gegenargument. Schön. – Chris

+0

Ich weiß, dass dies eine komplexere Architektur ist, aber es machte Sinn, wenn ich es in .NET gemacht habe :) – Ric

+0

Wie würden meine PHP-Skripte auf dem Webserver mit dem FastCGI auf der zweiten Ebene kommunizieren? Und wie würde mein PHP DAL-Objekt auf dem MiddleTier FastCGI verwenden, um die DB aufzurufen? – Ric

Verwandte Themen