Heim > Java > javaLernprogramm > Hauptteil

Back-End-Technologie-Enzyklopädie (69 Punkte)!

Freigeben: 2023-08-17 14:47:25
nach vorne
1001 Leute haben es durchsucht
Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen. Wenn ein Gelehrter seine Gerechtigkeit bekunden will, muss er zuerst sein Buch lesen. Die Backend-Entwicklung als Kronjuwel im Bereich der Internet-Technologie war schon immer der von Entwicklern angestrebte Höhepunkt. Dieser Artikel beginnt mit den Fachbegriffen der Backend-Entwicklung und vermittelt jedem ein klares Verständnis der Backend-Entwicklung basierend auf Systementwicklung, Architekturdesign, Netzwerkkommunikation und anderen Aspekten. Die Erklärung wird umfassend und leicht verständlich sein.

Wenn du dich auf ein Vorstellungsgespräch vorbereitest, empfehle ich dir einen Artikel: ★Schritt-für-Schritt-Anleitung: So bereitest du dich auf ein Vorstellungsgespräch vor!

Systementwicklung

1. Hohe Kohäsion/geringe Kopplung

Hohe Kohäsion bezieht sich auf ein Softwaremodul besteht aus stark verwandtem Code und ist nur für eine Aufgabe verantwortlich, was oft als Single-Responsibility-Prinzip bezeichnet wird. Der Zusammenhalt eines Moduls spiegelt die Nähe der internen Verbindungen innerhalb des Moduls wider.

Je enger die Verbindung zwischen Modulen ist, desto stärker ist die Kopplung und desto schlechter ist die Unabhängigkeit des Moduls. Der Grad der Kopplung zwischen Modulen hängt von der Komplexität der Schnittstelle zwischen Modulen, der aufrufenden Methode und den übertragenen Informationen ab. Für ein Gesamtsystem sollten Module möglichst unabhängig voneinander existieren. Im Allgemeinen gilt: Je höher der Grad der Kohäsion jedes Moduls in der Programmstruktur, desto geringer ist der Grad der Kopplung zwischen den Modulen.

2. Überdesign bedeutet, zu viel zukunftsorientiertes Design durchzuführen oder relativ einfache Dinge zu verkomplizieren, Modularität, Skalierbarkeit, Designmuster usw. zu sehr zu verfolgen und dem System unnötige unnötige Funktionen hinzuzufügen.

3. Vorzeitige Optimierung

Vorzeitige Optimierung bezieht sich nicht auf die frühe Phase des Entwicklungsprozesses, sondern wenn die zukünftigen Änderungen der Anforderungen noch nicht verstanden wurden. Ihre Optimierungen können nicht nur dazu führen, dass Sie neue Anforderungen nicht gut umsetzen können, sondern Ihre Schätzung der erwarteten Optimierung kann auch falsch sein, was dazu führt, dass Sie tatsächlich nichts anderes erhalten, als den Code zu komplizieren.

Der richtige Weg besteht darin, Ihre Anforderungen zunächst mit Qualität umzusetzen, genügend Testfälle zu schreiben und dann ein Profil zu erstellen, um die Leistungsengpässe zu finden, und erst dann eine Optimierung durchzuführen.

4. Refactoring

Refactoring besteht darin, die Qualität und Leistung der Software zu verbessern, indem der Programmcode angepasst, das Entwurfsmuster und die Architektur des Programms angemessener gestaltet und die Skalierbarkeit und Wartbarkeit der Software verbessert werden.
5. Broken-Windows-Effekt

Auch als Broken-Windows-Theorie bekannt, ist die Broken-Windows-Theorie eine Theorie in der Kriminologie. Diese Theorie geht davon aus, dass die Menschen versucht sein werden, unerwünschte Phänomene in der Umwelt nachzuahmen oder sie sogar zu verschlimmern, wenn sie zugelassen werden. Nehmen wir ein Gebäude mit ein paar kaputten Fenstern. Wenn diese Fenster nicht repariert werden, können Vandalen weitere Fenster zerstören. Möglicherweise brechen sie sogar in ein Gebäude ein und lassen sich, wenn sie unbewohnt vorfinden, dort nieder oder zünden es an.

Auf die Softwareentwicklung angewendet, dürfen keine versteckten Gefahren im Systemcode oder im Architekturdesign auftauchen, sonst werden versteckte Gefahren mit der Zeit immer ernster. Im Gegenteil, ein qualitativ hochwertiges System führt dazu, dass Menschen unfreiwillig hochwertigen Code schreiben.

6. Das Prinzip des gegenseitigen Misstrauens

bedeutet, dass in der gesamten Verbindung vor und nach dem Programmbetrieb keine absolute Zuverlässigkeit garantiert werden kann. Jeder Punkt kann zu irgendeinem Zeitpunkt ausfallen oder sich unvorhersehbar verhalten. Der Dienst selbst hängt von der Umgebung, Eingaben und Anforderungen usw. ab und muss daher überall geschützt werden.

7. Persistenz

Persistenz ist ein Mechanismus zum Konvertieren von Programmdaten zwischen temporären und dauerhaften Zuständen. Laienhaft ausgedrückt werden temporäre Daten (z. B. Daten im Speicher, die nicht dauerhaft gespeichert werden können) in persistente Daten umgewandelt (z. B. in einer Datenbank oder auf einem lokalen Datenträger gespeichert, die für lange Zeit gespeichert werden können).

8. Kritischer Abschnitt

Kritischer Abschnitt wird verwendet, um eine gemeinsame Ressource oder gemeinsam genutzte Daten darzustellen, die von mehreren Threads verwendet werden können, aber jeweils nur ein Thread kann sie verwenden, sobald die Ressource des kritischen Abschnitts belegt ist Wenn ein Thread diese Ressource nutzen möchte, muss er warten.

9. Blockieren/Nicht-Blockieren

Blockieren und Nicht-Blockieren beschreiben normalerweise die Interaktion zwischen mehreren Threads. Wenn beispielsweise ein Thread eine kritische Abschnittsressource belegt, müssen alle anderen Threads, die diese Ressource benötigen, in diesem kritischen Abschnitt warten. Das Warten führt dazu, dass der Thread hängt. Diese Situation blockiert. Wenn zu diesem Zeitpunkt der Thread, der die Ressource belegt, nicht bereit ist, die Ressource freizugeben, können alle anderen in diesem kritischen Abschnitt blockierten Threads nicht arbeiten. Durch die Nichtblockierung können mehrere Threads gleichzeitig in den kritischen Abschnitt gelangen.

