1. #1

    Registriert seit
    11.01.2013
    Beiträge
    1.157
    Thanked 418 Times in 282 Posts

    Standard Frontend - Backend Server

    Ich lese immer wieder, dass man für größere Projekte Backend und Frontend Server verwendet. Fronted soll eher an den User und Backend eher an die Techniker angepasst sein? Das hab ich so gelesen, aber kann das jemand mal genauer erklären?

  2. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: Frontend - Backend Server

    Diese Unterscheidung hat den logischen Hintergrund, dass mehrere Server verwendet werden und der oder die Frontend-Server "näher" am Nutzer liegen bzw. er nur über das Frontend auf das Backend zugreifen kann.
    Zwei nicht untypische Beispiele warum man mehrere Server betreibt, beide Szenarien treffen vom Prinzip her btw. bis auf das Letzte auch auf unsere Netzwerkstruktur zu:

    Caching-Server
    Ist eine nette Technik um die Ladezeit zu beschleunigen und die Serverlast zu reduzieren. Vereinfacht gesagt funktioniert das ganze so: Als Frontend, also an vorderster Stelle, läuft ein Caching-Server, an den sämtliche Anfragen laufen. Bei jeder Anfrage prüft er, ob diese im Cache liegt. Falls ja liefert er die Seite von dort aus. Und zwar mit Top Geschwindigkeit, da er reines HTML im Cache liegen hat - also keine Anwendungslogik, Datenbankabfragen etc. die Zeit und Rechenleistung kosten. Liegt die gewünschte Seite nicht im Cache wird die Anfrage an einen Backend-Server weitergeleitet, der die Seite dynamisch generiert (z.B. eine PHP-Anwendung mit einer Datenbank dahinter). Der Backend sendet die fertige Seite (also das HTML) an den Frontend. Dort wird es in den Cache gelegt und an den Nutzer ausgeliefert. Alle weiteren Nutzer können sich dann aus dem Cache bedienen.

    Der Caching-Server ist in dem Fall das Frontend, da er auf der Strecke zum Nutzer hin näher liegt:
    Nutzer <-----> Caching-Server (Frontend) <-----> Anwendungsserver (Backend)

    Je nach Struktur ist das Backend für den Nutzer überhaupt nicht direkt erreichbar, sondern kann nur über das Frontent angesteuert werden.

    Anwendungen mit verschiedenen Technologien
    Du hast eine Seite example.com und da läuft z.B. Nginx mit einer PHP-Anwendung drauf. Jetzt möchtest du eine zweite Webanwendung hosten, die ebenfalls auf example.com erreichbar sein soll (Beispielsweise auf app.example.com oder example.com/app). Diese Anwendung verwendet aber eine andere Technologie, die dein Webserver nicht unterstützt. Zum Beispiel Java Servlets, für dessen Ausführung ist ein EE-Anwendungsserver wie Jetty oder Tomcat nötig. Da der Nginx aber bereits Port 80 belegt ist es technisch nicht möglich, den Jetty oder was auch immer da als 2. Webserver läuft nur auf app.example.com laufen zu lassen. (Ein anderer Port wäre natürlich grundsätzlich möglich, sehe ich hier aber nicht als akzeptablen Workaround da es insbesondere für öffentlich erreichbare Seiten keinen Zustand darstellt, wenn die Nutzer app.example.com: 81 eingeben müssen um die Seite aufzurufen...)

    Die einzige vernünftige Möglichkeit besteht darin, den Jetty lokal auf einem anderen Port (z.B. 8080) laufen zu lassen. Für app.example.com wird nginx dazu angewiesen, diese Anfragen an einen Backend-Server, also in dem Fall Jetty, weiterzuleiten.
    Ich weiß nicht in wie weit du dich mit der Konfiguration von Webservern auskennst, aber im Folgenden mal ein auf das wesentliche reduziertes Beispiel wie dieses Szenario in Nginx aussehen könnte, dass dies evtl. etwas verdeutlicht:

    Code:
    server {
        # Server für die Subdomain app.example.com
        server_name app.example.com;
        # Wir sind auf Port 80, damit der Nutzer keinen spezifischen Port eingeben muss (also app.example.com statt app.example.com:1337 oder ähnliches)
        listen 80;
        # Alle Java Servlet Pages werden an einen Backend-Server weitergeleitet
        location ~ \.jsp$ {
            proxy_pass http://127.0.0.1:8080;
        }
    }
    Ruft man nun app.example.com/index.jsp auf, wird Nginx diese Anfrage an Jetty weiterleiten. Nginx fungiert als reiner Reverse Proxy, d.H. er leitet die von Jetty empfangene Datenpakete einfach nur an den Client weiter - ähnlich wie der Caching-Server, funktioniert wie stille Post, nur dass eben am Ende kein Blödsinn ankommt:

    Nutzer <-----> Nginx (Frontend) <-----> Jetty EE-Anwendungsserver (Backend)

    Dies gilt natürlich nur für app.example.com, denn unter example.com haben wir eine PHP-Anwendung, die Nginx direkt (ich nenne das fastcgi-Backend mal direkt) ausliefern kann. Wird also example.com aufgerufen, sieht die interne Strecke von und zum Nutzer wie bei jedem anderen Webserver auch aus:

    Nutzer <-----> Nginx (Frontend)

    Der Vollständigkeit halber gibts natürlich bei PHP über CGI auch eine Art Backend. Das scheint mir aber für diese Erklärung weniger dienlich zu sein und wird daher an dieser Stelle zur Vereinfachung vernachlässigt.

    Lastverteilung
    Größeren Seiten im Sinne von einer sehr hohen Anzahl an Besuchern/Seitenaufrufen reicht ein einzelner Server bei weitem nicht mehr aus. Nehmen wir als Extrembeispiele mal Google, Youtube oder Facebook. Die haben für jeden einzelnen Dienst (Webserver, Datenbankserver etc.) eine ganze Farm von Servern. Im Jahr 2010 waren es alleine bei Facebook 30.000 Stück (Quelle: Rechenzentren: Wer die meisten Server hat - SPIEGEL ONLINE) Nun muss man natürlich diese ganzen Server unter einen Hut bekommen, d.H. die Last möglichst gleichmäßig verteilen.

    Grob gesagt hat man dafür an vorderster Stelle einen Load Balancer, der schaut welcher Server am geeignetsten ist um die Seite möglichst schnell auszuliefern. Beispielsweise derjenige mit der geringsten Auslastung. In der Praxis spielen da oft noch ein paar andere Dinge eine Rolle, welche das sind kann auch mehr oder weniger von der individuellen Struktur abhängen. Das vernachlässigen wir an der Stelle daher mal, würde zu tief ins Detail gehen. Auf jeden Fall wird der ausgewählte Server die Anfrage des Nutzers dann bearbeiten. Der Load Balancer ist aufgrund seiner Position also auch ein Frontend-Server.

    Generell spricht man meist bei mehrschichtigen Systemen von Frontend und Backend, um die Trennung zu verdeutlichen und besser unterscheiden zu können. Ein anderes Beispiel dafür wäre eine klassische Webanwendung mit Datenbank hinten dran. Die Datenbank ist in der Regel ein Backend der Webanwendung, auf die nur über die Anwendung zugegriffen wird - also auch ein Backend. Genau so kann man aber auch die Benutzerschnittstelle, also bei Webanwendungen die sichtbare Internetseite im Browser, als Frontent sehen. Das Backend besteht dann aus der Anwendung die den HTML-Code des Frontent generiert (z.B. PHP) inklusive allem was mit dran hängt. Fast immer wird dies eine Datenbank sein. Man kann aber beispielsweise auch dort Caching einbauen und hat einen Redis/Memcache/Whatever Server hinten dran - Der wäre dann auch ein Teil des Backend


  3. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    MHRCube (03.04.2015), Sky.NET (03.04.2015)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 14.07.2013, 01:02
  2. Zwei Minecraft Bukkit Server auf einem Server oder Computer
    Von Max899 im Forum Server-Administration
    Antworten: 1
    Letzter Beitrag: 04.05.2013, 17:57
  3. Neu Awp server (cs 1.6)
    Von orhan-1991 im Forum Counter Strike
    Antworten: 1
    Letzter Beitrag: 14.03.2012, 16:03
  4. MW3 Server
    Von Karma im Forum Call of Duty
    Antworten: 0
    Letzter Beitrag: 01.02.2012, 03:52
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.