Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse, wie der technische Engpass von PHP-Programmierern überwunden werden kann

Analyse, wie der technische Engpass von PHP-Programmierern überwunden werden kann

高洛峰
高洛峰Original
2016-11-30 11:40:041033Durchsuche

Lassen Sie mich zunächst klarstellen, auf welche PHP-Engineering-Fragen ich mich beziehe. Ich meine, dass ich nach meinem Abschluss hauptsächlich PHP zur Entwicklung von WEB-Systemen verwendet habe und nie in anderen Sprachen gearbeitet habe. Ich verfüge über etwa 3 bis 4 Jahre Berufserfahrung und kann problemlos normale WEB-Systeme entwickeln (Zugriff auf Millionenebene, Daten auf weniger als 1.000 Ebenen, sonst ist die Geschäftslogik nicht besonders komplex). Aber sie werden auf so etwas hinweisen:

Verwenden Sie keine anderen Sprachen außer PHP und klicken Sie möglicherweise auf Shell-Skripte.
Geringe Kenntnisse von PHP (ich habe nicht viele PHP-Handbücher gelesen, außer Bibliotheken)
Geringe Kenntnisse (angesichts der Nachfrage, abgesehen von der Verwendung von PHP und MySQL, kenne keine anderen Lösungen)
PHP-Code Fokussierung auf Prozesse, Sie denken, dass die objektorientierte Implementierung zu kompliziert und schwer zu verstehen ist.
Diese PHPer sind mit Projekten oder Geschäftslogik konfrontiert, die eine hohe Leistung, eine hohe Parallelitätsverarbeitung und große Datenmengen erfordern (das System muss Geschäftsprobleme in mehreren Schritten lösen). Felder). ), Mangel an Ideen. Sie sind nicht in der Lage, den Kern des Problems zu analysieren und haben ein schlechtes technisches Urteilsvermögen. Sie können schnell vorübergehende Lösungen für das Problem finden, aber oft brechen das System und sie selbst Schritt für Schritt in den ständigen temporären Lösungen zusammen. Wie können Sie sich also verbessern? Wie kann ich ein schwierigeres System herausfordern?

Wo liegen die höheren Herausforderungen? Basierend auf meiner eigenen Erfahrung werde ich einige spezifische Herausforderungen auflisten, um jedem ein Wahrnehmungsverständnis zu vermitteln.

Was sind die Herausforderungen von Hochleistungssystemen?

Wie wählt man einen Webserver aus? Sollte ich den Fast-CGI-Modus verwenden?
Soll ich einen Reverse-Proxy-Dienst verwenden? Wählen Sie Vollspeicher-Cache oder Festplatten-Cache?
Benötigen Sie einen Lastausgleich? Basiert es auf der Anwendungsschicht oder der Netzwerkschicht? Wie stellt man eine hohe Zuverlässigkeit sicher?
Wie ist die Leistung Ihres PHP-Codes nach der Verwendung von Optimierungstools? Wo liegt der Leistungsengpass? Muss es als Erweiterung von C geschrieben werden?
Was sind die Merkmale des Benutzerzugriffs? Ist es eher lesend oder schreibend? Ist eine Lese-Schreib-Trennung erforderlich?
Wie werden Daten gespeichert? Wie hoch sind die Schreib- und Lesegeschwindigkeiten? Wie verändert sich die Zugriffsgeschwindigkeit, wenn die Datenmenge zunimmt?
Wie verwende ich den Cache? Wie kann man Scheitern berücksichtigen? Wie kann die Datenkonsistenz sichergestellt werden?
Was sind die Herausforderungen hochkomplexer Systeme?

