Heim >Schlagzeilen >Ausführliche Diskussion von Lösungen und Lösungen für den Zugriff mit „hoher Parallelität und großem Datenverkehr'.

Ausführliche Diskussion von Lösungen und Lösungen für den Zugriff mit „hoher Parallelität und großem Datenverkehr'.

青灯夜游
青灯夜游nach vorne
2022-05-11 14:18:184718Durchsuche

Wie kann das Problem hoher Parallelität und großem Datenverkehr gelöst werden? Der folgende Artikel wird Ihnen die Ideen und Lösungen für Web mit hoher Parallelität und großem Datenverkehr vorstellen. Ich hoffe, er wird Ihnen hilfreich sein!

Empfohlene Videokurse: „ Daten-Parallelitätslösung auf Zehn-Millionen-Ebene (Theorie + Praxis)

Teilen Sie einige Interviewfragen mit hoher Parallelität: 15 PHP-Interviewfragen zu hoher Parallelität (Zusammenfassung)

Konzepte im Zusammenhang mit der Webarchitektur mit hoher Parallelität


  • QPS: Die Anzahl der Anfragen oder Abfragen pro Sekunde. Im Internetbereich bezieht es sich auf die Anzahl der entsprechenden Anfragen pro Sekunde (http-Anfragen).

  • Spitzen-QPS pro Sekunde: (80 % der gesamten PVs)/(20 % der Sekunden in 6 Stunden), 80 % der Besuche konzentrieren sich auf 20 % der Zeit

  • Anzahl gleichzeitiger Verbindungen: verarbeitet von das System gleichzeitig Anzahl der Anfragen

  • Durchsatz: Die Anzahl der pro Zeiteinheit verarbeiteten Anfragen (normalerweise bestimmt durch QPS und Parallelität).

  • Reaktionszeit: Die Zeit, die von der Anfrage bis zur Antwort vergeht. Beispielsweise dauert es 100 ms, bis das System eine HTTP-Anfrage verarbeitet. Diese 100 ms sind die Antwortzeit des Systems.

  • PV: Seitenaufrufe sind Seitenaufrufe und Klicks, die Anzahl der Seiten, die ein Besucher innerhalb von 24 Stunden besucht.

  • UV: Eindeutiger Besucher (UniQue Visitor), d. h. derselbe Besucher besucht die Website mehrmals innerhalb eines bestimmten Zeitraums und wird nur als 1 eindeutiger Besucher gezählt.

  • Bandbreite: Die Berechnung der Bandbreitengröße konzentriert sich auf zwei Indikatoren: Spitzenverkehr und durchschnittliche Seitengröße.

  • Tägliche Website-Bandbreite = PV/statistische Zeit (umgerechnet in Sekunden an einem Tag) * durchschnittliche Seitengröße (Einheit KB) * 8.

  • Stresstest: Die maximale Parallelität, die der Test aushalten kann, die maximale QPS, die der Test aushalten kann. Es ist zu beachten, dass die gleichzeitige Testmaschine von der getesteten Maschine getrennt sein muss. Führen Sie keine gleichzeitigen Tests auf Online-Servern durch . Beobachten Sie die Maschine, auf der sich der AB-Test befindet, und die CPU, der Speicher, das Netzwerk usw. der Front-End-Maschine der getesteten Maschine haben 75 % des maximalen Grenzwerts nicht überschritten.

    • Parallelität

    • Antwortgeschwindigkeit

    • Fehlertoleranz

  • Häufig verwendete Leistungstest-Tools: ab, wrk, http_load, Web Bench, Siege, Apache JMeter.

... Belegung von Serververkehr und Serverbandbreite