10. Synchronisation/Asynchron

Normalerweise beziehen sich Synchronisation und Asynchronität auf Funktions-/Methodenaufrufe.

Synchronisation bedeutet, dass beim Ausgeben eines Funktionsaufrufs der Aufruf erst zurückgegeben wird, wenn das Ergebnis vorliegt. Der asynchrone Aufruf wird sofort zurückgegeben, aber die sofortige Rückkehr des asynchronen Aufrufs bedeutet nicht, dass Ihre Aufgabe abgeschlossen ist. Es wird ein Thread im Hintergrund gestartet, um die Aufgabe fortzusetzen, und der Aufrufer wird über einen Rückruf oder andere Methoden benachrichtigt, nachdem die Aufgabe abgeschlossen ist vollendet.

11. Parallelität/Parallel

Parallel bedeutet, dass mehrere Anweisungen gleichzeitig auf mehreren Prozessoren ausgeführt werden. Ob aus Mikro- oder Makroperspektive, beide werden zusammen ausgeführt.

Parallelität bedeutet, dass nur eine Anweisung gleichzeitig ausgeführt werden kann, aber mehrere Prozessanweisungen in schneller Rotation ausgeführt werden, was zur Folge hat, dass aus der Makroperspektive mehrere Prozesse gleichzeitig ausgeführt werden, aus der Mikroperspektive jedoch nicht gleichzeitig Teilen Sie die Zeit einfach in mehrere Abschnitte auf, damit mehrere Prozesse schnell und abwechselnd ausgeführt werden können.

Architekturdesign

1. Hohe Parallelität

Aufgrund des Aufkommens verteilter Systeme bedeutet hohe Parallelität normalerweise, dass das System durch Design viele Anforderungen gleichzeitig verarbeiten kann. Für Laien bedeutet hohe Parallelität, dass viele Benutzer gleichzeitig auf dieselbe API-Schnittstelle oder URL-Adresse zugreifen. Es tritt häufig in Geschäftsszenarien mit einer großen Anzahl aktiver Benutzer und einer hohen Benutzerkonzentration auf.

2. Hohe Verfügbarkeit

Hochverfügbarkeit (High Availability) ist einer der Faktoren, die beim Entwurf einer verteilten Systemarchitektur berücksichtigt werden müssen. Dies bedeutet normalerweise, dass ein System speziell darauf ausgelegt ist, Ausfallzeiten zu reduzieren der Verfügbarkeit seiner Dienste.

3. Trennung von Lesen und Schreiben

Um die Stabilität von Datenbankprodukten sicherzustellen, verfügen viele Datenbanken über Dual-Machine-Hot-Backup-Funktionen. Das heißt, der erste Datenbankserver ist ein Produktionsserver, der externe Hinzufügungs-, Lösch- und Änderungsdienste bereitstellt; der zweite Datenbankserver führt hauptsächlich Lesevorgänge aus.

4. Kalter Standby/Hot Standby

Kalter Standby: Zwei Server, einer läuft und einer läuft nicht als Backup. Auf diese Weise läuft der Backup-Server weiter, sobald der laufende Server ausfällt. Die Cold-Standby-Lösung ist relativ einfach zu implementieren. Der Nachteil von Cold-Standby besteht jedoch darin, dass der Standby-Computer nicht automatisch übernimmt, wenn der Host ausfällt, und ein aktives Umschalten der Dienste erforderlich ist.

Hot Standby: Dies wird allgemein als Aktiv/Standby-Methode bezeichnet. Serverdaten, einschließlich Datenbankdaten, werden gleichzeitig auf zwei oder mehr Server geschrieben. Wenn der aktive Server ausfällt, wird der Standby-Rechner durch Softwarediagnose (normalerweise durch Heartbeat-Diagnose) aktiviert, um sicherzustellen, dass die Anwendung innerhalb kurzer Zeit vollständig wieder normal genutzt werden kann. Wenn ein Server ausfällt, wechselt er automatisch zu einem anderen Backup-Server.

5. Multiaktiv an entfernten Standorten bezieht sich im Allgemeinen auf die Einrichtung unabhängiger Rechenzentren in verschiedenen Städten. „Live“ bedeutet, die gesamte Datensicherung zu sichern Daten und unterstützt normalerweise nicht die geschäftlichen Anforderungen. Erst wenn der Hauptcomputerraum ausfällt, wird auf den Backup-Computerraum umgeschaltet. Multiaktivität bedeutet, dass diese Computerräume auch den Datenverkehr bewältigen und geschäftliche Unterstützung im täglichen Geschäft leisten müssen.
6. Load Balance

Load Balancing ist ein Lastausgleichsdienst, der den Datenverkehr auf mehrere Server verteilt. Es kann die externen Servicefunktionen der Anwendung automatisch auf mehrere Instanzen verteilen, die Verfügbarkeit des Anwendungssystems verbessern, indem es einzelne Fehlerquellen eliminiert, wodurch Sie ein höheres Maß an Anwendungsfehlertoleranz erreichen und so nahtlos die für die Anwendungsverteilung erforderliche Last bereitstellen können Ausgewogene Kapazität, um Ihnen effiziente, stabile und sichere Dienste zu bieten.

7. Dynamische und statische Trennung

Dynamische und statische Trennung bezieht sich auf die architektonische Entwurfsmethode der Trennung statischer Seiten von dynamischen Seiten oder statischen Inhaltsschnittstellen und dynamischen Inhaltsschnittstellen für unterschiedliche Systemzugriffe in der Webserverarchitektur, wodurch die Zugriffsleistung verbessert wird und Wartbarkeit des gesamten Dienstes.

8. Cluster

Die gleichzeitige Übertragungskapazität eines einzelnen Servers ist immer begrenzt. Wenn die Verarbeitungskapazität eines einzelnen Servers den Leistungsengpass erreicht, werden mehrere Server zusammengefasst, um Dienste bereitzustellen Im Cluster wird es als „Knoten“ des Clusters bezeichnet, und jeder Knoten kann denselben Dienst bereitstellen, wodurch die gleichzeitigen Verarbeitungsfähigkeiten des gesamten Systems verdoppelt werden.

