Zum Inhalt springen
BlogVernetzungVerwenden Sie ein VLAN oder VPC, um Ihre App mit einer dreistufigen Architektur zu sichern

Verwenden Sie ein VLAN oder VPC, um Ihre Anwendung mit einer dreistufigen Architektur zu sichern

Die dreistufige Architektur verwendet eine Daten-, Anwendungs- und Darstellungsebene

Die Isolierung Ihres Netzwerks in einer VPC hat erhebliche Sicherheitsvorteile, wie z. B. die Ermöglichung privater Zusammenarbeit und die ordnungsgemäße Speicherung sensibler Daten.

Auf der Entwicklerseite ermöglicht die Netzwerkisolierung auch die Bereitstellung von mehrschichtigen Webanwendungen. Das Tiering Ihrer Anwendung ermöglicht es Ihnen, Schichten mit und ohne öffentlichen Internetzugang zu segmentieren. Dies wird häufig verwendet, um die Datenbankschicht vom öffentlichen Internet zu isolieren, während Patches und Software-Updates von einer oberen Schicht und nicht direkt aus dem öffentlichen Internet bezogen werden können. Dies verringert nicht nur die Angriffsfläche, sondern ermöglicht auch den Einsatz in mehreren Regionen.

Es gibt zahlreiche Möglichkeiten, mehrere Schichten zu betreiben, aber in der Regel können Sie sich auf einige grundlegende Formen verlassen, die die Skalierbarkeit, Sicherheit und Zuverlässigkeit maximieren. Eines der gängigsten Designs ist eine dreistufige Architektur, die besonders in Cloud-basierten Umgebungen beliebt ist.

Eine dreistufige Anwendung besteht aus drei verschiedenen Schichten, die sich auf unterschiedlichen Servern befinden und mit einem hohen Maß an Unabhängigkeit entwickelt und verwaltet werden können. Diese Teile sind:

  1. Präsentation: Die externe Schnittstelle, die die Kommunikation zwischen dem Benutzer und der Anwendung verwaltet und in der Regel aus einem Webserver mit HTML und begleitendem Webentwicklungscode besteht.
  2. Anwendung: Eine benutzerdefinierte Anwendung, die die notwendige Geschäftslogik bereitstellt und die Anwendung zusammenhält.
  3. Daten: Ein Datenbanksystem zum Speichern und Abrufen von Daten, die mit der Anwendung verwendet werden.

Diese drei Ebenen dienen als separate Dienste, die über netzbasierte APIs kommunizieren. Aus Sicherheits- und Leistungsgründen müssen sich die Anwendungs- und die Datenebene häufig im selben lokalen Netzwerk hinter einer gemeinsamen Firewall befinden, aber die Trennung der einzelnen Schichten bietet die Möglichkeit, jede Komponente auf unterschiedlicher Hardware oder sogar an verschiedenen physischen Standorten einzusetzen. Die Flexibilität hängt hier stark von den Anforderungen Ihrer Anwendung ab.

Das folgende Diagramm zeigt eine reale Ansicht einer einfachen dreistufigen Webanwendung. Der Webserver in der Präsentationsschicht bietet eine Schnittstelle für einen Benutzer, der in einem Browserfenster arbeitet. Auf der gegenüberliegenden Seite nimmt die Datenebene die Form einer Datenbank an, bei der es sich um ein einzelnes System oder einen Cluster handeln kann, der dem Netzwerk als eine einzige Einheit präsentiert wird. Zu den beliebten Open-Source-Optionen für die Datenbankebene gehören MySQL, MariaDB und PostgreSQL für SQL und MongoDB und Cassandra für NoSQL.

1
Abbildung 1: Die dreistufige Architektur unterteilt eine Webanwendung in eine Präsentationsschicht, eine Anwendungsschicht und eine Datenschicht.

Zwischen dem Webserver und der Datenbank befindet sich die Anwendungsebene, auf der Sie wahrscheinlich den größten Teil Ihrer Programmierzeit verbringen werden. Die Anwendungsschicht enthält den benutzerdefinierten Code und die Geschäftslogik, die Sie benötigen, damit die Anwendung ihre Ziele erreichen kann. Am Frontend sendet der Webserver Abfragen an die Anwendungsschicht. Die Anwendungsschicht antwortet dem Webserver, und der Webserver formatiert die Daten und präsentiert sie dem Benutzer. Am hinteren Ende fragt die Anwendungsschicht die Datenbank ab, empfängt die Daten und verarbeitet sie dann, um dem Benutzer Informationen und Einblicke zu geben.