Können Sie den Bereich identifizieren, zu dem das Unternehmen gehört? Ist es eins oder mehrere?
Kann das Geschäft sinnvoll abstrahiert und Änderungen der Geschäftsregeln mit geringem Aufwand umgesetzt werden?
Kann die Konsistenz und Sicherheit der Daten gewährleistet werden?
Beherrschen Sie objektorientierte Analyse- und Entwurfsmethoden?
Wenn Sie die von mir aufgeführten Fragen mit Ja beantworten können, ist es meiner Meinung nach grundsätzlich möglich, dass Sie technisch gesehen Architekt werden. Wenn Sie die Frage noch nicht beantworten können, müssen Sie sich in den folgenden Richtungen verstärken.

Wenn Sie immer noch nicht antworten können, müssen Sie sich in den folgenden Richtungen verstärken:

Analysieren Sie die Prinzipien der von Ihnen verwendeten Technologie und den Mechanismus dahinter, was Ihr technisches Urteilsvermögen verbessern kann. Verbessern Sie die Korrektheit Ihrer Wahl technischer Lösungen;
Erlernen Sie während des Studiums wichtige Kenntnisse über Betriebssystemprinzipien, Datenstrukturen und Algorithmen. Wisse, dass du früher für Prüfungen gelernt hast, aber jetzt musst du selbst lernen und dir selbst sagen, warum.
Fangen Sie erneut an, die Sprache C zu lernen, auch wenn Sie sie bereits im College gelernt haben. Das liegt nicht nur daran, dass Sie möglicherweise PHP-Erweiterungen schreiben müssen, sondern auch daran, dass es in C-Anwendungen eine Umgebung gibt, die sich stets um Leistung, Speicherkontrolle, Variablenlebenszyklus, Datenstrukturen und Algorithmen kümmert.
Erlernen Sie objektorientierte Analyse und Design, eine effektive Methode zur Lösung komplexer Probleme. Lernen Sie Abstraktion, nur so lassen sich komplexe Probleme lösen.
„Wie lernt man so viele Dinge? Wie lange dauert das Lernen?“ Wenn Sie hart arbeiten und einen guten Plan haben, wird es wahrscheinlich 1 bis 2 Jahre dauern.

Wie man effektiv lernt, ist ein großes Problem. Ich habe etwas Übung, aber es ist sehr verstreut und schwer zusammenzufassen. Bevor ich gestern Abend zu Bett ging, dachte ich plötzlich an den Kern von RUP, nämlich „architekturzentrierte, anwendungsfallgesteuerte, iterative Entwicklung“. In Anlehnung an diese Idee können effektive Lernmethoden folgendermaßen ausgedrückt werden: zentriert auf Prinzipien und Modellen oder Mechanismen, aufgabengesteuertes, iteratives Lernen.

Es ist etwas abstrakt. Lassen Sie uns ein Beispiel geben, um zu veranschaulichen, wie man lernt. Zweck: Erfahren Sie, wie Sie die Verarbeitungsleistung verbessern können.

Iterierbare Aufgabe: Finden Sie den Standort anhand der IP.

Dies ist eine häufige Aufgabe für WEB-Anwendungen. Die IP-Datenbank umfasst etwa 100.000 Zeilen mit Datensätzen.

Erste Iteration: Funktionalität ohne Berücksichtigung der Leistung implementieren (implementiert über PHP). Da die Region nicht direkt über KEY (IP) durchsucht werden kann, funktionieren einfache Methoden wie die direkte Platzierung in den Daten oder über ein assoziatives Array nicht. Die Idee besteht darin, zuerst die Daten zu sortieren und dann zu suchen.

Wie suche ich nach IP? Bei geordneten Daten ist die binäre Suche am schnellsten.
Wie sortiere ich? Natürlich können Sie die Bibliotheksfunktion sort verwenden, aber da Sie noch lernen, ist es besser, die schnelle Sortierung selbst zu implementieren.
Lernziele: Sortieralgorithmus, Suchalgorithmus.