9. Verteilt

Ein verteiltes System besteht darin, ein vollständiges System entsprechend den Geschäftsfunktionen in viele unabhängige Subsysteme aufzuteilen. Jedes Subsystem wird als „Dienst“ bezeichnet und verteilt Anforderungen an verschiedene Subsysteme Anfragen. In einem verteilten System laufen Subsysteme unabhängig voneinander und sind durch Netzwerkkommunikation verbunden, um Dateninteroperabilität und Verbunddienste zu erreichen.

10. CAP-Theorie

CAP-Theorie bedeutet, dass in einem verteilten System Konsistenz (Konsistenz), Verfügbarkeit (Verfügbarkeit) und Partitionstoleranz (Partitionsfehlertoleranz) nicht gleichzeitig hergestellt werden können.

  • Konsistenz: Es erfordert, dass alle Datensicherungen im verteilten System zum gleichen Zeitpunkt gleich sind oder sich im gleichen Zustand befinden.
  • Verfügbarkeit: Auch nach dem Ausfall einiger Knoten im Systemcluster kann das System immer noch korrekt auf Benutzeranfragen reagieren.
  • Partitionsfehlertoleranz: Das System ist in der Lage, Fehler in der Netzwerkkommunikation zwischen Knoten zu tolerieren.

Einfach ausgedrückt können in einem verteilten System bis zu zwei der oben genannten Attribute unterstützt werden. Aber da es verteilt ist, müssen wir es natürlich partitionieren. Da es partitioniert ist, können wir Partitionsfehler nicht zu 100 % vermeiden. Daher können wir nur zwischen Konsistenz und Verfügbarkeit wählen.

In verteilten Systemen streben wir oft nach Verfügbarkeit, was wichtiger ist als Konsistenz. Hier ist eine andere Theorie, die BASE-Theorie, die die CAP-Theorie weiter ausbaut.

11. BASE-Theorie

Die BASE-Theorie besagt:

  • Basically Available (grundsätzlich verfügbar)
  • Soft State (weicher Zustand)
  • Eventuell konsistent (eventuell konsistent)

Die BASE-Theorie ist das Ergebnis eines Kompromisses zwischen Konsistenz und Verfügbarkeit in CAP. Die Kernidee der Theorie lautet: Wir können keine starke Konsistenz erreichen, aber jede Anwendung kann entsprechend ihren eigenen Geschäftsmerkmalen geeignete Methoden verwenden, um das System zur endgültigen Konsistenz zu bringen.

12. Horizontale Erweiterung/vertikale Erweiterung

Horizontale Erweiterung Scale Out verteilt die Last durch das Hinzufügen weiterer Server oder Programminstanzen und erhöht dadurch die Speicherkapazität und Rechenleistung. Durchsuchen Sie außerdem das Backend des offiziellen Kontos Programming Technology Circle und antworten Sie auf „Einkaufszentrum“, um ein Überraschungsgeschenkpaket zu erhalten.

Die vertikale Erweiterung Scale Up verbessert die Verarbeitungsfähigkeit einer einzelnen Maschine.

Es gibt zwei Möglichkeiten, vertikal zu expandieren:

  • (1) Verbessern Sie die Leistung der eigenständigen Hardware, zum Beispiel: Erhöhen Sie die Anzahl der CPU-Kerne, z. B. 32 Kerne, aktualisieren Sie auf eine bessere Netzwerkkarte, z. B. 10G, aktualisieren Sie auf eine bessere Festplatte, z. B. SSD, erweitern Sie die Festplatte Laufwerkskapazität wie 2T und Erweiterung des Systemspeichers wie 128G;
  • (2) Verbessern Sie die Leistung eigenständiger Software oder Architektur, zum Beispiel: Verwenden Sie Cache, um die Anzahl der E/As zu reduzieren, und verwenden Sie asynchron, um einzelne E/As zu erhöhen Dienstdurchsatz: Verwenden Sie sperrenfreie Datenstrukturen, um die Antwortzeit zu verkürzen.
13. Ähnlich wie bei der horizontalen Erweiterung. Die Knoten im Cluster-Server sind alle parallele Peer-Knoten. Wenn eine Erweiterung erforderlich ist, können weitere Knoten hinzugefügt werden, um die Servicefunktionen des Clusters zu verbessern. Im Allgemeinen müssen die kritischen Pfade im Server (z. B. Anmeldung, Zahlung, Kerngeschäftslogik usw.) die dynamische parallele Erweiterung zur Laufzeit unterstützen.

14. Die elastische Erweiterung

bezieht sich auf die dynamische Online-Erweiterung des bereitgestellten Clusters. Das elastische Erweiterungssystem kann entsprechend der tatsächlichen Geschäftsumgebung und bestimmten Strategien automatisch weitere Knoten (einschließlich Speicherknoten, Rechenknoten und Netzwerkknoten) hinzufügen, um die Systemkapazität zu erhöhen, die Systemleistung zu verbessern oder die Systemzuverlässigkeit zu verbessern oder diese drei Ziele zu erreichen zur gleichen Zeit.
15. Statussynchronisierung/Frame-Synchronisierung: Statussynchronisierung bedeutet, dass der Server für die Berechnung der gesamten Spiellogik und die Übertragung der Ergebnisse dieser Berechnungen verantwortlich ist. Der Client ist nur für das Senden der Operationen des Spielers und die Anzeige der empfangenen verantwortlich Spielergebnisse.

Funktionen: Die Statussynchronisierung ist sehr sicher, Logikaktualisierungen sind bequem, das Trennen und Wiederverbinden erfolgt schnell, aber die Entwicklungseffizienz ist gering, der Netzwerkverkehr nimmt mit der Komplexität des Spiels zu und der Server muss einem größeren Druck standhalten.

Frame-Synchronisation: Der Server leitet nur Nachrichten ohne logische Verarbeitung weiter. Jeder Client hat die gleiche Anzahl an Frames pro Sekunde und verarbeitet in jedem Frame die gleichen Eingabedaten.

Funktion: Die Frame-Synchronisierung muss sicherstellen, dass das System denselben Ausgang unter demselben Eingang hat. Die Frame-Synchronisierung weist eine hohe Entwicklungseffizienz, einen geringen Verkehrsverbrauch und eine geringe Stabilität auf und belastet den Server kaum. Allerdings sind die Netzwerkanforderungen hoch, die Zeit zum Trennen und Wiederherstellen der Verbindung ist lang und der Rechendruck des Clients ist hoch.