Ein sehr einfaches Beispiel: In der Datenbank könnten die Verkaufszahlen eines Unternehmens gespeichert sein. Der Benutzer gibt eine Anfrage ein, um die durchschnittlichen Tagesverkäufe für ein bestimmtes Produkt an einem bestimmten Ort für ein bestimmtes Zeitintervall zu erhalten. Der Webserver sendet die Anfrage an die Anwendungsschicht. Die Anwendungsschicht formuliert eine Abfrage an die Datenbank, erhält die Rohdaten, führt die erforderlichen Berechnungen durch und sendet dann eine Antwort zurück an den Webserver.

1
Abbildung 2: Ein Benutzer fordert eine Reihe von Informationen bei der Präsentationsschicht an, die von der Anwendungsschicht in eine Datenbankabfrage übersetzt wird.

Es gibt keine praktische Drop-in-Lösung für die Anwendungsschicht, die z. B. einem Apache Webserver für die Präsentationsschicht oder einer MongoDB-Datenbank für die Datenschicht entspricht. Stattdessen wird benutzerdefinierter Code in der Regel in Python, PHP oder Ruby für die Anwendungsschicht geschrieben. Es gibt jedoch einige Programmier-Frameworks, mit denen Sie den Code effizienter schreiben können, darunter Django (für Python), Rails (für Ruby) und Symfony (für PHP).

Theoretisch könnte die Anwendungsschicht mit der Darstellungsschicht kombiniert werden, indem der Webserver mit dem notwendigen Code für direkte Datenbankabfragen ausgestattet wird, aber dies wäre für die meisten komplexen Geschäftslogiken unpraktisch und würde viele der Vorteile der Segmentierung von Anwendungen zunichte machen.

Einer der wichtigsten dieser Vorteile ist die erhöhte Sicherheit mit einer kleineren Angriffsfläche. Wie in Abbildung 1 dargestellt, minimiert eine dreistufige Lösung den Teil der Anwendung, der sich vor der Firewall befinden muss. Der Webserver kommuniziert über eine sichere API. Der Rest der Aktivitäten befindet sich hinter der Firewall und, was besonders wichtig ist, in einem privaten Adressraum, der nicht über das Internet zugänglich ist. Insbesondere SQL-Injektionen sind eine der häufigsten Schwachstellen - und eine der schädlichsten. Sie lassen sich verhindern, indem die gesamte direkte Kommunikation mit der Datenbank isoliert und geschützt wird.

Ein weiterer Vorteil der dreistufigen Anwendung ist die Zuverlässigkeit. Ein Ausfall in einer Schicht ist weniger wahrscheinlich, dass die anderen Schichten betroffen sind, wenn jede Schicht auf einem separaten Server oder auf anderer Hardware oder in einem anderen Rechenzentrum ausgeführt wird. Dies bietet uns auch die Möglichkeit der Skalierbarkeit. Da die Komponenten unabhängig voneinander arbeiten, können sie auch unabhängig voneinander wachsen. Wenn z. B. der Datenbankzugriff einen Leistungsengpass darstellt, können Sie dem Datenbank-Cluster ohne größere Unterbrechung des Gesamtbetriebs weitere Knoten hinzufügen.

Ein dreistufiger Ansatz kann auch den Entwicklungsprozess optimieren. Die APIs, die die Ebenen miteinander verbinden, trennen die Komponenten in einer Weise, die die Effizienz der Arbeitsteilung unterstützt. Webentwickler und Administratoren können den Webserver betreiben und warten, während Datenbankentwickler und Administratoren das Datenbanksystem betreiben können. Dazwischen können sich die Spezialisten für das Framework, das Sie für die Anwendungsebene verwenden, auf den Anwendungscode konzentrieren. In einem DevOps-Szenario können die Anwendungsentwickler zum Beispiel eine neue Version des Anwendungscodes offline erstellen und testen, so dass sie mit minimalen Auswirkungen auf den Betrieb leicht ausgetauscht werden kann.

Wenn Sie mit dem Aufbau einer Webanwendung beginnen, sollten Sie eine dreistufige Architektur in Betracht ziehen. In den heutigen Container- und Cloud-Umgebungen ist es einfach, die Komponenten auf verschiedene Systeme aufzuteilen, und Sie werden für Ihre Bemühungen mit einer zuverlässigeren, sichereren und besser skalierbaren Anwendung belohnt.

Beginnen Sie noch heute auf Linode mit dem Aufbau Ihrer Anwendungsschichten.

Ressourcen: Erste Schritte mit VLANs | Rechenzentrumsübergreifende Anwendungen

Linode Lösungen: VLANs | Verwaltete Datenbanken


Kommentare (1)

  1. Author Photo

    You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.

Kommentar abgeben

Ihre E-Mail Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit *gekennzeichnet