Dynamische Anwendungen bezeichnen im Gegensatz zu statischen Website-Inhalten Webanwendungssoftware, die mit serverseitigen Sprachen wie C/C++, PHP, Java, Perl, .NET entwickelt wurde, wie Foren, Online-Fotoalben, soziale Netzwerke, BLOG und andere gängige Anwendungen. Dynamische Anwendungssysteme sind üblicherweise untrennbar mit Datenbanksystemen, Caching-Systemen, verteilten Speichersystemen und so weiter verbunden.

Die Plattform für große dynamische Anwendungssysteme ist in erster Linie eine zugrunde liegende Systemarchitektur, die für Websites mit hohem Verkehrsaufkommen und hoher Nebenläufigkeit aufgebaut wird. Der Betrieb großer Websites erfordert eine zuverlässige, sichere, skalierbare und leicht wartbare Anwendungssystemplattform als Unterstützung, um den reibungslosen Betrieb der Website-Anwendungen zu gewährleisten.

Groß angelegte dynamische Anwendungssysteme lassen sich weiter in mehrere Subsysteme unterteilen:

  • 1) Web-Front-End-System
  • 2) Lastverteilungssystem
  • 3) Datenbank-Cluster-System
  • 4) Caching-System
  • 5) Verteiltes Speichersystem
  • 6) Verteiltes Serververwaltungssystem
  • 7) Codeverteilungssystem

Web-Front-End-System

Strukturdiagramm:

Um die Ziele der Serverfreigabe zwischen verschiedenen Anwendungen, der Vermeidung einzelner Ausfallpunkte, der zentralisierten Verwaltung, der einheitlichen Konfiguration usw. zu erreichen, werden Server nicht nach Anwendung aufgeteilt. Stattdessen werden alle Server einheitlich verwendet, und jeder Server kann Dienste für mehrere Anwendungen bereitstellen. Wenn der Datenverkehr zu bestimmten Anwendungen zunimmt, verbessert das Hinzufügen von Serverknoten die Leistung des gesamten Serverclusters, und auch andere Anwendungen profitieren davon. Dieses Web-Front-End-System basiert auf virtuellen Hostplattformen wie Apache/Lighttpd/Eginx und stellt eine Laufzeitumgebung für PHP-Programme bereit. Server sind für Entwickler transparent, und Entwickler müssen nicht in die Serververwaltung involviert werden.

Lastverteilungssystem

Lastverteilungssysteme werden in zwei Typen unterteilt: Hardware und Software. Hardware-Lastverteilung ist effizient, aber teuer, wie z. B. F5. Software-Lastverteilungssysteme sind kostengünstig oder kostenlos, und obwohl sie weniger effizient als Hardware-Lastverteilungssysteme sind, reichen sie für Websites mit durchschnittlichem oder etwas höherem Datenverkehr aus, wie z. B. LVS und Nginx. Die meisten Websites verwenden eine Kombination aus Hardware- und Software-Lastverteilungssystemen.

Datenbank-Cluster-System

Strukturdiagramm:

Da das Web-Front-End eine lastverteilte Clusterstruktur verwendet, um Dienstverfügbarkeit und Skalierbarkeit zu verbessern, muss auch die Datenbank hochverlässig sein, um die hohe Zuverlässigkeit des gesamten Dienstsystems zu gewährleisten. Wie können wir ein hochverlässliches Datenbanksystem aufbauen, das umfangreiche gleichzeitige Verarbeitung bewältigen kann?

Wir können die im obigen Diagramm dargestellte Lösung übernehmen:

1) Verwenden Sie die MySQL-Datenbank. In Anbetracht der Eigenschaft von Web-Anwendungen, dass Datenbanklesevorgänge häufiger als Schreibvorgänge sind, haben wir hauptsächlich die Lesedatenbank optimiert, indem wir dedizierte Lesedatenbanken und Schreibdatenbanken bereitgestellt und Lese- und Schreibvorgänge in der Anwendung implementiert haben, um jeweils auf unterschiedliche Datenbanken zuzugreifen.

2) Verwenden Sie den MySQL-Replication-Mechanismus, um Daten schnell von der Master-Datenbank (Schreibdatenbank) auf Slave-Datenbanken (Lesedatenbanken) zu replizieren. Eine Master-Datenbank entspricht mehreren Slave-Datenbanken, und Daten aus der Master-Datenbank werden in Echtzeit mit den Slave-Datenbanken synchronisiert.

3) Es gibt mehrere Schreibdatenbanken, von denen jede von mehreren Anwendungen gemeinsam genutzt werden kann. Dies kann das Performance-Engpass-Problem und das Single-Point-of-Failure-Problem von Schreibdatenbanken lösen.

4) Es gibt mehrere Lesedatenbanken, und Load-Balancing wird durch Load-Balancing-Geräte erreicht, wodurch hohe Performance, hohe Zuverlässigkeit und hohe Skalierbarkeit der Lesedatenbanken erzielt werden.

5) Datenbankserver sind von Anwendungsservern getrennt.

6) Verwenden Sie BigIP für das Load-Balancing für Slave-Datenbanken.

Caching-System