Netzwerkkommunikation

1. Verbindungspool

Erstellen Sie im Voraus einen Verbindungspufferpool und stellen Sie eine Reihe von Verbindungsnutzungs-, Zuweisungs- und Verwaltungsstrategien bereit, damit die Verbindungen im Verbindungspool effizient und sicher wiederverwendet werden können, wodurch der Overhead vermieden wird häufigem Verbindungsaufbau und -abbau.

2. Trennung und erneute Verbindung

Aufgrund von Netzwerkschwankungen werden Benutzer zeitweise vom Server getrennt. Nachdem das Netzwerk wiederhergestellt wurde, versucht der Server, den Benutzer mit dem Status und den Daten zu verbinden, als er zuletzt getrennt wurde.

3. Sitzungspersistenz

Sitzungspersistenz bezieht sich auf einen Mechanismus auf dem Load Balancer, der die Korrelation zwischen dem Interaktionsprozess zwischen dem Client und dem Server identifizieren und sicherstellen kann, dass alle zugehörigen Zugriffe zugewiesen werden zu einer Maschine. Um es menschlich auszudrücken: Mehrere während einer Sitzung initiierte Anfragen landen alle auf derselben Maschine.

4. Lange Verbindung/kurze Verbindung

bezieht sich normalerweise auf die lange Verbindung und die kurze Verbindung von TCP. Eine lange Verbindung bedeutet, dass nach dem Aufbau einer TCP-Verbindung im Allgemeinen Heartbeats aneinander gesendet werden, um die Existenz der Korrespondenz zu bestätigen, und die Verbindung im Allgemeinen nicht aktiv ist getrennt. Unter kurzen Verbindungen versteht man im Allgemeinen den Aufbau einer Verbindung, die Ausführung einer Transaktion (z. B. eine http-Anfrage) und das anschließende Schließen der Verbindung.

5. Flusskontrolle/Überlastungskontrolle

Flusskontrolle verhindert, dass der Sender zu schnell sendet und die Ressourcen des Empfängers erschöpft, sodass der Empfänger keine Zeit zum Verarbeiten hat.

Überlastungskontrolle verhindert, dass der Absender Nachrichten zu schnell sendet, was dazu führt, dass das Netzwerk keine Zeit zum Verarbeiten hat und eine Überlastung verursacht wird, was wiederum dazu führt, dass die Leistung dieses Teils und sogar des gesamten Netzwerks abnimmt. In schweren Fällen kann es sogar dazu kommen Dies kann dazu führen, dass Netzwerkkommunikationsdienste zum Erliegen kommen.

6. Der Donnerherdeneffekt

Der Donnerherdeneffekt wird auch Donnerherdeneffekt genannt, aber wie heißt er kurz gesagt, wenn mehrere Prozesse (Multithreads) gleichzeitig blockiert werden? das gleiche Ereignis (Schlafzustand)Wenn das Ereignis, auf das Sie warten, eintritt, werden alle wartenden Prozesse (oder Threads) aufgeweckt, aber am Ende erhält möglicherweise nur ein Prozess (Thread) die „Kontrolle“ dieser Zeit und verarbeiten Sie das Ereignis, während die anderen Prozesse (Threads) keine „Kontrolle“ erlangen und nur wieder in den Ruhezustand übergehen können. Dieses Phänomen und die Leistungsverschwendung werden als donnernde Herden bezeichnet.

7. NAT

NAT (Network Address Translation, Network Address Translation) soll die Adressinformationen im Header der IP-Nachricht ersetzen. NAT wird normalerweise am Netzwerkausgang einer Organisation eingesetzt, um die Erreichbarkeit des öffentlichen Netzwerks und die Protokollkonnektivität der oberen Schicht bereitzustellen, indem die interne Netzwerk-IP-Adresse durch die Ausgangs-IP-Adresse ersetzt wird.

Anormaler Fehler

1. Ausfallzeit

Ausfallzeit bezieht sich im Allgemeinen auf den Absturz des Computerhosts aufgrund eines unerwarteten Fehlers. Zweitens können einige Server, wie z. B. Datenbank-Deadlocks, auch als Ausfallzeiten bezeichnet werden. Einige Dienste hängen auf einigen Servern sozusagen auf.

2. coredump

Wenn ein Programmfehler auftritt und ungewöhnlich unterbrochen wird, speichert das Betriebssystem den aktuellen Status der Programmarbeit in einer coredunmp-Datei. Normalerweise enthalten Coredump-Dateien Speicher, Registerstatus, Stapelzeiger, Speicherverwaltungsinformationen usw., wenn das Programm ausgeführt wird.

3. Cache-Penetration/Breakdown/Avalanche

Cache-Penetration: Da der Cache definitiv nicht vorhanden ist, muss er aus der Datenbank abgefragt werden Wenn sie gefunden werden, werden sie nicht in den Cache geschrieben, was dazu führt, dass diese nicht vorhandenen Daten bei jeder Anforderung in der Datenbank abgefragt werden, was die Datenbank belastet.

Cache-Aufschlüsselung: Cache-Aufschlüsselung bezieht sich darauf, dass ein Hotspot-Schlüssel zu einem bestimmten Zeitpunkt abläuft und es zu diesem Zeitpunkt eine große Anzahl gleichzeitiger Anforderungen für diesen Schlüssel gibt, sodass eine große Anzahl von Anforderungen die Datenbank erreicht .

Cache-Lawine: Cache-Lawine bezieht sich auf die Ablaufzeit einer großen Datenmenge im Cache, und die große Menge an Abfragedaten führt zu übermäßigem Druck auf die Datenbank und sogar zu Ausfallzeiten.

Der Unterschied zum Cache-Ausfall besteht darin, dass der Cache-Ausfall der Ausfall von Hotspot-Schlüsseln ist und der Cache-Avalanche der Ausfall einer großen Anzahl von Schlüsseln gleichzeitig.

4. 500/501/502/503/504/505

500 Interner Serverfehler: Im Allgemeinen stößt der Server auf eine unerwartete Situation und kann die Anfrage nicht abschließen. Mögliche Gründe:

  • 1. Programmfehler, wie ASP- oder PHP-Syntaxfehler;

  • 2. Aufgrund der hohen Parallelität können nicht zu viele Dateien geöffnet werden.

