wir beschleunigen Projekte auf Bitrix, erhöhen ihre Fehlertoleranz / Sudo Null IT News

Hallo! Danila Solovyov, Head of PHP bei AGIMA, meldet sich. Für Projektmanager und Nachwuchsentwickler habe ich eine kleine Anleitung vorbereitet, wie man die Arbeit an großen Projekten auf Bitrix beschleunigt und deren Fehlertoleranz erhöht. Hier finden Sie keine komplexen Fälle oder atemberaubende Lösungen. Aber Sie werden einfache und anwendbare Tipps finden.

So lesen Sie diesen Artikel

Wir werden über Projekte auf Bitrix Enterprise-Ebene sprechen. Einige der Empfehlungen gelten auch für andere PHP-Frameworks und Webentwicklungs-Stacks.

Aber das Wichtigste ist, dass wir alle verstehen, dass das Projekt zuerst umgesetzt werden muss. Bereits in diesem Stadium überlegen Entwickler, wie schnell das System arbeiten wird und was ihm dabei helfen wird. Aber es ist unmöglich, absolut alles vorherzusehen. Dieser Artikel hilft Ihnen herauszufinden, wie Sie ein bereits laufendes Projekt beschleunigen können.

Jeder Abschnitt dieses Textes ist ein architektonischer Block. Um die Anwendung zum Fliegen zu bringen, können Sie mit allen gleichzeitig oder mit einem von ihnen arbeiten. Ich habe 5 Blöcke ausgewählt:

  1. Bitrix selbst und alles, was in PHP/HTML/CSS/JS geschrieben wurde, obendrauf.

  2. Datenbanken: In Bitrix ist dies standardmäßig MySQL.

  3. Zwischenspeicher.

  4. Integration mit anderen Systemen.

  5. Dateisystem.

In jedem Block befindet sich eine Checkliste mit Kommentaren oder einfach nur eine Liste mit Tipps. Wenn Sie es lesen, werden Sie Ihren Teamleiter besser verstehen. Oder vielleicht kannst du ihm einen Rat geben.

Wie man ein Projekt auf der Ebene von Bitrix und PHP/HTML/CSS/JS beschleunigt

  1. PHP.

    a. Verwenden Sie vorgefertigte Bibliotheken.

Alle Bibliotheken zur Lösung spezifischer Probleme werden von Entwicklern nicht in einer Stunde oder einer Woche debuggt und versioniert. Das ist viel Arbeit, und alle Entscheidungen werden jahrelang ausgearbeitet. Sie haben ein Support-Team. Daher müssen sie verwendet werden – dies erhöht die Fehlertoleranz des Projekts.

