Heim > Artikel > Web-Frontend > Wie erstellt man eine hochskalierbare Website?
Dieser Artikel fasst den folgenden Inhalt zusammen, indem er „50 Prinzipien hoch skalierbarer Websites“ liest.
Einerseits verfügt der Blogger über keine tatsächliche Architekturerfahrung, andererseits ist sein Wissen nicht umfassend genug, sodass er die wichtigsten Punkte des Buches nur systematisch zusammenfassen und daraus einige Schlussfolgerungen ziehen kann sein eigenes Verständnis.
Hauptinhalt
Dieses Buch stellt 50 Vorschläge rund um die hohe Skalierbarkeit unter verschiedenen Gesichtspunkten vor. Eine hoch skalierbare Website lässt sich problemlos mit der Entwicklung des Geschäfts und der Zunahme der Benutzerarchitektur erweitern die schnelle Entwicklung der Website. Werfen wir einen Blick auf den spezifischen Inhalt dieses Buches:
Gleichungen vereinfachen
1 Überdesign nicht
Übermäßiges Design ist gleichbedeutend mit Geben Das System erhöht die Komplexität und die Wartungskosten. Allerdings haben diese übertriebenen Designs im normalen Gebrauch kaum Wirkung. Dabei handelt es sich oft um eine Funktion, die der Designer für wichtig hält oder die nur das Tüpfelchen auf dem i ist, die aber von geringem tatsächlichen Nutzen ist.
2 Berücksichtigen Sie beim Entwurf die Skalierbarkeit
Beim Entwurf sollten die folgenden Entwurfsprinzipien befolgt werden: Berücksichtigen Sie beim Entwurf die 20-fache Kapazität, bei der Implementierung die 3-fache Kapazität und bei der Bereitstellung der Kapazität 1,5. Schwierigkeiten durch vorübergehende Erweiterung, wenn das Projekt erweitert wird.
3 Vereinfachen Sie den Plan
Sie sollten dem Pareto-Prinzip folgen: 20 % des Entwurfs erledigen 80 % der Arbeit, daher sollten 80 % der Zeit für diese 20 % aufgewendet werden Design.
Die Hauptfunktionen eines Produkts konzentrieren sich tatsächlich auf wenige Punkte. Sobald diese Punkte entworfen sind, sind die restlichen nur zusätzliche Funktionen. Daher muss dieses Kerngeschäft einfach und benutzerfreundlich sein.
4 DNS-Abfragen reduzieren
Jede Datei in einer anderen Domäne muss beim Laden eine DNS-Abfrage durchführen. Beispielsweise gehören cnblogs.com und i.cnblogs.com zu unterschiedlichen Domänen. Wenn Sie dann DNS abfragen, wird es zweimal abgefragt. Wenn das Geschäftsvolumen groß ist, wird es gewisse Auswirkungen haben.
5 Reduzieren Sie Objekte so weit wie möglich
Da Objekte geladen werden müssen, wenn der Browser auf sie zugreift. Daher können Sie erwägen, die Anzahl der angeforderten Dateien zu reduzieren (die Anzahl hängt von der Anzahl gleichzeitiger Browser-Ladevorgänge ab) und einige Objekte so weit wie möglich zusammenzuführen. Beispielsweise können Symboldateien zu einem großen Bild zusammengeführt werden. Eine angemessene Anzahl an Dateien beschleunigt den Browserzugriff und das Laden.
6 Verwenden Sie Netzwerkgeräte derselben Marke
Denn eine HTTP-Anfrage kann viele physische Geräte durchlaufen. Wie Load Balancer, Switches, Router. Versuchen Sie daher, Geräte derselben Marke zu verwenden, um unerwartete Situationen zu vermeiden.
Arbeit verteilen
7 Beispielsweise wird Ihre Anwendung auf mehreren Servern bereitgestellt. Zu den häufigsten gehören Clustering, Lastausgleich usw. sowie die Trennung von Lese- und Schreibvorgängen in der Datenbank.
8 Y-Achsen, Aufteilung verschiedener Dinge
In großen Systemen Aufteilung verschiedener Funktionen, wie Registrierung, Kauf, Abfrage, Cloud-Disk. Warten Sie
9 Z-Achse, teilen Sie verschiedene ähnliche Dinge auf
Teilen Sie beispielsweise nach der Ebene des Benutzers oder dem geografischen Standort des Benutzers usw. auf.
Horizontales Erweiterungsdesign
10 Entwerfen Sie einen horizontalen Erweiterungsplan
Die Erweiterung umfasst horizontale und vertikale Erweiterung. Horizontal kopieren und klonen wir Anwendungen und nutzen Minicomputer-Cluster zur Erweiterung. Der vertikale Aspekt besteht darin, die Serverhardware und die Netzwerkeinrichtungen zu verbessern.
In vielen Fällen lässt sich feststellen, dass eine vertikale Erweiterung durch einfaches Aufrüsten der Hardware nur einen kleinen Teil des praktischen Drucks lösen kann. Durch horizontale Clustererweiterung kann jedoch eine freie Skalierung erreicht werden.
11 Verwenden Sie ein wirtschaftliches System
Ähnlich wie bei den oben genannten Grundsätzen ist die Verwendung eines hochpreisigen Servers keine Garantie für eine gute Leistung in der Zukunft. Es sollten gewöhnliche Minicomputer-Cluster-Erweiterungen verwendet werden.
12 Scale-out-Rechenzentrum
Es gibt viele Designlösungen für Rechenzentren, wie z. B.
Konfiguration heißer und kalter Stationen: Verwenden Sie heiße Stationen, um Dienste bereitzustellen. Wenn die heiße Station zusammenbricht, verwenden Sie kalte Stationen, um Dienste fortzusetzen.
Für geringere Kosten und dynamische Anrufe wird empfohlen, mehrere Echtzeit-Sites zu verwenden. Der Nachteil besteht darin, dass die Bedienung und Wartung erschwert wird.
13 Design mit Cloud-Technologie
Der Vorteil von Cloud Computing ist die Virtualisierung, mit der Geräte bei Geschäftsspitzen flexibel erweitert werden können. Und für die tägliche Bearbeitung geben Sie die Erweiterung zurück.
Der Nachteil besteht darin, dass dadurch die auf die virtuelle Umgebung angewendete Kopplung erhöht wird. Später wird erwähnt, dass die Verwendung physischer Geräte zur Isolierung von Diensten bestimmte Störungen bei der Behebung von Geschäftsisolationsfehlern beim virtualisierten Cloud Computing verursachen kann.
Verwenden Sie die richtigen Tools
14 Verwenden Sie Datenbanken angemessen
Es gibt viele Datenbankversionen, wie z. B. die traditionellen relationalen Datenbanken Oracle und MySQl sowie neuere nicht-relationale Datenbanken NoSql Datenbanken wie MongoDB, In-Memory-Datenbank FastDB und Aerospike speziell für SSD-Solid-State-Laufwerke usw.
Doch bei der Auswahl kommt es immer noch auf die persönlichen geschäftlichen Bedürfnisse an. Es hängt davon ab, ob Ihre Datenbank Geschwindigkeit, Sicherheit usw. erfordert.
15 Firewalls, Firewalls gibt es überall
Firewalls können einige ungültige Zugriffe abfangen und filtern. Normalerweise werden einige CSS, statische Dateien, Bilder, JS usw. nicht in der Firewall verwendet, sondern verwendet, wenn es bei kritischen Geschäften um persönliche Informationen geht. Auch richtig gestaltete Firewalls haben einen gewissen Einfluss auf die Website-Performance.
16 Logdateien aktiv nutzen
Nutzen Sie verschiedene Protokolle und Tools, um das Geschäft in Echtzeit zu überwachen. Überwachen Sie nicht nur den Speicher und die CPU des Servers, sondern auch die Geschäftsdaten. Zum Beispiel Splunk (bietet Protokollsammlung, Speicherung, Suche und grafische Anzeige).
Machen Sie keine sich wiederholenden Arbeiten
17 Überprüfen Sie die Arbeit, die Sie gerade erledigt haben, nicht sofort.
Wenn Sie beispielsweise gerade Daten geschrieben haben, lesen Sie sie nicht sofort . Allerdings müssen einige Kunden sicherstellen, dass die Daten vollständig sind und nicht verloren gehen können. Es kann jedoch über Protokolle usw. aufgezeichnet werden, und diese Methode der Überprüfung nach dem Schreiben wird nicht empfohlen.
18 Umleitung stoppen
Die Umleitung verbraucht eine gewisse Verzögerung und Rechenressourcen. Dies sollte so weit wie möglich vermieden werden
19 Lockerung zeitlicher Einschränkungen
Die meisten relationalen Datenbanken achten auf ACID-Eigenschaften, die beim Erweitern bestimmte Probleme verursachen. Daher kann eine entsprechende Lockerung der zeitlichen Beschränkungen für bestimmte Unternehmen die Website-Leistung verbessern.
Wenn der Benutzer beispielsweise ein Hotel auf einer bestimmten Website bucht, wartet er nach der Reservierung auf die Bewertung des Hotels. Wenn Sie beispielsweise Geld auf ein bestimmtes Konto abheben, wird der Zeitraum bestätigt. Dadurch sollen die zeitlichen Beschränkungen ausgeweitet und dadurch die Leistung der Website und die Transaktionssicherheit verbessert werden.
Caching aktiv nutzen
20 CDN nutzen
Sie können CDN verwenden, um Kundendaten und Inhalte zu speichern. Der allgemeine Prozess besteht darin, dass ein Benutzer, wenn er auf eine Website zugreift, zum CDN-Server geht und der CDN eine DNS-Abfrage durchführt und Benutzeranfragen verschiedenen Servern zuweist. Es gibt viele CDN-Dienstanbieter, die diesen Dienst anbieten.
21 Ablaufheader verwenden
Verwenden Sie Ablaufheader für verschiedene Objekttypen, um Objektanforderungen zu reduzieren. Übliche HTTP-entsprechende Attribute sind: öffentliches No-Cahe-Max-Alter usw.
22 Ajax-Aufrufe zwischenspeichern
Ändern Sie den HTTP-Header „Last-Modified Cache-Control Expires“ und andere Attribute korrekt.
23 Seiten-Caching verwenden
Cache-Antworten auf frühere Winteranfragen, um die Belastung des Webservers zu reduzieren.
24 Anwendungscache nutzen
Zwischenspeichern Sie beispielsweise die Anforderungsdaten für einige spezielle Benutzer.
25 Objekt-Caching nutzen
Geeignet für Datenobjekte, die in wiederholten Abfragen verwendet werden. Beispielsweise speichert eine Shopping-Website Daten zu heiß verkauften Produkten im Cache.
26 Platzieren Sie den Objekt-Cache auf einer eigenen Ebene
Verwenden Sie eine separate Cache-Ebene für eine einfache Erweiterung und Wartung.
Aus Fehlern lernen
27 Aktives Lernen
Nur wenn ein Unternehmen eine Atmosphäre des Lernens hat, kann es bessere Produkte produzieren. Die Lerninhalte umfassen einerseits das betriebswirtschaftliche Wissen der Kunden, andererseits stammen sie aus den Bereichen Technik sowie Betrieb und Wartung.
28 Verlassen Sie sich nicht auf die Qualitätssicherung, um Fehler zu finden
Der Hauptzweck der Einstellung von Testern oder Qualitätssicherungspersonal besteht darin, die Korrektheit des Produkts festzustellen. Dies kann die Kosten senken und die Entwicklungsgeschwindigkeit der Entwickler erhöhen, da Entwickler nicht ständig auf die Korrektheit des Codes achten müssen und ihn zum Testen der Qualitätssicherung überlassen können.
Die Qualitätssicherung ist jedoch nur für das Auffinden von Problemen verantwortlich. Wie Probleme vermieden werden können, hängt immer noch von den Entwicklern ab.
29 Ein Design ohne Rollback ist ein fehlgeschlagenes Design
Das Rollback bezieht sich hier auf das Rollback der Produktfreigabe. Wenn in bestimmten Versionen Fehler auftreten, müssen Sie möglicherweise eine zuvor lauffähige Version bereitstellen. Wenn zu diesem Zeitpunkt kein Rollback erfolgt, können Sie das Produkt nicht bereitstellen.
Hier empfehlen wir, sich über kontinuierliche Integration zu informieren.
30 Besprechen Sie Fehler und lernen Sie daraus
Sie sollten bei demselben Problem nicht zweimal scheitern.
Datenbankprinzipien
ACID-Eigenschaften relationaler Datenbanken:
Atomizität: Eine Transaktion wird entweder vollständig ausgeführt oder überhaupt nicht ausgeführt,
Konsistenz: Wenn a Transaktion beginnt und endet, der Status aller Daten muss konsistent sein
Isolation: Die Ausführung der Transaktion ist der einzige Vorgang der Transaktion in der Datenbank
Dauerhaftigkeit: Die Transaktion ist abgeschlossen und der Vorgang kann nicht geändert werden.
31 Achten Sie auf kostspielige Beziehungen
Die Struktur der Designtabelle sollte während der Designphase verbessert werden. Zu Beginn der Entwicklung kann das Hinzufügen bestimmter Spalten sehr kostspielig sein.
32 Verwenden Sie die richtige Datenbanksperre
Es gibt viele Sperrkonzepte in der Datenbank, z. B. implizite Sperre, explizite Sperre, Zeilensperre, Seitensperre, Bereichssperre, Tabellensperre, Datenbanksperre, usw. .
Die unangemessene Verwendung von Sperren beeinträchtigt den Durchsatz der Website.
33 Verwenden Sie keine mehrstufige Einreichung
Zum Beispiel eine zweistufige Einreichung: Zuerst abstimmen, dann einreichen. Dies verringert die Skalierbarkeit, da keine anderen Vorgänge ausgeführt werden können, bis die Festschreibungstransaktion abgeschlossen ist.
34 Verwenden Sie „select for update“ nicht
da die FOR UPDATE-Klausel dazu führt, dass Zeilen gesperrt werden und die Geschwindigkeit der Transaktionsverarbeitung verringert wird.
35 Wählen Sie nicht alle Daten aus
Wählen Sie beispielsweise * aus xxx aus. Der Geschäftsverarbeitungscode wird direkt zu Tode geschrieben. Beim Hinzufügen einer Datenspalte tritt ein Fehler auf; außerdem werden unnötige Daten abgefragt.
Oder in xxx-Werte einfügen (xxxx);
Wenn die Spalteninformationen nicht übereinstimmen, tritt ebenfalls ein Fehler auf.
Fehlertolerantes Design und Fehlerkontrolle
36 Verwenden Sie „Swim Lanes“, um Fehler zu isolieren
Es gibt viele Möglichkeiten, Dienste und Daten aufzuteilen, z. B. Container, Cluster, Pools und Scherben. Swimlanes bedeuten, dass jedes Unternehmen seine eigene Domain hat und nicht über Swimlanes hinweg aufgerufen werden kann.
37 Vertrauen Sie keinen einzelnen Fehlerpunkten
Es gibt viele Systeme, die im Einzelpunktmodus entwickelt wurden. Wenn das gesamte System nur dieses Modul verwendet, wird das gesamte System beschädigt Das System wird zusammenbrechen.
38 Systemkaskaden vermeiden
Ein System besteht beispielsweise aus vielen Komponenten und jede Komponente hat eine Sicherheit von 99,9 %. Wenn 3 Komponenten in Reihe geschaltet werden, beträgt die Verfügbarkeit des gesamten Systems 99,7 %.
39 Stellen Sie sicher, dass Funktionen aktiviert/deaktiviert werden können
Bei einigen gemeinsam genutzten Bibliotheken und Diensten von Drittanbietern sollte die Funktion aktiviert oder deaktiviert werden.
Vermeiden oder verteilen Sie den Status
40 Streben Sie nach Staatenlosigkeit
Die Implementierung des Status schränkt die Skalierbarkeit ein und erhöht die Kosten
41 Versuchen Sie, dies auf der Browserseite zu tun wenn möglich Sitzungen aufrechterhalten
Einerseits reduziert es den Serverdruck und andererseits kann jede Anfrage an jeden Server gesendet werden.
42 Verteilten Cache zum Speichern des Status verwenden
Verwenden Sie eine unabhängige Cache-Ebene, um die Erweiterung zu erleichtern. Es gibt viele verteilte Caching-Lösungen, wie zum Beispiel Memcached.
Asynchroner Kommunikations- und Nachrichtenbus
43 Verwenden Sie so viel wie möglich asynchrone Kommunikation
Asynchrone Kommunikation kann die Unabhängigkeit zwischen jedem Dienst und jeder Schicht sicherstellen, was es einfacher macht, die Skalierbarkeit des Systems zu erhöhen und die Kopplung zu reduzieren.
44 Stellen Sie sicher, dass der Nachrichtenbus erweitert werden kann
Versuchen Sie, die Y-Achsen- oder Z-Achsen-Erweiterung zu verwenden, dh entsprechend den Geschäftsanforderungen und -funktionen zu erweitern. Denn durch einfaches Kopieren oder Klonen erhöht sich die Anzahl der Listener für jeden Nachrichtenabonnenten. Gemäß der Geschäftsisolation kann der Geschäftsdruck getrennt werden.
45 Vermeiden Sie eine Überfüllung des Nachrichtenbusses
Wägen Sie den Wert gegen die Kosten der Nachricht ab.
Andere Grundsätze
46 Verwenden Sie Lösungserweiterungen von Drittanbietern mit Vorsicht
Wenn ein Unternehmen ein Problem hat, suchen Sie sich einen Drittanbieter kann das dringende Problem lösen. Aber es handelt sich nicht um eine langfristige Lösung, denn der Lösungsanbieter hat viele Kunden und Ihre Krise ist nicht ihre Krise, sodass es unmöglich ist, seine Aufgaben im kritischen Moment zu erfüllen. Daher sollten Unternehmen immer noch über ein gewisses Maß an Kontrolle verfügen (dieses Wort ist wirklich hoch gegriffen!).
47 Bereinigen, Archivieren und kostengünstige Speicherung
Wenn unnötige Daten vorhanden sind, sollten diese regelmäßig gelöscht werden. Einige Daten von geringem Wert werden regelmäßig archiviert und direkt gelöscht. Einige wertvolle Daten sollten gesichert und schnell abgerufen werden.
48 Business Intelligence in der Transaktionsverarbeitung löschen
Das Produktsystem sollte vom Geschäftssystem getrennt werden, um die Skalierbarkeit des Produkts zu verbessern.
Vermeiden Sie Einschränkungen durch die Systemarchitektur bei der Geschäftserweiterung.
49 Entwerfen Sie Anwendungen, die überwachen können
Sie sollten eine globale Überwachungsstrategie entwerfen, um sicherzustellen, dass die Antwort
„Ist ein Problem aufgetreten?“
„Wo Ist es passiert? „
“ Was ist passiert? „
“ Wird es automatisch behoben 🎜>
>
Die beste Architektur sollte in jeden Entwurf eingebunden werden und man kann sich nicht vollständig auf Lösungen von Drittanbietern verlassen.Eine einfache und ausgezeichnete Architektur ist klein und raffiniert. Wenn Sie sich zur Lösung der Architektur ausschließlich auf Open Source verlassen, führt dies zwar zu einer Lösung des Problems, führt jedoch zu aufgeblähten Anwendungen.