PHPer verfügen im Allgemeinen über schlechte Kenntnisse in Datenstrukturen und Algorithmen. Er hat normalerweise keine Aufgaben in diesem Bereich und lernt nicht selbst, daher mangelt es ihm an Kenntnissen in diesem Bereich. Letztlich hängen die durch die Programmierung gelösten Probleme jedoch von der Datenstruktur und den Algorithmen ab, die mit dieser Datenstruktur arbeiten. Wenn Sie den Datenstrukturalgorithmus immer im Kopf haben, können Sie seine innere Struktur klar verstehen, wenn Sie auf ein Problem stoßen, und die Lösung wird sich auf natürliche Weise ergeben.

Die zweite Iteration: Optimieren Sie das Laden und Sortieren von Daten. Wenn Sie den ersten Schritt ausführen, ist dieser grundsätzlich nicht verfügbar, da die Daten jedes Mal geladen und sortiert werden müssen, was zu zeitaufwändig ist. Die Lösung besteht darin, die Daten einmal zu laden, zu sortieren und an einem Ort abzulegen, an dem jeder PHP-Prozess darauf zugreifen kann.

Legen Sie es in den Memcache. Dies ist eine einfache Frage für jeden. Tatsächlich ist es schneller, es in den gemeinsamen Speicher zu legen (unterstützt von EA und anderen Beschleunigern), da Memcache auch mehr Netzwerkoperationen hat. Werden die Daten als Ganzes oder in Teilen im gemeinsamen Speicher abgelegt? Wie analysiert man Engpässe (xdebug)?

Lernziele: Methoden zum Erkennen, Lokalisieren und Optimieren der PHP-Leistung; die Auswirkungen der PHP-Implementierungsstruktur auf die Leistung.

Dritte Iteration: PHP-Erweiterungen schreiben. Die Leistung kann sich immer noch nicht verbessern, und ich muss in die Welt von C/C++ einsteigen. Aber von nun an werden Sie nicht nur ein PHPer, sondern auch ein Allround-Ingenieur auf der Serverseite sein Herausforderung für Studenten, die noch nie C/C++ gemacht haben. Ich kann hier nicht einfach erklären, wie man C/C++ lernt. Sie können sich auf „PHP-Programmierer lernen C++“ beziehen

Lernziele: C/C++ lernen, PHP-Erweiterungen schreiben

Wie man es bestimmt Was ist mit den Mechanismen und Prinzipien des Lernens? Wie finde ich die Fahrlernaufgaben? Ich habe keine Ahnung, was ich lernen muss. Wie kann ich die beiden oben genannten Fragen beantworten?

Finden Sie die wichtigsten Punkte heraus, die aus der Positionierung dieser Technologie gelernt werden müssen, das heißt, wie sie dies tut (Mechanismus) und warum sie dies tun kann (Modell oder Prinzip)
Listen Sie die meisten auf Gemeinsame Aspekte dieser Technologieanwendung als Lernaufgabe werden von einfach bis schwierig durchgeführt.
Wenn ich Javascript lernen muss, verfüge ich über gewisse Wahrnehmungskenntnisse in HTML und CSS. Zunächst habe ich gelernt, dass JS eine dynamische Sprache im WEB-Bereich ist, die hauptsächlich die dynamische Interaktion von Webseiten löst. Dann sind die wichtigsten Punkte, die ich lernen möchte, folgende:

Wie JS mit HTML interagiert (Mechanismus)
Was sind die dynamischen Eigenschaften von JS und wie unterscheiden sie sich von anderen dynamischen Sprachen? (Sprachmodell)
Wenn Sie sich vollständig im Selbststudium befinden, ist es in der Tat nicht so einfach, die wichtigsten Punkte zu finden, die gelernt werden müssen (Mechanismus, Modell, Prinzip). Wenn Sie eine erfahrene Person finden, die Sie anleitet oder ein Lernteam hinzufügt, wird die Lerngeschwindigkeit tatsächlich erheblich verbessert.

Stellungnahme:
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