Um mit Bibliotheken und Abhängigkeiten zu arbeiten, verwenden Sie Composer (

b. Profiling-Code in ernsthaften Projekten.

Der Profiler sammelt Daten darüber, wie schnell und welche Funktionalität auf der Seite ausgeführt wird. Diese Daten helfen dem Entwickler und Teamleiter auf einer bestimmten Seite, Engpässe zu finden – diejenigen, die die Gesamtladezeit verlangsamen.

c. Leiten Sie selbst geschriebenen Code durch statische Analysatoren.

Egal wie cool das Entwicklungsteam ist, jeder macht Fehler. Analysatoren versichern das gesamte Team gegen Tippfehler oder kleinere Fehler, die die Arbeit des gesamten Projekts ernsthaft beeinträchtigen würden.

  1. HTML/CSS/JS.

    a. Erstellen Sie das Layout und das Vorderteil auf dem Assembler.

    Wenn das Layout zunächst optimiert und komprimiert wird, lassen sich Fehler leichter finden. Höchstwahrscheinlich werden sie auf der Seite der Backend-Entwickler stehen.

    Nützlicher Link: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=12435

  1. Testen.

    a. Testen nicht vergessen.

    Wenn das Projekt wirklich groß ist, dann ohne Tester überall. Es ist wichtig, dass sie Smokes und Regressionen implementieren und den Testprozess debuggen. Dadurch gehen weniger Fehler in die Produktion. Das bedeutet, dass Entwickler mehr Zeit haben, an der Beschleunigung des Projekts und der Verbesserung der Fehlertoleranz zu arbeiten.

  2. Bitrix.

    a. Denken Sie an die Größenänderung von Bildern.

    Stellen wir uns eine Website mit dem Infoblock „News“ vor. Einer von ihnen wurde mit einem 15-MB-Bild geladen. Ohne Größenänderung zieht das Netzwerk es vollständig hoch, das Laden der Seite dauert lange. Dies wirkt sich auf die Indizierung aus. Der Endbenutzer erhält ein sehr langes Rendering.

    b. Verwenden Sie d7 und ORM.

    Für Manager ist es schwierig, dies zu kontrollieren, aber es ist nützlich zu wissen. Diese beiden Technologien beschleunigen das Projekt um etwa das Fünffache – meine persönliche Statistik.

    c. Übertragen Sie so viel wie möglich von Infoblöcken an HLB.

    Sie müssen alles Mögliche auf HighLoad-Blöcke übertragen. Vor allem, wenn Sie keine sehr praktische Inhaltsverwaltung über das Admin-Panel benötigen. Und es ist besser, Ihre Tabellen und Lösungen im Allgemeinen zu entwerfen. Dies gilt insbesondere für automatisierte Integrationen.

    d. Cachen Sie dieselben Daten für denselben Treffer.

    Ich erkläre es an einem Beispiel. Angenommen, Punkte aus dem Treuesystem werden auf der Seite angezeigt. Sie werden sowohl am Anfang der Seite als auch am Ende angezeigt. Um während des Downloadvorgangs nicht zwei Anfragen zu stellen, können Sie nur die erste stellen. Als nächstes müssen die Punkte auf PHP-Ebene zwischengespeichert und dann aus dem Cache im RAM abgerufen und unten auf der Seite angezeigt werden. Auf diese Weise kürzen wir die Anfrage und reduzieren die Seitenwiedergabezeit.

    e. Veraltete Daten archivieren.

    Wenn Sie Daten aus dem Jahr 2015 haben und im Jahr 2022 leben, sind diese Daten möglicherweise veraltet. Es ist ratsam, sie woanders mitzunehmen und sie nur bei Bedarf zu besorgen.

    f. Berücksichtigen Sie Agenten und ihre zeitliche Begrenzung.

    Agenten sind Hintergrundaufgaben. Sie haben ein Zeitlimit von 10 Minuten. Wenn also der Teamleiter sagt: „Wir werden dieses Entladen auf dem Agenten durchführen, der Millionen von Datenzeilen enthält“, ist das eine schlechte Idee. Wie Sie sicherstellen, dass der Upload nicht ständig abstürzt, erkläre ich Ihnen weiter.

So beschleunigen Sie auf Datenbankebene

  1. Getrennte Datenbanken und Anwendung auf verschiedenen “Maschinen”.

In einer idealen Welt hat die Arbeit von Bitrix und PHP nichts mit den Ressourcen zu tun, die Datenbanken verwenden. Sie verteilen also die Last auf diese Teile des Systems.

  1. Verwenden Sie Indizes in Datenbanken.

Indizes sind Daten aus Tabellen, sortiert nach den spezifischen Spalten, auf denen der Index aufgebaut ist. Dank ihnen funktioniert die binäre Suche in der Datenbank. Einfach ausgedrückt, die Suche erfolgt nicht in jeder Zeile. Stattdessen teilt das System die Tabelle in zwei gleiche Teile. Blick nach links, Blick nach rechts. Wenn links nicht gefunden wird, dann rechts. Die rechte Seite wird auch halbiert usw.

Wenn die Daten in der Tabelle viel häufiger aktualisiert/erstellt/gelöscht als gelesen werden, sollten Indizes nicht verwendet werden. Diese Option ist geeignet, wenn die Website Nachrichten mit Filterung enthält. Das Filtern mit Indizes wird schneller.

  1. Replikation verwenden.

Die Replikation ist ein Mechanismus zum Erstellen von Kopien einer Datenbank, die mit dem Original synchron gehalten werden. Es gibt zwei Arten von Kopien: Master und Slave. Wenn die Kopie Master ist, können wir darin sowohl schreiben als auch lesen. Und wenn Slave – nur lesen. Änderungen vom Master werden auf alle Kopien repliziert. Dieser Mechanismus ist DBMS-seitig implementiert, es muss nichts programmiert werden.

Dies ist nützlich, wenn Sie Analysten oder Systeme auf der Clientseite haben, die die Daten in Ihrer Datenbank lesen möchten. Sie können eine separate Slave-Replik nur für Analysten erstellen. Sie werden komplexe Anfragen stellen, die die gesamte Basis fallen lassen können. Aber es fällt nur ihnen zu.

  1. Verwenden Sie Partitionen.

Partitionen sind hilfreich, wenn Sie eine große Tabelle im Projekt haben. Partition ist das Prinzip, eine Tabelle basierend auf einer Art Filter zu teilen. Zum Beispiel nach Datum. Wenn die Tabelle sehr groß ist, hilft dies, die Last zu verteilen und die Fehlertoleranz zu verbessern. Dieser Mechanismus ist auch auf der DBMS-Seite implementiert.

  1. Sharding anwenden.

In diesem Fall ist die Arbeit eines Programmierers erforderlich. Sharding ist eine Load-Balancing-Option. Es ist Partitionen ähnlich: Es teilt auch Tabellen nach einer gewissen Logik.

Beispielsweise können Benutzerfotos geteilt werden. Alle Fotos von ungeraden Benutzern gehen zu einem Shard, und alle Fotos von geraden Benutzern gehen zu einem anderen.

So beschleunigen Sie ein Projekt auf Cache-Ebene

Der Cache wird benötigt, um die Datenbanken zu entlasten. In Bitrix „out of the box“ gibt es verschiedene Arten von Caches. Ich werde die Vor- und Nachteile der beliebtesten auflisten. Aber ich betone gesondert: Alle diese Lösungen entladen die Datenbank. Dies ist ihre Hauptfunktion.

  1. Datei-Cache.

Vorteile

Minuspunkte

Das Volumen ist nicht begrenzt: Wenn Ihre Festplatte ein Terabyte groß ist, wird sie mit Cache gefüllt, bis Sie sie vollständig verstopfen.

Der langsamste aller Typen.

Persistent: Wenn eine Art „Maschine“ abstürzt, gehen die zwischengespeicherten Daten nicht verloren – da sie auf der Platte waren, liegen sie weiter.

Erzeugt eine Last auf dem gleichen Dateisystem, weil es auf der Festplatte liegt.

  1. Zwischenspeicher.

Vorteile

Minuspunkte

Sehr schnell.

Non-persistent: arbeitet im RAM – wenn die “Maschine” abstürzt, geht der Cache verloren.

Begrenzt durch die dafür zugewiesene RAM-Menge.

  1. Redis.

Diese Lösung funktioniert auch im RAM. Es kann für schnelle Operationen verwendet werden. Beispielsweise zum Speichern von Sitzungen oder zur Autorisierung durch Dienste von Drittanbietern, Speichern von Token, die von einem anderen System ausgestellt wurden.

Vorteile

Minuspunkte

Schnell.

Kleines Volumen.

Kann persistent sein: Es kann entweder als persistent oder nicht persistent konfiguriert werden. Aber wenn es hartnäckig ist, dann arbeitet es langsamer.

Eine andere Möglichkeit besteht darin, den Cache aufzuwärmen.

Es eignet sich in Fällen, in denen große Mengen an Cache für ein Projekt gesammelt werden können. Nehmen wir an, er geht in Städte – jede Stadt hat ihren eigenen Cache. Dadurch erhöht sich sein Volumen. Wenn Sie etwas bereitgestellt haben, das zurückgesetzt werden muss, können Sie eine manuelle oder automatische Cache-Aufwärmung implementieren.

Manuell: Starten Sie nach dem Zurücksetzen des Caches den Tester und er ändert die Städte; Sie können nur die wichtigsten ändern, da sie den größten Durchfluss und die größte Belastung haben.

Automatisiert: Sie können es an CI / CD hängen und einfach eine Art Funktionstests schreiben, die nach der Bereitstellung laufen und langsam die Städte wechseln und den Cache sammeln.

Wie Sie die Integration mit anderen Systemen beschleunigen können

Zunächst spreche ich von Punkt-zu-Punkt-Integrationen: REST, SOAP. Sie funktionieren einfach und übersichtlich: Ein System hat eine Anfrage gesendet, es wartet. Das zweite System akzeptierte die Anfrage, verarbeitete sie und gab die Antwort zurück. Das sendende System hörte auf zu warten, verarbeitete die Antwort und ging weiter.

Ein wichtigeres Thema sind Nachrichtenbroker und Warteschlangenmanager. Wir können sie anstelle von REST und SOAP verwenden. Beispiele für Message Broker sind Kafka, RabbitMQ. Folgendes erreichen sie:

Das System sendet eine Anfrage an den Makler und geht dann seiner Arbeit nach – die Antwort holt es im Hintergrund ab. Das System füllt mit dieser Anfrage keinen Speicher: Auf seiner Seite gibt es einen Handler, es ist auch ein Verbraucher, der die Antworten einzeln liest und verarbeitet.

  • Liefergarantie.

    Wenn Ihr System im Fall von REST eine Anfrage sendet und das zweite System ausgefallen ist, erhält der Benutzer einen 500-Fehler. Bei Brokern warten Sie immer auf eine Antwort von einem anderen System. Außer wenn Ihr Makler lügt. Aber das ist ein kritisches Problem – jetzt reden wir nicht darüber.

  • Reduzierung der Last auf der Sende- und Empfangsseite.

    Wenn Sie einen “Punkt – Punkt” haben, ist das System schwieriger. Beispielsweise haben 5 Millionen Benutzer gleichzeitig auf die Website zugegriffen und dieselbe Integrationsaktion ausgelöst. Ihr System wartet auf 5 Millionen Antworten. Ein anderes System verarbeitet 5 Millionen Anfragen. Der Broker nimmt Anfragen entgegen und gibt schnell Antworten. Er schreibt die Anfrage auf, gibt sie an ein anderes System weiter. Dort liest und verarbeitet der Konsument eine Nachricht im Hintergrund. All dies, ohne Ressourcen für 5 Millionen Anfragen zu verbrauchen.

  • Beschleunigung konstanter und zahlreicher Hintergrundaktionen des gleichen Typs.

    Wenn Sie in Ihrem Projekt viel anmelden müssen, die Anzahl der Besucher und Aufzeichnungsdateien wächst, kann dies alles an einen Makler übertragen werden. Das System ist wie folgt: Ihr Protokoll wird zuerst in den Broker geschrieben, und dann gibt es in Ihrem System einen Verbraucher, der vom Broker liest und mit Protokollen in den Speicher schreibt, aber nicht so viel Last erzeugt.

  • Lösen lang andauernder Hintergrundaufgaben.

    Wenn beispielsweise mehr Ereignisse für das Projekt generiert werden, als der Agent gleichzeitig verarbeiten kann, stürzt der Agent ab. Im besten Fall hat es einfach keine Zeit, die Warteschlange der eingehenden Bewerbungen zu bearbeiten. Einfacher ist es bei Maklern: Anträge werden an diese weitergeleitet und dann zeitlich unbegrenzt an anderer Stelle bearbeitet.

So beschleunigen Sie auf Dateisystemebene

Das Dateisystem funktioniert wie eine Wissensbasis: Es verfügt über Lese- und Schreiboperationen. Es ist wichtig, diesen Indikator zu überwachen und auf jeder spezifischen „Maschine“ zu reduzieren. Es gibt zwei Parameter, auf die Sie achten sollten:

  1. Statik wird minimiert und optimiert.

Statische Inhalte werden bei jeder Anfrage angefordert, es sei denn, sie wurden im Browser zwischengespeichert. Solche Inhalte umfassen CSS, JS, Standardbilder wie Firmenlogos. Idealerweise sollten sie irgendwo minimiert, optimiert und entfernt werden – zum Beispiel in einem CDN.

  1. Dynamische Inhalte und Medien im S3-Speicher.

    S3-Speicher ist ein Cloud-Speicher, der garantiert, dass Ihre Daten verschenkt, gespeichert, nicht verloren gehen usw. Damit entlasten Sie das Dateisystem: Beim Rendern einer Seite im Browser werden Dateien aus dem Speicher gezogen und nicht von Ihrem Server.

Diese Empfehlungen machen Ihr System schneller und fehlertoleranter. Entwickler verwenden sie bei ihrer Arbeit – aber es ist nützlich für das gesamte Team, sie zu kennen. Wenn es das nächste Mal so aussieht, als ob Ihr Projekt auf Bitrix langsam läuft, fragen Sie den Teamleiter, ob er alle Beschleunigungsmethoden verwendet hat.

Wenn Sie Fragen haben, stellen Sie sie in den Kommentaren. Ich bin immer noch verbunden!

Similar Posts

Leave a Reply

Your email address will not be published.