Caching wird in Datei-Caching, Speicher-Caching und Datenbank-Caching unterteilt. In großskaligen Web-Anwendungen ist Speicher-Caching am weitesten verbreitet und am effizientesten. Das am häufigsten verwendete Speicher-Caching-Tool ist Memcached. Die Verwendung eines geeigneten Caching-Systems kann die folgenden Ziele erreichen:

1. Die Verwendung eines Caching-Systems kann die Zugriffseffizienz verbessern, den Serverdurchsatz erhöhen und die Benutzererfahrung verbessern.

2. Den Zugriffsdruck auf Datenbanken und Speicherserver reduzieren.

3. Es gibt mehrere Memcached-Server, um Single Points of Failure zu vermeiden, hohe Zuverlässigkeit und Skalierbarkeit zu bieten und die Performance zu verbessern.

Verteiltes Speichersystem

Strukturdiagramm:

Die Speicheranforderungen in einer Web-Systemplattform weisen die folgenden zwei Merkmale auf:

1) Die Speicherkapazität ist sehr groß und erreicht oft eine Größenordnung, die ein einzelner Server nicht bereitstellen kann, wie beispielsweise Anwendungen für Fotoalben und Videos. Daher ist ein professionelles Großspeichersystem erforderlich.

2) Jeder Knoten im Cluster mit Lastverteilung kann auf jedes Datenobjekt zugreifen, und die Datenverarbeitung jedes Knotens kann auch von anderen Knoten mitgenutzt werden. Daher können die Daten, auf denen diese Knoten arbeiten müssen, logisch betrachtet nur ein Ganzes sein, keine unabhängigen Datenressourcen.

Daher ist ein hochleistungsfähiges verteiltes Speichersystem ein sehr wichtiger Bestandteil von groß angelegten Website-Anwendungen. (Hier muss eine kurze Einführung in ein verteiltes Speichersystem ergänzt werden.)

Verteiltes Server-Management-System

Strukturdiagramm:

Mit dem kontinuierlichen Anstieg des Website-Traffics bieten die meisten Netzwerkdienste ihre Dienste nach außen in Form von Clustern mit Lastverteilung an. Mit zunehmender Clustergröße kann das ursprüngliche, auf Einzelrechnern basierende Serververwaltungsmodell unseren Anforderungen nicht mehr gerecht werden. Die neuen Anforderungen müssen es ermöglichen, Server zentralisiert, gruppiert, stapelweise und automatisiert zu verwalten und geplante Aufgaben stapelweise auszuführen.

Unter der Software für verteilte Serververwaltungssysteme gibt es einige hervorragende Programme, und eines der idealeren Programme ist Cfengine. Es kann Server gruppieren, und verschiedene Gruppen können Systemkonfigurationsdateien, geplante Aufgaben und andere Konfigurationen getrennt anpassen. Es basiert auf einer C/S-Struktur. Alle Serverkonfigurationen und Verwaltungsskriptprogramme werden auf dem Cfengine-Server gespeichert, während verwaltete Server das Cfengine-Client-Programm ausführen. Der Cfengine-Client sendet in regelmäßigen Abständen Anfragen über SSL-verschlüsselte Verbindungen an die Serverseite, um die neuesten Konfigurationsdateien, Verwaltungsbefehle, Skriptprogramme, Patch-Installationen und andere Aufgaben abzurufen.

Mit einem zentralisierten Server-Management-Tool wie Cfengine können wir effizient eine groß angelegte Server-Cluster-Verwaltung implementieren. Verwaltete Server und der Cfengine Server können überall verteilt sein, und solange das Netzwerk verbunden ist, kann eine schnelle automatisierte Verwaltung erreicht werden.

Code-Release-System

Strukturdiagramm:

Mit dem kontinuierlichen Anstieg des Website-Verkehrs erbringen die meisten Netzwerkdienste externe Dienste in Form von lastverteilten Clustern. Mit der Erweiterung des Cluster-Umfangs benötigen wir außerdem ein Programmcode-Release-System, um die Batch-Verteilung und Aktualisierung von Programmcode in einer Cluster-Umgebung zu bewältigen.

Dieses Release-System kann uns helfen, die folgenden Ziele zu erreichen:

1) Server in der Produktionsumgebung erbringen Dienste in Form von virtuellen Hosts, ohne dass Entwickler in Wartung und direkte Operationen eingebunden werden müssen. Das Release-System ermöglicht die Verteilung von Programmen auf Zielserver, ohne sich bei den Servern anzumelden.

2) Wir müssen die Verwaltung von vier Entwicklungsphasen implementieren: interne Entwicklung, interne Tests, Tests in der Produktionsumgebung und Release in der Produktionsumgebung. Das Release-System kann in jeder Phase am Code-Release beteiligt sein.

3) Wir müssen Quellcodeverwaltung und Versionskontrolle implementieren. SVN kann diese Anforderung erfüllen.

Hier können gängige Tools wie Rsync verwendet werden, und durch die Entwicklung entsprechender Skript-Tools kann eine synchronisierte Codeverteilung zwischen Server-Clustern erreicht werden.

Quelle: http://blog.csdn.net/dinglang_2009/article/details/6863697