501 Nicht implementiert: Der Server versteht oder unterstützt die angeforderte HTTP-Anfrage nicht.

502 Schlechtes Gateway: Der WEB-Server fällt möglicherweise aus, weil die angeforderten PHP-FPM-Prozesse nicht ausgeführt wurden, was letztendlich zur Beendigung von PHP-FPM führt Verfahren. Mögliche Gründe:

  • 1. Nginx-Server, die Anzahl der PHP-CGI-Prozesse ist zu lang;

  • 3. Der PHP-CGI-Prozess ist gestorben.

503 Dienst nicht verfügbar: Der Server ist derzeit nicht verfügbar. Der Systemwartungsserver kann die Anfrage des Clients vorübergehend nicht verarbeiten. Dies ist nur ein vorübergehender Zustand. Sie können sich an den Serveranbieter wenden.

504 Gateway-Timeout: Der Serverfehler 504 weist auf ein Timeout hin, was bedeutet, dass die vom Client gesendete Anfrage das Gateway nicht erreicht und die Anfrage nicht das ausführbare PHP-FPM erreicht. Dies hängt im Allgemeinen mit der Konfiguration zusammen von nginx.conf.

505 HTTP-Version nicht unterstützt: Der Server unterstützt die in der Anfrage verwendete HTTP-Protokollversion nicht. (HTTP-Version wird nicht unterstützt)

Mit Ausnahme des 500-Fehlers, bei dem es sich möglicherweise um einen Programmiersprachenfehler handelt, können die restlichen Fehler wahrscheinlich als Probleme mit dem Server oder der Serverkonfiguration verstanden werden. 5. Speicherüberlauf/Speicherleck Sie haben einen Block zum Speichern von Daten vom Typ int. Speicherplatz, aber Sie speichern Daten vom Typ long. Das Ergebnis ist, dass der Speicher nicht ausreicht und ein OOM-Fehler gemeldet wird, der sogenannte Speicherüberlauf.

Speicherverlust: Speicherverlust bezieht sich auf den dynamisch zugewiesenen Heap-Speicher im Programm, der nicht freigegeben wird oder aus irgendeinem Grund nicht freigegeben werden kann, was zu einer Verschwendung von Systemspeicher führt, was zu schwerwiegenden Folgen wie einer Verlangsamung des Programms oder sogar zu schwerwiegenden Folgen führen kann System stürzt ab.

6. Handle-Leck

Handle-Leck besteht darin, dass der Prozess das geöffnete Dateihandle nach dem Aufruf der Systemdatei nicht freigibt. Das allgemeine Phänomen nach einem Handle-Leck besteht darin, dass die Maschine langsamer wird, die CPU stark ansteigt und die CPU-Auslastung des CGI oder Servers, auf dem das Handle-Leck auftritt, zunimmt.

7. Deadlock bezieht sich auf ein Blockierungsphänomen, das dadurch verursacht wird, dass zwei oder mehr Threads während der Ausführung um Ressourcen konkurrieren Das System befindet sich in einem Deadlock-Zustand oder das System hat einen Deadlock.

8. Soft Interrupt/Hard Interrupt

Hard Interrupt

: Der Interrupt, den wir normalerweise nennen, ist ein Hard Interrupt (Hardirq).

Wird hauptsächlich verwendet, um das Betriebssystem über Änderungen im Status der Systemperipherie zu benachrichtigen.

Soft-Interrupt: 1. Normalerweise wird der Kernel durch eine Hard-Interrupt-Serviceroutine unterbrochen. 2. Um den Anforderungen von Echtzeitsystemen gerecht zu werden, sollte die Interrupt-Verarbeitung so schnell wie möglich erfolgen.

Um diese Funktion zu realisieren, verwendet Linux harte Interrupts, um Aufgaben zu verarbeiten, die in kurzer Zeit abgeschlossen werden können, wenn ein Interrupt auftritt, und Aufgaben, deren Verarbeitung lange dauert, werden nach dem Interrupt, einem weichen Interrupt, abgeschlossen (softirq) zum Abschließen.

9. Glitch

In einem kurzen Moment sind die Serverleistungsindikatoren (wie Datenverkehr, Festplatten-IO, CPU-Auslastung usw.) viel größer als im Zeitraum davor und danach. Das Auftreten von Störungen bedeutet, dass die Serverressourcen ungleichmäßig und unzureichend genutzt werden, was leicht zu anderen schwerwiegenderen Problemen führen kann.

10. Replay-Angriff

Der Angreifer sendet ein Paket, das vom Zielhost empfangen wurde, um das System zu täuschen. Es wird hauptsächlich für den Identitätsauthentifizierungsprozess verwendet und zerstört die Richtigkeit der Authentifizierung. Dabei handelt es sich um eine Angriffsart, bei der eine gültige Datenübertragung ständig böswillig oder betrügerisch wiederholt wird. Ein Replay-Angriff kann vom Initiator oder von einem Gegner durchgeführt werden, der die Daten abfängt und erneut überträgt. Angreifer nutzen Netzwerküberwachung oder andere Methoden, um Authentifizierungsdaten zu stehlen und sie dann erneut an den Authentifizierungsserver zu senden.

11. Netzwerkinsel

Netzwerkinsel bezieht sich auf eine Situation in einer Clusterumgebung, in der einige Maschinen die Netzwerkverbindung zum gesamten Cluster verlieren, sich in einen kleinen Cluster aufteilen und es zu Dateninkonsistenzen kommt.

12. Datenversatz

Bei Clustersystemen ist der Cache im Allgemeinen verteilt, das heißt, verschiedene Knoten sind für einen bestimmten Bereich zwischengespeicherter Daten verantwortlich. Wir verteilen die zwischengespeicherten Daten nicht ausreichend, was dazu führt, dass eine große Menge zwischengespeicherter Daten auf einen oder mehrere Dienstknoten konzentriert wird, was als Datenversatz bezeichnet wird. Im Allgemeinen wird ein Datenversatz durch eine schlechte Implementierung des Lastausgleichs verursacht.

13. Split-Brain