Front-End-Optimierung
  • Reduzieren Sie HTTP-Anfragen: Bildzusammenführung, JS-Zusammenführung, CSS-Zusammenführung und Komprimierung. Obwohl die Datei möglicherweise größer ist, werden die Anforderungen reduziert

  • Hinzufügen asynchrone Anfragen: Daten über die eigentliche Ajax-Aufrufschnittstelle abrufen

  • Durchsuchen starten Server-Caching und Dateikomprimierung (das Nginx-Komprimierungsmodul kann ebenfalls aktiviert werden)

  • CDN-Beschleunigung: Lösen Sie das Problem unzureichender Bandbreite und speichern Sie Daten im CDN Knoten, beim Zugriff den nächstgelegenen Knoten auswählen, Bandbreite reduzieren und den Zugriff beschleunigen

  • Einrichten eines unabhängigen Bildservers: Bilder sind sehr io-freundlich. Sie können den Bildserver vollständig vom Webserver trennen Erstellen Sie einen separaten Bildserver. Die Konfiguration, die nicht zum Computertyp gehört, kann auch entsprechend angepasst werden. Serverseitige Optimierung: statisches HTML der Seite. Reduzierung des Lastdrucks des Servers, Durchdringung der Seitenstatik, Statik hat eine effektive Zeit Datenbank-Cache: Memcache, Redis-Cache

  • MySQL-Indexoptimierung, MySQL-Subdatenbank und -Tabelle, MySQL-Partitionsbetrieb, MySQL-Master-Slave-Replikation Lese-/Schreibtrennung, MySQL-Lastausgleich, MySQL-Master-Slave-Hot-Standby

  • Webserver-Optimierung:

  • Lastausgleich: Sie können den Reverse-Proxy von Ningx verwenden, um den Lastausgleich zu verwenden, Sie können die Netzwerkverteilung verwenden. Die vierte Ebene von LVS in der Schicht implementiert den Lastausgleich

  • Webserver-Lastausgleich
    • Haftungsausgleich

  • Vierter Lastausgleich: Der sogenannte vierschichtige Lastausgleich basiert auf IP+Port-Lastausgleich

  • Siebenschichtiger Lastausgleich: Der sogenannte siebenschichtige Lastausgleich Layer-Lastausgleich ist ein Lastausgleich basierend auf (URL-)Informationen -Layer-Lastausgleich. Es verfügt über leistungsstarke Funktionen, einen stabilen Betrieb und eine einfache und flexible Konfiguration. Das Hochladen von Back-End-Servern kann im asynchronen Modus erfolgen Gewichte zuweisen, und die Zuweisungsmethode ist flexibel.

  • Nginx-Lastausgleichsstrategie

  • IP-Hash (integriert)
  • Gewichtete Abfrage (integriert)
  • faire Strategie (Erweiterung)

  • Universeller Hash (Erweiterung)

  • Konsistenter Hash (Erweiterung)

  • 1. IP-Hash-Strategie

    Eine weitere in Nginx integrierte Lastausgleichsstrategie Prozess ist Dem Polling sehr ähnlich, außer dass der Algorithmus und die spezifischen Strategien einige Änderungen aufweisen. Der IP-Hash-Algorithmus ist ein getarnter Polling-Algorithmus Wenn die Maschine auf einen niedrigeren Wert als andere Maschinen fällt, wird die Anforderung an die nächste Maschine mit hoher Gewichtung weitergeleitet. Wenn alle Back-End-Maschinen ausgefallen sind, setzt Nginx die Flags aller Maschinen sofort auf den ursprünglichen Zustand zurück, um zu verhindern, dass sie alle verursachen Maschinen müssen sich in einem Timeout-Zustand befinden

    3. Faire Strategie

    Beurteilen Sie die Auslastungssituation anhand der Antwortzeit des Back-End-Servers und wählen Sie die Maschine mit der geringsten Auslastung zum Auslagern aus.

    Universeller Hash, konsistent Konsistent Hashing-Strategie, allgemeines Hashing ist relativ einfach, Sie können in Nginx integrierte Variablen als Schlüssel für das Hashing verwenden, konsistentes Hashing verwendet einen integrierten konsistenten Hashing-Ring und unterstützt Memcache

    Vierschichtige Lastausgleichsimplementierung

    durch Nachrichten Die Zieladresse und der Port in , zusammen mit der vom Lastausgleichsgerät festgelegten Serverauswahlmethode, bestimmen den endgültig ausgewählten internen Server lvs-bezogene Begriffe:

    DS: Director-Server-Zielserver, d

    RS: Echter Server, echter Server, also Back-End-Server
    • VIP: IP-Adresse, die direkt an Benutzer gerichtet ist, normalerweise eine IP-Adresse eines öffentlichen Netzwerks
    • DIP: IP-Adresse des Director-Servers, die hauptsächlich für interne Zwecke verwendet wird Host-Kommunikation
    • RIP: Echte Server-IP IP-Adresse des Backend-Realservers
    • CIP: Client-IP
    • lvs drei Methoden des Lastausgleichs:
    • NAT: Ändern Sie die Ziel-IP-Adresse in die IP-Adresse des Back-End-RealServers

      DR: Ändern Sie die Ziel-Mac-Adresse in die Mac-Adresse des Back-End-RealServers -Schicht-Lastausgleich

    Die vierte Schicht kann mehr Gewicht tragen als sieben Schichten. Das Ausmaß der Parallelität kann mit kleinen

    Sieben Schichten großer Websites eine komplexere Lastausgleichssteuerung erreichen, z. B. URL, sitzungsbasiert, dynamisch und statisch Trennung usw.

    Die siebte Schicht kann viel CPU-Zeit beanspruchen und die Menge der übertragenen Parallelität

    cdn Accelerate

    Was ist CDN?

    Knoten: Er kann als Spiegel des realen Servers verstanden werden.

    Der vollständige Name lautet Content Delivery Network. Dabei handelt es sich um ein Content-Distributionsnetzwerk, das versucht, Engpässe und Links im Internet zu vermeiden, die die Geschwindigkeit und Stabilität der Datenübertragung beeinträchtigen könnten, wodurch die Übertragung von Inhalten schneller und stabiler wird.

    Eine Schicht eines intelligenten virtuellen Netzwerks, das auf dem vorhandenen Internet basiert und durch die Platzierung von Knotenservern im gesamten Netzwerk gebildet wird.

    Das CDN-System kann die Anfrage des Benutzers in Echtzeit an den Dienstknoten weiterleiten, der dem Benutzer am nächsten liegt, basierend auf umfassenden Informationen wie Netzwerkverkehr, Verbindungen zu jedem Knoten, Lastbedingungen, Entfernung zum Benutzer und Antwortzeit. Was sind die Vorteile von CDN?

    1. Die lokale Cache-Beschleunigung verbessert die Zugriffsgeschwindigkeit von Unternehmensseiten (insbesondere Websites mit einer großen Anzahl von Bildern und statischen Seiten).

    2. Die betreiberübergreifende Netzwerkbeschleunigung stellt sicher, dass Benutzer in verschiedenen Netzwerken einen guten Empfang haben Service-Zugriffsqualität

    3. Remote-Zugriffsbenutzer wählen auf der Grundlage der DNS-Lastausgleichstechnologie automatisch einen Remote-Spiegel-Cache-Server aus und lesen Daten aus dem Cache Wenn Remote-Benutzer auf den Server zugreifen, reduzieren Sie die Bandbreite des Remote-Zugriffs, teilen Sie den Netzwerkverkehr, reduzieren Sie die Auslastung des Website-Webservers und andere Funktionen.

    • 5. Weit verteilte CDN-Knoten und intelligente Redundanzmechanismen zwischen Knoten können Hackereinbrüche wirksam verhindern

    • Was ist das Funktionsprinzip von CDN?
    • Herkömmlicher Zugriff: Der Benutzer gibt einen Domänennamen in den Browser ein, um eine Anfrage zu initiieren, löst den Domänennamen auf, um die Server-IP-Adresse zu erhalten, findet den entsprechenden Server anhand der IP-Adresse und der Server antwortet und gibt Daten zurück.
    • Verwenden Sie CDN für den Zugriff: Der Benutzer initiiert eine Anfrage, führt eine intelligente DNS-Analyse durch (bestimmt den geografischen Standort und den Zugriffsnetzwerktyp basierend auf der IP, wählt den Server mit der kürzesten Route und der geringsten Last aus), ruft die Cache-Server-IP ab und Gibt den Inhalt an den Benutzer zurück (sofern zwischengespeichert), initiiert eine Anfrage an die Ursprungsseite, greift auf die Ergebnisse für den Benutzer zu und speichert die Ergebnisse auf dem Cache-Server.

    • Welche Szenarien gelten für CDN?

    Beschleunigte Verteilung einer großen Anzahl statischer Ressourcen in einer Site oder Anwendung, wie CSS, JS, Bilder und HTML

    Wie implementiert man CDN?

    BAT und andere CDN-Dienste

    Verwenden Sie den 4-Schichten-Lastausgleich von LVS.

    Sie können Nginx, Lack, Squid und Apache TrafficServer für den 7-Schichten-Lastausgleich und Cache verwenden. Verwenden Sie Squid als Reverse-Proxy oder Nginx als Reverse-Proxy

    Einen unabhängigen Bildserver einrichten


    Ist Unabhängigkeit notwendig?

    • 1. Teilen Sie die E/A-Last des Webservers, trennen Sie den ressourcenintensiven Bilddienst und verbessern Sie die Leistung und Stabilität des Servers

    • 2 Bilddienste einrichten Gezielte Caching-Lösung, Bandbreitenkosten reduzieren und Zugriffsgeschwindigkeit verbessern

    Warum einen unabhängigen Domainnamen verwenden?

    Grund: Die Anzahl der gleichzeitigen Browserverbindungen unter demselben Domainnamen ist begrenzt, da die meisten Web-Caches nur Anfragen ohne Cookies zwischenspeichern, was dazu führt, dass keine Bildanfrage möglich ist Hit the Cache

    Ist es ein Problem nach der Unabhängigkeit?

    • So laden Sie Bilder hoch und synchronisieren sie.

    • NPS-Freigabemethode. Verwenden Sie die FTP-Synchronisierung und warum statisch sein , statische Implementierung. Was ist ein Prozess? Wird vom System für die Ressourcenzuweisung und -planung verwendet. Die Grundeinheit ist die Grundlage der Betriebssystemstruktur.

    • Ein Prozess ist ein „ausführendes Programm“.
    • Drei-Zustands-Modell des Zustands eines Prozesses , Prozesse laufen abwechselnd auf dem Prozessor ab und Zustände ändern sich weiterhin.

    Running: Wenn ein Prozess auf dem Prozessor ausgeführt wird, befindet er sich in einem laufenden Zustand. Die Anzahl der Prozesse in diesem Zustand ist kleiner oder gleich der Anzahl der Prozessoren. Bei einem Einzelprozessorsystem befindet sich nur ein Prozess im laufenden Zustand. Wenn keine anderen Prozesse ausgeführt werden können (z. B. alle Prozesse blockiert sind), wird der Leerlaufprozess des Systems normalerweise automatisch ausgeführt.


    Bereit: Wenn ein Prozess alle Ressourcen außer dem Prozessor erhalten hat und ausgeführt werden kann, sobald er den Prozessor erhält, befindet er sich in einem Bereitschaftszustand. Der Bereitschaftszustand kann nach mehreren Prioritäten in die Warteschlange gestellt werden. Wenn ein Prozess beispielsweise aufgrund des Ablaufs der Zeitscheibe in den Bereitschaftszustand wechselt, wird er in eine Warteschlange mit niedriger Priorität gestellt. Wenn ein Prozess aufgrund des Abschlusses einer E/A-Operation in den Bereitschaftszustand übergeht, wird er in eine Warteschlange mit hoher Priorität.

    Blockieren: Ein Prozess wird auch als Warte- oder Ruhezustand bezeichnet und wartet auf das Eintreten eines bestimmten Ereignisses (z. B. das Anfordern von E/A und das Warten auf den Abschluss von E/A usw.) und stoppt die Ausführung dabei vorübergehend Zeit, auch wenn der Prozessor dem Prozess zugewiesen ist. Er kann auch nicht ausgeführt werden, daher wird der Prozess als blockiert bezeichnet.


    Was ist ein Thread?

    Aufgrund gleichzeitiger Benutzeranfragen ist es im Hinblick auf den Systemressourcenaufwand oder die Effizienz bei der Beantwortung von Benutzeranfragen offensichtlich nicht möglich, für jede Anfrage einen Prozess zu erstellen. Daher wurde das Konzept der Threads im Betriebssystem eingeführt.

    Ein Thread, manchmal auch als Lightweight-Prozess bezeichnet, ist die kleinste Einheit des Programmausführungsablaufs.

    Ein Thread ist eine Einheit im Prozess und stellt die vom System unabhängig geplante und zugewiesene Grundeinheit dar. Der Thread selbst besitzt keine Systemressourcen und besitzt nur einige Ressourcen, die für den Betrieb unerlässlich sind, mit denen er jedoch geteilt werden kann andere Threads, die zum selben Prozess gehören. Alle Ressourcen, die dem Prozess gehören.

    Ein Thread kann einen anderen Thread erstellen und abbrechen, und mehrere Threads im selben Prozess können gleichzeitig ausgeführt werden.

    Ein Thread ist ein einzelner sequenzieller Kontrollfluss in einem Programm. Eine relativ unabhängige und planbare Ausführungseinheit innerhalb eines Prozesses. Sie ist die Grundeinheit für die unabhängige Planung und Zuweisung von CPUs. Sie bezieht sich auf die Planungseinheit eines laufenden Programms.

      Drei Zustände von Threads
    • Bereitschaftszustand: Der Thread verfügt über alle Bedingungen zum Ausführen, kann logisch ausgeführt werden und wartet auf den Prozessor.

    • Laufstatus: Der Thread, der den Prozessor belegt, läuft.

    Blockierungsstatus: Der Thread wartet auf ein Ereignis (z. B. ein Semaphor) und ist logisch nicht ausführbar.

    Was ist eine Coroutine? Eine Coroutine ist ein leichter Thread im Benutzermodus, und die Planung der Coroutine wird vollständig vom Benutzer gesteuert. Coroutinen haben ihren eigenen Registerkontext und Stapel. Wenn der Koordinationsplan wechselt, werden der Registerkontext und der Stapel an anderen Orten gespeichert. Beim Zurückschalten werden der zuvor gespeicherte Registerkontext und der Stapel wiederhergestellt. Der direkte Betrieb des Stapels verursacht im Grunde keinen Overhead durch Kernelwechsel, und auf globale Variablen kann zugegriffen werden Sperren, sodass der Kontextwechsel sehr schnell erfolgt.

    Was ist der Unterschied zwischen Thread und Prozess?

    1. Ein Thread ist eine Ausführungseinheit innerhalb eines Prozesses. Sie teilen sich den Adressraum des Prozesses und der Prozess verfügt über einen eigenen unabhängigen Adressraum.

    2. Prozess ist die Einheit der Ressourcenzuteilung und des Eigentums. Threads im selben Prozess teilen sich die Ressourcen des Prozesses.
    • 3. Thread ist die Grundeinheit der Prozessorplanung, aber Prozess ist nicht

    • 4 Beide können gleichzeitig ausgeführt werden

    • 5 Jeder unabhängige Thread hat einen Einstiegspunkt für die Programmausführung und wird sequentiell ausgeführt Der Ausgang der Sequenz und des Programms, aber der Thread kann nicht unabhängig ausgeführt werden und muss von der Anwendung abhängen, und die Anwendung bietet eine Steuerung für die Ausführung mehrerer Threads.

    Was ist der Unterschied zwischen Threads und Coroutinen?

    • 1 Ein Thread kann mehrere Coroutinen haben, und ein Prozess kann auch mehrere Coroutinen allein haben

    • 2. Threads und Prozesse sind alle synchrone Mechanismen, während Coroutinen asynchron sind

    • 3 Die Assoziation kann den Status des letzten Aufrufs beibehalten. Jedes Mal, wenn der Prozess erneut eintritt, entspricht dies dem Eintritt in den Status des letzten Aufrufs.

    Wenn zwei oder mehr Prozesse gleichzeitig im selben Computersystem ausgeführt werden dürfen, bedeutet dies, dass ein weiterer Prozess geöffnet und eine weitere Ressource zugewiesen wird und die Kommunikation zwischen Prozessen unbequem ist Was ist Multithreading?

    Threads unterteilen einen Prozess in viele Slices, wobei jeder Slice ein unabhängiger Prozess sein kann. Der Unterschied zu Multiprozessen besteht darin, dass nur die Ressourcen eines Prozesses verwendet werden und Threads kommunizieren können Unter mehreren Konzepten liegt der Unterschied zwischen?

    Single-Prozess-Single-Thread: eine Person isst an einem Tisch

      Single-Prozess-Multi-Thread: mehrere Personen essen an einem Tisch
    • Multi-Prozess-Single-Thread: jeweils mehrere Personen bei Eat on your Eigene Tabelle
    • Synchronisiertes Blockierungsmodell

    Multiprozess: Die frühesten serverseitigen Programme lösten das Problem der gleichzeitigen E/A durch Multiprozess und Multithread. Eine Anfrage erstellt einen Prozess und dann das Kind Der Prozess tritt ein Die Schleife interagiert synchron mit der Clientverbindung und sendet und empfängt Verarbeitungsdaten. Schritte

    Erstellen Sie einen Socket

      Betreten Sie die While-Schleife, blockieren Sie den Prozessannahmevorgang, warten Sie, bis die Clientverbindung in den Hauptprozess eintritt, und erstellen Sie einen untergeordneten Prozess über den Fork unter dem Multi- Prozessmodell.
    • Sie können Sub-Threads im Multi-Thread-Modus erstellen
    • Nachdem der Sub-Thread/Thread erfolgreich erstellt wurde, tritt er in die while-Schleife ein, blockiert den Recv-Aufruf und wartet darauf, dass der Client Daten an den Server sendet

    • Nach dem Empfang der Daten verarbeitet das Serverprogramm diese und sendet dann eine Antwort an den Client.

    Wenn die Clientverbindung geschlossen wird, wird der untergeordnete Prozess/Thread beendet und alle Ressourcen zerstört. Der Hauptprozess/Thread recycelt diesen untergeordneten Prozess/Thread.

    Dieses Modell hängt stark von der Anzahl der Prozesse ab, um Parallelitätsprobleme zu lösen.

    Das Starten einer großen Anzahl von Prozessen führt zu einem zusätzlichen Prozessplanungsverbrauch.

    Asynchrones, nicht blockierendes Modell Das Programm verwendet das klassische Reactor-Modell, was bedeutet, dass es sich nicht um das Senden und Empfangen von Daten handelt. Sie können nur Ereignisänderungen eines Socket-Handles überwachen.

    Reaktormodell:

    - add:添加一个socket到reactor
    - set:修改socket对应的事件,如可读可写
    - del:从reactor中移除
    - callback:事件发生后回掉指定的函数
    nginx: Multithread-Reaktorswoole: Multithread-Reaktor + Multiprozess-Worker

    PHP-Praxis für gleichzeitige Programmierung

    1.php-Erweiterung , parallel, Hochleistungsnetzwerk Die in reiner C-Sprache geschriebene Kommunikations-Engine bietet einen asynchronen Multithread-Server in PHP-Sprache, asynchronen TCP/UDP-Netzwerk-Client, asynchrones MySQL, asynchrones Redis, Datenbankverbindungspool, AsyncTask, Nachrichtenwarteschlange, Millisekunden-Timer, Asynchrones Lesen und Schreiben von Dateien, asynchrone DNS-Abfrage.

    2. Zusätzlich zur Unterstützung asynchroner E/A hat swoole mehrere gleichzeitige Datenstrukturen und IPC-Kommunikationsmechanismen für den PHP-Mehrprozessmodus entwickelt, die die Arbeit der gleichzeitigen Multithread-Programmierung erheblich vereinfachen können


    3.swoole2 .0 unterstützt Coroutinen ähnlich der Go-Sprache und kann vollständig synchronen Code verwenden, um asynchrone Programme zu implementieren. 4. Nachrichtenwarteschlange. 5. Anwendungsentkopplung. Beschreibung des Szenarios: Nachdem der Benutzer eine Bestellung, die Bestellung Das System muss das Inventarsystem benachrichtigen.

    • Wenn auf das Inventarsystem nicht zugegriffen werden kann, schlägt die Bestellreduzierung fehl, was zu einem Bestellfehler führt.

    • Das Bestellsystem ist vom Inventarsystem entkoppelt.

    • Referenzwarteschlange. Nachdem der Benutzer eine Bestellung aufgegeben hat Bestellung, das Bestellsystem ist abgeschlossen. Persistenzverarbeitung, Schreiben der Nachricht in die Nachrichtenwarteschlange und Rückgabe des Bestellerfolgs des Benutzers Basierend auf den Bestellinformationen Nachrichtenwarteschlange zuerst. Wenn die Länge der Nachrichtenwarteschlange den Maximalwert überschreitet, wird direkt ein Fehler gemeldet oder der Benutzer wird aufgefordert, das Anforderungsvolumen zu kontrollieren und hohen Datenverkehr zu verringern

    • 7.日志处理 应用场景:解决大量日志的传输 日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志。

    • 8.消息通讯 聊天室

    • 9.常见消息队列产品 kafka,ActiveMQ,ZeroMQ,RabbitMQ,Redis等 php的异步 消息队列

    • 10.接口的并发请求 curl_multi_init

    mysql缓存层的优化


    1.什么是数据库缓存

    mysql等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对mysql产生的增删,改,查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生。

    • 极大的解决数据库服务器的压力

    • 提高应用数据的响应速度

    常见的缓存形式:内存缓存和文件缓存

    2.为什么要使用数据库缓存

    • 缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程序地降低对数据库服务器的访问压力。

    • 用户请求-》数据查询-》连接数据库服务器并查询数据-》将数据缓存起来(html,内存,json,序列化数据)-》显示给客户端

    • 缓存方式的选择

    • 缓存场景的选择

    • 缓存数据的实时性

    • 缓存数据的稳定性

    3.使用mysql查询缓存

    • 启用mysql查询缓存

    • 极大的降低cpu使用率

    • query_cache_type查询缓存类型,有0,1,2三个取值。0则不适用查询缓存。1表示始终使用查询缓存,2表示按需使用查询缓存。

    query_cahce_type=1 select SQL_NO_CACHE * from my_table where condition; query_cache_type=2 select SQL_CACHE * from my_table where condition; query_cache_size

    默认情况下query_cache_size为0,表示为查询缓存预留的内存为0,则无法使用查询缓存 SET GLOBAL query_cache_size = 134217728; 查询缓存可以看作是SQL文本和查询结果的映射 第二次查询的SQL和第一次查询的SQL完全相同,则会使用缓 SHOW STATUS LIKE ‘Qcache_hits’查看命中次数 表的结构和数据发生改变时,查询缓存中的数据不再有效

    情理缓存:

    • FLUSH QUERY CACHE;//清理查询缓存内存碎片

    • RESET QUERY CACHE;//从查询缓存中移出所有查询

    • FLUSH TABLES;//关闭所有打开的表,同时该操作将会清空查询缓存中的内容

    4.使用Memcache缓存

    对于大型站点,如果没有中间缓存层,当流量打入数据库层时,即便有之前的几层为我们挡住一部分流量,但是在大并发的情况下,还是会有大量请求涌入数据库层,这样对于数据库服务器的压力冲击很大,响应速度也会下降,因此添加中间缓存层很有必要。

    memcache是一套分布式的高速缓存系统,由liveJournal的BrandFitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。 memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像,视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存,然后从内存中读取,从而大大提高读取速度。

    工作流程:先检查客户端的请求数据是否在memcache中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcache中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中。

    通用缓存机制:用查询的方法名+参数作为查询时的key,value对中的key值

    5.使用Redis缓存

    与memcache的区别:

    • 性能相差不大

    • redis在2.0版本后增加了自己的VM特性,突破物理内存的限制,memcache可以修改最大可用内存,采用LRU算法

    • redis依赖客户端来实现分布式读写

    • memcache本身没有数据冗余机制

    • redis支持(快照,aof)依赖快照进行持久化aof增强了可靠性的同时,对性能有所影响

    • redis用户数据量较小的高性能操作和运算上

    • memcache用于在动态系统中减少数据库负载,提升性能;适合做缓存提高性能。

    • 可用于存储其他数据:session,session_set_save_handler

    Optimierung der MySQL-Datenschicht


    • Optimierung des Datentabellen-Datentyps: int, smallint., bigint, enum, IP-Speicher verwendet IP2long-Konvertierung und -Speicherung vom Typ int

    • Je mehr Indizes, desto besser , Erstellen Sie den entsprechenden Index für das entsprechende Feld

    • Befolgen Sie das Präfixprinzip des Index

    • wie das Abfrage-%-Problem

    • Optimierung des vollständigen Tabellenscans

    • oder bedingte Indexverwendung

    • Zeichen Das Problem des String-Typ-Index-Fehlers

    • Optimieren Sie den Datenzugriff beim Abfragen von Daten, verwenden Sie Limits, versuchen Sie, * nicht zu verwenden, machen Sie komplexe Abfragen einfach, teilen Sie Abfragen auf, zerlegen Sie verwandte Abfragen*

    • Optimieren Sie bestimmte Arten von Abfrageanweisungen, count() optimieren, verwandte Abfrageanweisungen optimieren, Unterabfragen optimieren, Group by und Unique optimieren, Limit und Union optimieren

    • Optimierung der Speicher-Engine: Versuchen Sie, innodb zu verwenden

    • Optimierung der Datenbanktabellenstruktur: Partition Betrieb (für Benutzer transparent) Partition, Unterdatenbank und Untertabelle (horizontale Aufteilung, vertikale Aufteilung als Sekundärtabelle)

    • Optimierung der Datenbankserverarchitektur: Master-Slave-Replikation, Lese-/Schreibtrennung, Dual-Master-Hot-Standby , Lastausgleich (LVs, um einen Lastausgleich zu erreichen, die MyCat-Datenbank-Middleware implementiert den Lastausgleich)

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:github.io. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen