1. Entwicklung der großen Website-Architektur
Hohe Parallelität, großer Datenverkehr, große Datenmengen; Umgebung; schnelle Änderungen der Anforderungen; fortschreitende Entwicklung
B. Anfangsstadium: ein Server, LNMP 2 Dienste: Anwendungsserver (CPU); Datenbankserver (schneller Festplattenabruf und Datencache); begrenzt durch Anwendungsserverspeicher, begrenztes Datenvolumen) , Remote-verteilter Cache (verwenden Sie einen Cluster, um einen Server mit großem Speicher als dedizierten Cache-Server bereitzustellen)4 Anwendungsserver-Cluster: geplant durch Lastausgleich
5 Schreibtrennung 6. Verwenden Sie Reverse-Proxy und CDN-Beschleunigung: CDN (bereitgestellt im nächsten Netzwerkcomputerraum), Reverse-Proxy (bereitgestellt im zentralen Computerraum) 7. Verwenden Sie verteilte Dateisysteme und verteilte Datenbanksysteme 8. Nutzen Sie NoSQL und Suchmaschinen 10. Verteilte DiensteC. Der Kernwert der groß angelegten Website-Architektur ist um flexibel auf die Bedürfnisse der Website zu reagieren
2. Die Hauptantriebskraft für die Entwicklung groß angelegter Website-Technologien ist die Missverständnisse im Website-Architekturdesign
1 Unternehmen 2. Technologie um der Technologie willen MusterJedes Muster stellt ein wiederkehrendes Problem und den Kern der Lösung des Problems dar. Auf diese Weise können Sie die Lösung immer wieder verwenden, ohne doppelte Arbeit leisten zu müssen. Der Schlüssel zu einem Muster ist die Wiederholbarkeit des Musters.
A. Website-Architekturmuster
1. Schichtung: Es ist das häufigste Architekturmuster in Unternehmensanwendungssystemen, das das System in mehrere Teile in der horizontalen Dimension unterteilt, und jeder Teil ist für einige verantwortlich relativ einzelne Verantwortlichkeiten und bilden dann durch die Abhängigkeiten und Aufrufe der oberen Schicht zur unteren Schicht ein vollständiges System.
Unterteilen Sie das Website-Softwaresystem in Anwendungsschicht (Ansichtsschicht, Geschäftslogikschicht), Serviceschicht (Datenschnittstellenschicht, Logikverarbeitungsschicht) und Datenschicht.
kann eine große Software besser integrieren. Das System ist In verschiedene Teile unterteilt, um die Arbeitsteilung, die kooperative Entwicklung und die Wartung zu erleichtern. Solange die aufrufende Schnittstelle unverändert bleibt, kann jede Schicht die Entwicklung unabhängig von bestimmten Problemen vertiefen, ohne dass andere erforderlich sind Ebenen, um entsprechende Anpassungen vorzunehmen.
2. Teilen
Vertikal schneiden. Trennen Sie verschiedene Funktionen und Dienste und packen Sie sie in modulare Einheiten mit hoher Kohäsion und geringer Kopplung. Die Granularität der Segmentierung kann bei großen Websites sehr gering sein.
3. Verteilt
bedeutet, dass verschiedene Module auf verschiedenen Servern bereitgestellt werden und über Remote-Aufrufe zusammenarbeiten. Dies bedeutet, dass mehr Computer verwendet werden können, um dieselbe Funktion auszuführen.
Probleme: Das Netzwerk kann einen schwerwiegenden Einfluss auf die Leistung haben; die Wahrscheinlichkeit, dass mehrere Server ausfallen, ist außerdem sehr schwierig, die Datenkonsistenz in einer verteilten Umgebung aufrechtzuerhalten, was die Verarbeitung und Wartung der Website erschwert setzt auf komplexe Entwicklung; verteilte Anwendungen und Dienste; verteilte Daten und Speicher; verteilte Dateien;
Der Einsatz asynchroner Methoden zur Geschäftsabwicklung kann sich auf die Benutzererfahrung und Geschäftsprozesse auswirken und erfordert Unterstützung beim Produktdesign.
7. Redundanz
Wenn Sie sicherstellen möchten, dass die Website weiterhin ohne Datenverlust bereitgestellt werden kann, wenn der Server ausfällt, benötigen Sie ein gewisses Maß an Serverredundanz und Datenredundanzsicherung.
Kleine Websites benötigen außerdem mindestens zwei Server, um einen Cluster aufzubauen. Zusätzlich zur regelmäßigen Sicherung und Speicherung, um eine Kaltsicherung zu erreichen, muss die Datenbank auch eine Master-Slave-Freigabe, eine Echtzeitsynchronisierung und eine Hot-Sicherung durchführen.
Große Unternehmen können das gesamte Rechenzentrum sichern und es mit lokalen Disaster Recovery Centern synchronisieren.
8. Automatisierung
konzentriert sich hauptsächlich auf den Release-Betrieb und die Wartung.
Automatisierung des Release-Prozesses: automatisierte Codeverwaltung, automatisierte Tests, automatisierte Sicherheitserkennung, automatisierte Bereitstellung.
Automatisierte Überwachung: automatisierte Alarme, automatisiertes Failover, automatisierte Fehlerwiederherstellung, automatisierte Verschlechterung und automatisierte Ressourcenzuweisung.
9. Sicherheit
B. Anwendung von Architekturmustern in Sina Weibo
3. Kernarchitekturelemente großer Websites
Architektur: die höchste Planungsebene, eine Entscheidung, die schwer zu ändern ist .
Softwarearchitektur: Eine abstrakte Beschreibung der Gesamtstruktur und der Komponenten von Software, die als Leitfaden für den Entwurf aller Aspekte großer Softwaresysteme dient.
A. Leistung
Browserseite: Browser-Cache, Seitenkomprimierung, angemessenes Layout, Reduzierung der Cookie-Übertragung, CDN usw.
Anwendungsserverseite: lokaler Server-Cache, verteilter Cache, asynchroner Betrieb mit Nachrichtenwarteschlangen, Clustern usw.
Code: Multithreading, verbesserte Speicherverwaltung usw.
Datenbank: Indizierung, Caching, SQL-Optimierung, NoSQL-Technologie
B. Verfügbarkeit
Das wichtigste Mittel zum Betreiben von Umgebungen wie Servern, Datenbanken und Dateispeichern ist Redundanz.
Durch Vorabverifizierung, automatisierte Tests, automatisierte Freigabe, Graustufenfreigabe und andere Mittel
C. Skalierbarkeit bezieht sich auf das kontinuierliche Hinzufügen von Servern zum Cluster. Mittel zur Linderung der zunehmende Druck des gleichzeitigen Benutzerzugriffs und die wachsende Nachfrage nach Datenspeicherung. Ob das Hinzufügen eines neuen Servers dieselben Dienste wie der ursprüngliche Server bereitstellen kann.
Anwendungsserver: Server können durch geeignete Lastausgleichsgeräte kontinuierlich zum Cluster hinzugefügt werden.
Cache-Server: Das Hinzufügen neuer Server kann dazu führen, dass die Cache-Route ungültig wird. Es ist ein Routing-Algorithmus erforderlich.
Relationale Datenbank: durch Routing-Partitionierung und andere Mittel.
D. Messkriterien: Wenn die Website Geschäftsprodukte hinzufügt, ob sie transparent sein kann und keine Auswirkungen auf bestehende Produkte hat;
bedeutet: Ereignisgesteuerte Architektur (Nachrichtenwarteschlange), verteilte Dienste (gemeinsame Nutzung von Geschäften und verfügbaren Diensten, Aufruf über verteiltes Dienst-Framework)
E. Sicherheit
4. Sofortige Reaktion: Hohe Leistung der Website Leistungsarchitektur
1. Website-Leistung aus verschiedenen Perspektiven
aus Benutzerperspektive: Seiten-HTML-Stil optimieren, browserseitige Parallelität und asynchrone Funktionen nutzen, Browser-Caching-Strategien anpassen, und verwenden Sie CDN-Dienste, reflektierende Proxys usw.
Website-Leistung aus der Sicht eines Entwicklers: Verwendung von Cache zur Beschleunigung des Datenlesens, Verwendung von Clustern zur Verbesserung des Durchsatzes, Verwendung asynchroner Nachrichten zur Beschleunigung von Anforderungsantworten und Erzielung von Peak-Shedding sowie Verwendung von Codeoptimierungsmethoden zur Verbesserung der Programmleistung.
Website-Leistung aus Sicht des Betriebs- und Wartungspersonals: Aufbau und Optimierung von Backbone-Netzwerken, Verwendung kostengünstiger maßgeschneiderter Server, Einsatz von Virtualisierungstechnologie zur Optimierung der Ressourcennutzung usw.
2. Leistungstestindikatoren
Durchsatz: Die Anzahl der vom System pro Zeiteinheit verarbeiteten Anfragen (TPS, HPS, QPS usw.)
Leistungsindikatoren: Einige Daten-Joysticks, die die Leistung des Servers oder Betriebssystems beschreiben. Eine umgeschriebene Version dieses Satzes lautet: Dies umfasst die Systemlast, die Anzahl der Objekte und Threads, die Speichernutzung, die CPU-Auslastung sowie Festplatten- und Netzwerk-E/A.
3. Leistungstestmethoden: Leistungstests, Lasttests, Stresstests, Stabilitätstests
Leistungstests werden durchgeführt, um das System kontinuierlich zu belasten, um Systemleistungsindikatoren, maximale Belastbarkeit und maximale Drucktoleranz zu erhalten. Die sogenannte Erhöhung des Zugriffsdrucks bedeutet, die Anzahl gleichzeitiger Anfragen für das Testprogramm kontinuierlich zu erhöhen.
5. Strategie zur Leistungsoptimierung
Leistungsanalyse: Überprüfen Sie die Protokolle jedes Links zur Anforderungsverarbeitung, analysieren Sie, welcher Link eine unangemessene Antwortzeit hat und übertreffen Sie dann die Überwachungsdaten.
B. Optimierung der Web-Frontend-Leistung
1. Browser-Zugriffsoptimierung: HTTP-Anfragen reduzieren (CSS/JS/Bilder zusammenführen), Browser-Cache verwenden (Cache-Control und Expires im HTTP-Header), aktivieren Komprimierung (Gzip), CSS wird oben auf der Seite platziert, JS wird unten auf der Seite platziert, wodurch die CND-Beschleunigung reduziert wird
3. Beschleunigen Sie Webanfragen durch die Konfiguration der Cache-Funktion. (Es kann auch echte Server schützen und Lastausgleichsfunktionen implementieren)
C. Leistungsoptimierung des Anwendungsservers1. Verteilter Cache
3. Verteilte Cache-Architektur: verteilte Caches, die synchron aktualisiert werden müssen (JBoss-Cache), verteilte Caches, die nicht miteinander kommunizieren (Memcached)
4 die Website-Stabilität und -Leistung), hat einen guten Peak-Shaving-Effekt und speichert Transaktionsnachrichten, die durch hohe Parallelität generiert werden, in kurzer Zeit in der Nachrichtenwarteschlange. 5. Verwenden Sie Cluster Anzahl der CPU-Kerne. Achten Sie auf die Thread-Sicherheit: Entwerfen Sie Objekte als zustandslose Objekte und verwenden Sie Sperren, wenn Sie gleichzeitig auf Ressourcen zugreifen
Datenstruktur; Garbage Collection
D. Die Datenbank verwendet hauptsächlich einen zweistufigen Index B+, und die Baumebene umfasst bis zu drei Ebenen. Es können fünf Festplattenzugriffe erforderlich sein, um einen Datensatz zu aktualisieren.
3. RAID (Redundant Array of Inexpensive Disks), RAID0, RAID1, RAID10, RAID5, RAID6, werden häufig in herkömmlichen relationalen Datenbanken und Dateisystemen verwendet.
B. Hochverfügbare Website-Architektur
Das wichtigste Mittel ist redundantes Backup und Failover von Daten und Diensten. Die Anwendungsschicht und die Serviceschicht nutzen den Cluster-Lastausgleich, um eine hohe Verfügbarkeit zu erreichen, und die Datenschicht nutzt die datensynchrone Replikation, um eine redundante Sicherung zu erreichen.C. Hochverfügbare Anwendungen
1. Failover von zustandslosen Diensten durch Lastausgleich: Auch wenn der Anwendungszugriff sehr gering ist, stellen Sie mindestens zwei Server bereit, um einen kleinen Cluster mit Lastausgleich aufzubauen. 2. Sitzungsverwaltung des Anwendungsserver-Clusters hat Auswirkungen auf die Hochverfügbarkeit.Verwenden Sie Cookies zum Aufzeichnen von Sitzungen: Größenbeschränkung, jede Anforderungsantwort muss übertragen werden. Wenn Sie Cookies deaktivieren, können Sie nicht auf
Sitzungsserver zugreifen: Verwenden Sie verteilten Cache, Datenbank, usw., hohe Verfügbarkeit, hohe Skalierbarkeit und hohe Leistung. Gut
D. Hierarchische Verwaltung: Server sind hierarchisch in Betrieb und Wartung Auch die Reaktionsgeschwindigkeit bei Betrieb und Wartung ist extrem schnell.
2. Zeitüberschreitungseinstellung: Legen Sie die Zeitüberschreitung für Dienstaufrufe in der Anwendung fest. Sobald die Zeitüberschreitung abläuft, löst das Kommunikationsframework eine Ausnahme aus. Basierend auf der Dienstplanungsrichtlinie kann die Anwendung die Anforderung erneut versuchen oder an andere Server übertragen bieten den gleichen Service.
Die Anwendung schließt den Aufruf des Dienstes über asynchrone Methoden wie Nachrichtenwarteschlangen ab, um zu vermeiden, dass die gesamte Anwendungsanforderung fehlschlägt, wenn ein Dienst ausfällt.
4. Dienstverschlechterung: Denial of Service, Ablehnen von Anrufen von Anwendungen mit niedriger Priorität oder zufälliges Ablehnen einiger Anforderungsaufrufe, Herunterfahren einiger unwichtiger Dienste oder Herunterfahren einiger unwichtiger Funktionen innerhalb des Dienstes.
5. Idempotentes Design: In der Serviceschicht wird garantiert, dass wiederholte Aufrufe des Dienstes zu denselben Ergebnissen führen wie einmal aufgerufene, d. h. der Dienst ist idempotent.
E. Hochverfügbare Daten
1.CAP-Prinzip
Hochverfügbare Daten: Datenpersistenz (permanente Speicherung, Sicherungskopien gehen nicht verloren), Datenzugänglichkeit (schneller Wechsel zwischen verschiedenen Geräten), Datenkonsistenz (Bei mehreren Kopien ist die Konsistenz der Kopierdaten garantiert)
CAP-Prinzip: Ein Speichersystem, das Datendienste bereitstellt, kann Datenkonsistenz (Konsistenz), Datenverfügbarkeit (Verfügbarkeit) und Partitionstoleranz nicht erfüllen gleichzeitig (Partitionstoleranz, das System ist über Netzwerkpartitionen skalierbar).
Normalerweise erhöhen große Websites die Verfügbarkeit (A) und Skalierbarkeit (P) des verteilten Systems und opfern dabei bis zu einem gewissen Grad die Konsistenz (C). Im Allgemeinen treten Dateninkonsistenzen auf, wenn das System viele gleichzeitige Schreibvorgänge aufweist oder der Clusterstatus instabil ist. Das Anwendungssystem muss die Dateninkonsistenz des verteilten Datenverarbeitungssystems verstehen und bis zu einem gewissen Grad eine Kompensation und Fehlerkorrektur vornehmen falsche Anwendungssystemdaten.
Datenkonsistenz kann unterteilt werden in: starke Datenkonsistenz (alle Vorgänge sind konsistent), Datenbenutzerkonsistenz (Kopien können inkonsistent sein, aber wenn Benutzer darauf zugreifen, werden korrekte Daten durch Fehlerkorrekturüberprüfung ermittelt und an den Benutzer zurückgegeben). , die Daten sind letztendlich konsistent (Kopien und Benutzerzugriff können inkonsistent sein, aber das System erreicht die Konsistenz nach einer Zeit der Selbstwiederherstellung und -korrektur)
2. Datensicherung
Asynchrone Hot-Sicherung: mehrere Kopien von data Der Schreibvorgang wird asynchron abgeschlossen. Wenn die Anwendung eine erfolgreiche Antwort vom Datendienstsystem für den Schreibvorgang erhält, wird nur eine Kopie erfolgreich geschrieben und das Speichersystem schreibt andere Kopien asynchron (was fehlschlagen kann)
Synchronous Hot Standby: Multiple Der Schreibvorgang der Datenkopien wird synchron abgeschlossen. Das heißt, wenn die Anwendung die Schreiberfolgsantwort vom Datendienstsystem empfängt, war der Schreibvorgang mehrerer Datenkopien erfolgreich.
3. Fehlerübertragung: Heartbeat-Erkennung, Anwendungszugriffsfehler: Nachdem bestätigt wurde, dass ein Server ausgefallen ist, leiten Sie den Lese- und Schreibzugriff auf andere Server um
F. Software-Qualitätssicherung für Websites mit hoher Verfügbarkeit
führt eine Vorabverifizierung auf dem Vorabversionsserver durch. Wir werden es zunächst auf dem Vorabversionscomputer zur Verwendung durch Entwicklungsingenieure und Testingenieure freigeben. Es benötigt die gleiche Konfiguration, Umgebung, dasselbe Rechenzentrum usw. wie die Produktionsumgebung
G. Überwachung des Website-Betriebs
Sammeln Sie Benutzerverhaltensprotokolle, einschließlich Betriebssystem- und Browserversion, IP-Adresse, Seitenzugriffspfad, Seitenverweildauer und andere Informationen. Einschließlich serverseitiger Protokollerfassung und clientseitiger Browser-Protokollerfassung.
Erfassung der Serverleistung: wie Systemlast, Speichernutzung, Festplatten-IO, Netzwerk-IO usw., Tools Ganglia usw.
Ausführen von Datenberichten: wie Puffertrefferrate, durchschnittliche Antwortverzögerungszeit , Anzahl der pro Minute versendeten E-Mails, die Gesamtzahl der zu bearbeitenden Aufgaben usw. 2. Überwachung und Verwaltung FehlerübertragungAutomatisches, ordnungsgemäßes Downgrade: Beurteilen Sie die Anwendungslast anhand von Überwachungsparametern, deinstallieren Sie Anwendungsserver mit geringer Auslastung entsprechend und installieren Sie Anwendungen mit hoher Auslastung neu, um die gesamte Anwendungslast auszugleichen.
6. Unendlich: Die Skalierbarkeitsarchitektur der Website
A. Skalierbarkeitsdesign der Website-Architektur
1. Physische Trennung verschiedener Funktionen zur Erzielung von Skalierbarkeit: vertikale Trennung (Trennung nach Schichtung), Trennung und Bereitstellung verschiedener Teile des Geschäftsverarbeitungsprozesses zur Erzielung horizontaler Trennung nach der Geschäftssegmentierung), trennen und implementieren Sie verschiedene Geschäftsmodule, um die Skalierbarkeit des Systems zu erreichen.
2. Eine einzelne Funktion kann durch Cluster-Skalierung skaliert werden.
2. Lastausgleich:
HTTP-Umleitungslastausgleich: Berechnen Sie eine echte Webserveradresse basierend auf der HTTP-Anfrage des Benutzers, schreiben Sie die Serveradresse in die HTTP-Umleitungsantwort und geben Sie sie an den Browser des Benutzers zurück. Diese Lösung hat ihre Vorteile, die Nachteile bestehen jedoch darin, dass zwei Anfragen erforderlich sind, die Verarbeitungsleistung des Weiterleitungsservers selbst möglicherweise begrenzt ist und die 302-Weiterleitung möglicherweise auch Auswirkungen auf die Suchmaschinenoptimierung hat.
C. Verteiltes Skalierbarkeitsdesign des Cache-Clusters
Geben Sie das Routing-Algorithmus-Modul über KEY ein, und der Routing-Algorithmus berechnet einen Memcached-Server zum Lesen und Schreiben. 2. Skalierbarkeitsherausforderungen des verteilten Memcached-Cache-Clusters
Ein einfacher Routing-Algorithmus besteht darin, die Rest-Hash-Methode zu verwenden: Teilen Sie den Hash-Wert der Cache-Daten KEY durch die Anzahl der Server und ermitteln Sie die Servernummer, die dem Rest entspricht. Lässt sich nicht gut skalieren.
3. Der
konsistente Hash-Algorithmus des verteilten CachesErstellen Sie zunächst einen ganzzahligen Ring mit einer Länge von 2 hoch 32 (konsistenter Hash-Ring) und platzieren Sie den Cache-Serverknoten entsprechend dem Hash-Wert in diesem Hash des Knotennamens. Berechnen Sie dann den Hash-Wert basierend auf dem KEY-Wert der Daten, die zwischengespeichert werden müssen, und suchen Sie dann im Uhrzeigersinn im Hash-Ring nach dem Cache-Serverknoten, der dem Hash-Wert des KEY am nächsten liegt, um die Hash-Zuordnungssuche von KEY zu abzuschließen Server.
D. Skalierbarkeitsdesign eines Datenspeicher-Serverclusters
1. Skalierbarkeitsdesign eines relationalen Datenbankclusters
Datenreplikation (Master-Slave), Tabellen- und Datenbankpartitionierung, Daten-Sharding (Cobar) 2.NoSQL-Datenbankskalierbarkeit design
NoSQL verzichtet auf das normalisierte Datenmodell basierend auf relationaler Algebra und Structured Query Language (SQL) und garantiert keine Transaktionskonsistenz (ACID). Verbesserte Hochverfügbarkeit und Skalierbarkeit. (Apache HBase)
Das obige ist der detaillierte Inhalt vonWas sind die Grundprinzipien der technischen Architektur großer MySQL-Websites?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!