Split-Brain bezieht sich auf eine Systemaufteilung, die durch die Unzugänglichkeit des Netzwerks zwischen einigen Knoten in einem Clustersystem verursacht wird. Verschiedene aufgeteilte kleine Cluster stellen Dienste entsprechend ihrem jeweiligen Status bereit, und der ursprüngliche Cluster verfügt über inkonsistente Dienste Gleichzeitige Reaktion führt dazu, dass Knoten miteinander um Ressourcen, Systemchaos und Datenschäden konkurrieren.

Überwachung von Alarmen

1. Serviceüberwachung

Der Hauptzweck der Serviceüberwachung besteht darin, genau und schnell zu erkennen, wann Serviceprobleme auftreten oder auftreten werden, um das Ausmaß der Auswirkungen zu reduzieren. Generell gibt es viele Methoden zur Serviceüberwachung, die sich in Ebenen einteilen lassen:

  • Systemschicht (CPU, Netzwerkstatus, IO, Maschinenlast usw.)
  • Anwendungsschicht (Prozessstatus, Fehlerprotokoll, Durchsatz usw.)
  • Businessschicht (Fehlercode des Dienstes/der Schnittstelle , Reaktionszeit)
  • Benutzerebene (Benutzerverhalten, Überwachung der öffentlichen Meinung, vergrabene Front-End-Punkte)
2. Vollständige Linküberwachung

Service-Wähltest: Service-Wähltest ist eine Überwachungsmethode Um die Verfügbarkeit von Diensten (Anwendungen) zu ermitteln, wird der Zieldienst regelmäßig über Einwahltestknoten ermittelt, die hauptsächlich anhand der Verfügbarkeit und Reaktionszeit gemessen werden. Normalerweise gibt es mehrere Einwahltestknoten an verschiedenen Orten.

Knotenerkennung: Die Knotenerkennung ist eine Überwachungsmethode zur Erkennung und Verfolgung der Netzwerkverfügbarkeit und -glätte zwischen Knoten in verschiedenen Computerräumen (Rechenzentren). Sie wird hauptsächlich anhand der Reaktionszeit, der Paketverlustrate und der Hop-Anzahl gemessen Methode Normalerweise Ping, MTR oder andere private Protokolle.

Alarmfilterung: Filtern Sie bestimmte vorhersehbare Alarme und schließen Sie Daten aus der Alarmstatistik aus, z. B. HTTP-Antwort-500-Fehler, die durch eine kleine Anzahl von Crawler-Besuchen verursacht werden, benutzerdefinierte Ausnahmeinformationen des Geschäftssystems usw.

Alarmdeduplizierung: Wenn der verantwortlichen Person ein Alarm mitgeteilt wird, wird derselbe Alarm nicht erneut empfangen, bis der Alarm wiederhergestellt ist.

Alarmunterdrückung: Um die durch Systemjitter verursachten Störungen zu reduzieren, muss beispielsweise eine vorübergehende hohe Belastung des Servers normal sein ernst genommen werden.

Alarmwiederherstellung: Das Entwicklungs-/Betriebs- und Wartungspersonal muss nicht nur Alarmbenachrichtigungen erhalten, sondern auch Benachrichtigungen darüber, dass der Fehler behoben wurde und der Alarm wieder normal ist.

Alarmzusammenführung: Führen Sie mehrere gleichzeitig generierte identische Alarme zusammen. Wenn ein Microservice-Cluster beispielsweise mehrere Alarme mit übermäßiger Unterdienstlast gleichzeitig hat, müssen diese zu einem Alarm zusammengeführt werden.

Alarmkonvergenz: Wenn ein Alarm auftritt, wird er oft von anderen Alarmen begleitet. Zu diesem Zeitpunkt können Sie nur einen Alarm für die Grundursache generieren, andere Alarme werden zu Unteralarmen zusammengefasst und Benachrichtigungen werden zusammen gesendet. Wenn beispielsweise ein Cloud-Server über einen CPU-Auslastungsalarm verfügt, geht dieser oft mit Verfügbarkeitsalarmen für alle Systeme einher, über die er verfügt.

Selbstheilung von Fehlern: Echtzeiterkennung von Alarmen, Vordiagnose und -analyse, automatische Fehlerbehebung und Öffnung umliegender Systeme, um den gesamten Prozess abzuschließen.

Service Governance

1. Microservices

Microservice-Architektur ist ein Architekturmuster, das die Aufteilung einer einzelnen Anwendung in eine Reihe kleiner Dienste befürwortet, um Benutzern den ultimativen Mehrwert zu bieten. Jeder Dienst läuft in seinem eigenen unabhängigen Prozess und die Dienste kommunizieren untereinander über einen einfachen Kommunikationsmechanismus (normalerweise eine Restful-API auf Basis von HTTP). Jeder Dienst ist um ein bestimmtes Unternehmen herum aufgebaut und kann unabhängig, produktionsähnlich, in einer Produktionsumgebung bereitgestellt werden Umgebung usw.

2. Diensterkennung

Diensterkennung bezieht sich auf die Verwendung eines Registrierungszentrums zum Aufzeichnen von Informationen zu allen Diensten in einem verteilten System, damit andere Dienste diese registrierten Dienste schnell finden können. Service Discovery ist das Kernmodul, das umfangreiche SOA- und Microservice-Architekturen unterstützt und sollte so hochverfügbar wie möglich sein.

3. Traffic Peak Shaving

Wenn Sie sich die Nachfrageüberwachungskurve des Lotterie- oder Flash-Sale-Systems ansehen, werden Sie feststellen, dass diese Art von System während der Öffnungszeit der Veranstaltung einen Höhepunkt aufweist , das Anforderungsvolumen des Systems, Maschinenlasten sind im Allgemeinen relativ stabil. Um Maschinenressourcen zu schonen, können wir nicht immer die maximale Ressourcenkapazität zur Verfügung stellen, um kurzfristige Spitzenanforderungen zu unterstützen. Daher müssen einige technische Mittel eingesetzt werden, um die momentane Anforderungsspitze abzuschwächen und den Systemdurchsatz bei Spitzenanforderungen kontrollierbar zu halten. Peak Clipping kann auch verwendet werden, um Störungen zu beseitigen und die Auslastung der Serverressourcen ausgewogener und vollständiger zu gestalten. Zu den gängigen Strategien zur Spitzenreduzierung gehören Warteschlangen, Frequenzbegrenzung, hierarchische Filterung, mehrstufiges Caching usw.

4. Versionskompatibilität

Beim Upgrade der Version müssen Sie berücksichtigen, ob die neue Datenstruktur die alten Daten nach der aktualisierten Version verstehen und analysieren kann, ob das neu geänderte Protokoll das alte Protokoll verstehen und die Erwartungen erfüllen kann und angemessener Umgang. Dies erfordert Versionskompatibilität während des Service-Designprozesses.

5. Überlastschutz

Überlastung bedeutet, dass die aktuelle Auslastung die maximale Verarbeitungskapazität des Systems überschritten hat. Das Auftreten einer Überlastung führt dazu, dass einige Dienste nicht ordnungsgemäß gehandhabt werden völlig unzugänglich sein oder sogar eine Lawine auslösen. Der Überlastungsschutz ist eine Maßnahme gegen diese ungewöhnliche Situation, um zu verhindern, dass der Dienst vollständig nicht verfügbar ist.

6. Service-Schutzschalter

Die Funktion des Service-Schutzschalters ähnelt unserer Haushaltssicherung. Wenn ein Dienst nicht verfügbar ist oder die Reaktion abbricht, werden Anrufe an den Dienst vorübergehend gestoppt, um zu verhindern, dass das gesamte System abstürzt.

7. Service-Downgrade

Service-Downgrade ist, wenn der Serverdruck stark zunimmt. Einige Dienste und Seiten werden basierend auf den aktuellen Geschäftsbedingungen und dem Datenverkehr strategisch herabgestuft, um Serverressourcen freizugeben und den normalen Betrieb von Kernaufgaben sicherzustellen. Bei der Degradation werden häufig unterschiedliche Ebenen angegeben und bei unterschiedlichen Ausnahmeebenen wird eine unterschiedliche Verarbeitung durchgeführt. Durchsuchen Sie außerdem das offizielle Konto Java Architect Technical Backend und antworten Sie mit „Frühling“, um ein Überraschungsgeschenkpaket zu erhalten.

Abhängig von der Servicemethode: Sie können den Service verweigern, Sie können den Service verzögern und manchmal können Sie einen zufälligen Service anbieten.

Abhängig vom Leistungsumfang: Eine bestimmte Funktion kann wegfallen, oder bestimmte Module können wegfallen.

Kurz gesagt erfordert ein Service-Downgrade unterschiedliche Downgrade-Strategien basierend auf unterschiedlichen Geschäftsanforderungen. Der Hauptzweck besteht darin, dass der Dienst zwar beschädigt, aber besser als nichts ist.

8. Meltdown VS Downgrade

Gleiche Punkte: Die Ziele sind die gleichen, angefangen bei Verfügbarkeit und Zuverlässigkeit, um Systemabstürze zu verhindern, aber am Ende stellen Benutzer fest, dass einige Funktionen vorübergehend nicht verfügbar sind;

Unterschiedlicher Punkt: Die auslösenden Gründe sind in der Regel durch den Ausfall eines bestimmten Dienstes (nachgelagerter Dienst) verursacht, während die Verschlechterung des Dienstes im Allgemeinen von der Gesamtlast

Strom ausgeht Die Begrenzung kann als eine Art Dienstverschlechterung angesehen werden. Die Begrenzung des Flusses besteht darin, den Eingabe- und Ausgabefluss des Systems zu begrenzen, um den Zweck des Schutzes des Systems zu erreichen. Im Allgemeinen kann der Durchsatz des Systems gemessen werden, um den stabilen Betrieb des Systems sicherzustellen. Sobald der Schwellenwert erreicht ist, der eingeschränkt werden muss, muss der Datenverkehr eingeschränkt und einige Maßnahmen ergriffen werden, um den Zweck zu erreichen den Verkehr einzuschränken. Zum Beispiel: verzögerte Bearbeitung, Ablehnung der Bearbeitung oder teilweise Ablehnung der Bearbeitung usw.

10. Fehlermaskierung

Entfernen Sie die fehlerhafte Maschine aus dem Cluster, um sicherzustellen, dass neue Anfragen nicht an die fehlerhafte Maschine verteilt werden.
Testmethoden
1. Black-Box-/White-Box-Tests

Black-Box-Tests berücksichtigen nicht die interne Struktur und die logische Struktur des Programms. Sie werden hauptsächlich verwendet, um zu testen, ob die Funktionen des Systems den Anforderungsspezifikationen entsprechen. Im Allgemeinen gibt es einen Eingabewert, einen Eingabewert und einen erwarteten Wert zum Vergleich.

White-Box-Tests werden hauptsächlich in der Unit-Testphase verwendet, hauptsächlich für Tests auf Codeebene. Für die interne logische Struktur des Programms umfassen die Testmethoden: Anweisungsabdeckung, Entscheidungsabdeckung, Bedingungsabdeckung, Pfadabdeckung und Bedingungskombination Abdeckung

2. Unit-/Integrations-/System-/Akzeptanztests

Softwaretests sind im Allgemeinen in vier Phasen unterteilt: Unit-Tests, Integrationstests, Systemtests und Akzeptanztests.

Unit-Tests: Beim Unit-Testen wird die kleinste überprüfbare Einheit in der Software überprüft und verifiziert, z. B. ein Modul, ein Prozess, eine Methode usw. Unit-Tests haben die kleinste Granularität und werden im Allgemeinen vom Entwicklungsteam mithilfe eines White-Box-Ansatzes getestet. Dabei wird hauptsächlich getestet, ob die Einheit dem „Design“ entspricht.

Integrationstests: Integrationstests werden auch als Assembly-Tests bezeichnet. Dabei werden normalerweise alle Programmmodule auf der Grundlage von Unit-Tests geordnet und inkrementell getestet. Integrationstests liegen zwischen Unit-Tests und Systemtests und spielen eine „Brückenrolle“. Im Allgemeinen verwendet das Entwicklungsteam zum Testen einen White-Box-Plus-Black-Box-Ansatz, der nicht nur das „Design“, sondern auch die „Anforderungen“ überprüft.

Systemtests: Beim Systemtest wird die integrierte getestete Software als Teil des Computersystems verwendet und mit anderen Teilen des Systems kombiniert, um eine Reihe strenger und effektiver Tests in der tatsächlichen Betriebsumgebung durchzuführen Entdecken Sie mögliche Probleme mit der Software, um den normalen Betrieb des Systems sicherzustellen. Systemtests weisen die größte Granularität auf und werden im Allgemeinen von einem unabhängigen Testteam mithilfe eines Black-Box-Ansatzes getestet. Dabei wird hauptsächlich getestet, ob das System die „Anforderungsspezifikationen“ erfüllt.

Akzeptanztest: Der Abnahmetest, auch Liefertest genannt, ist ein formaler Test, der auf Benutzerbedürfnissen und Geschäftsprozessen basiert, um festzustellen, ob das System die Akzeptanzkriterien erfüllt. Benutzer, Kunden oder andere autorisierte Stellen entscheiden, ob sie das System akzeptieren. Abnahmetests ähneln Systemtests. Der Hauptunterschied besteht darin, dass die Tester unterschiedlich sind.

3. Regressionstests

Nachdem Fehler entdeckt und behoben wurden oder neue Funktionen zur Software hinzugefügt wurden, führen Sie einen erneuten Test durch. Wird verwendet, um zu überprüfen, ob die festgestellten Mängel behoben wurden und die Änderungen keine neuen Probleme verursacht haben.

4. Rauchtest

Dieser Begriff stammt aus der Eisenwarenindustrie. Nachdem Sie Änderungen oder Reparaturen an Hardware oder Hardwarekomponenten vorgenommen haben, schalten Sie das Gerät direkt ein. Tritt kein Rauch auf, besteht die Komponente den Test. In der Software beschreibt der Begriff „Rauchtests“ den Prozess der Validierung von Codeänderungen vor der Einbettung in den Quellbaum des Produkts.

Rauchtests sind eine schnelle Strategie zur Überprüfung grundlegender Funktionen von Softwareversionspaketen während des Softwareentwicklungsprozesses. Es handelt sich um ein Mittel zur Bestätigung und Verifizierung der Grundfunktionen der Software und nicht um einen eingehenden Test des Softwareversionspakets.

Zum Beispiel: Für einen Smoke-Test eines Login-Systems müssen wir nur den richtigen Benutzernamen und das richtige Passwort testen, um die Kernfunktion des Logins zu überprüfen. Was Eingabefelder, Sonderzeichen usw. betrifft, können diese anschließend ausgeführt werden der Rauchtest.

5. Leistungstest

Beim Leistungstest werden verschiedene Leistungsindikatoren des Systems mithilfe automatisierter Testtools getestet, um eine Vielzahl normaler, Spitzen- und anormaler Lastbedingungen zu simulieren. Sowohl Lasttests als auch Stresstests sind Leistungstests und können kombiniert werden.

Durch Lasttests wird die Leistung des Systems unter verschiedenen Arbeitslasten ermittelt. Ziel ist es, die Änderungen verschiedener Leistungsindikatoren des Systems zu testen, wenn die Last allmählich zunimmt.

Stresstests sind Tests, die Engpässe oder inakzeptable Leistungspunkte eines Systems ermitteln, um das maximale Serviceniveau zu erreichen, das das System bieten kann.

6. Benchmark-Test

Benchmark ist auch eine Leistungstestmethode, mit der die maximale tatsächliche Betriebsleistung der Hardware der Maschine und der Leistungsverbesserungseffekt der Softwareoptimierung gemessen werden. Er kann auch zur Identifizierung der CPU eines bestimmten Teils verwendet werden Viele Entwickler verwenden Benchmarks, um verschiedene Parallelitätsmodi zu testen, oder sie verwenden Benchmarks, um die Anzahl der Worker-Pools zu konfigurieren, um sicherzustellen, dass der Durchsatz des Systems maximiert werden kann Testen

A/B-Test besteht darin, zwei oder mehr Gruppen zufällig zugewiesener Stichproben mit ähnlichen Zahlen zum Vergleich zu verwenden. Wenn die experimentellen Ergebnisse der experimentellen Gruppe und der Vergleichsgruppe in den Zielindikatoren statistisch signifikant sind, kann dies das Experiment erklären. Gruppenfunktionen können zu den gewünschten Ergebnissen führen und Ihnen dabei helfen, Hypothesen zu validieren oder Produktentscheidungen zu treffen.
8. Code-Coverage-Tests

Code-Coverage ist ein Maß beim Software-Testen, das den Anteil und Umfang des Quellcodes im getesteten Programm beschreibt. Der resultierende Anteil wird Code-Coverage genannt. Bei Unit-Tests wird die Codeabdeckung häufig als Indikator zur Messung der Testqualität verwendet. Die Codeabdeckung muss beispielsweise 80 % oder 90 % erreichen. Seitdem haben Tester große Anstrengungen unternommen, um Code für die Fallabdeckung zu entwerfen.

Release-Bereitstellung

1. DEV/PRO/FAT/UAT

DEV (Entwicklungsumgebung): Entwicklungsumgebung, die von Entwicklern zum Debuggen verwendet wird, mit großen Versionsänderungen.

FAT (Feature Acceptance Test Environment): Funktionale Akzeptanztestumgebung, die zum Testen durch Softwaretester verwendet wird.

UAT (Benutzerakzeptanztestumgebung): Benutzerakzeptanztestumgebung, die zur Funktionsüberprüfung in der Produktionsumgebung verwendet wird und als Vorabversionsumgebung verwendet werden kann.

PRO (Produktionsumgebung): Produktionsumgebung, formelle Online-Umgebung.

2. Grayscale-Release

Grayscale-Release bedeutet, dass einige Benutzer im Zuge der Aktualisierung der Version durch Partitionskontrolle, Whitelist-Steuerung usw. auf Produktfunktionen aktualisiert werden, während die übrigen Benutzer unverändert bleiben und danach aktualisiert werden Wenn es keine Rückmeldungen von Benutzern zu Produktfunktionen gibt, werden wir den Umfang schrittweise erweitern und schließlich die neuen Versionsfunktionen für alle Benutzer öffnen, um die Stabilität des Gesamtsystems sicherzustellen in der anfänglichen Graustufe geändert, um ihre Wirkung sicherzustellen.

3. Rollback

bezieht sich auf die Wiederherstellung des letzten korrekten Zustands (oder der letzten stabilen Version) des Programms oder der Daten, wenn ein Programm- oder Datenverarbeitungsfehler auftritt.

.

Das obige ist der detaillierte Inhalt vonBack-End-Technologie-Enzyklopädie (69 Punkte)!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Java后端技术全栈
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!