Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. General
Code

Achtung Entwickler: NewRelic ist Ihre Geheimwaffe

by
Length:LongLanguages:

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Während der Titel dieses Artkels wie ein Klischee klingt, das in den Eingeweiden der PR-Hölle ausgebrütet ist, meine ich es ernst, wenn ich sage, dass NewRelic Ihre Geheimwaffe ist.

In diesem Artikel werde ich auf die allgemeinen Aspekte der Leistung von Webanwendungen eingehen und dann zeigen, wie NewRelic die Verwaltung sehr einfach macht.

In den fast sechs Jahren, in denen ich bei Envato gearbeitet habe - zuvor habe ich die Reihe von Marktplätzen entwickelt und verwaltet und derzeit die Entwicklung des Tuts+-Blog-Netzwerks verwaltet - habe ich NewRelic verwendet, um die Kosten niedrig zu halten, Leistungsprobleme von klein bis klein zu verbessern und zu beheben die großen und potenziellen Katastrophen abzuwenden.

Wenn Sie mit diesem Thema noch nicht vertraut sind oder derzeit keine Website für jemanden in irgendeiner Funktion verwalten, sollten Sie keinen Stress verursachen. Dieser Artikel wird weiterhin nützlich sein. Sie wissen nie, wann dieses Wissen Ihren Speck retten könnte, und ich würde wetten, dass dies unvermeidlich ist - es sei denn, Sie entscheiden sich natürlich dafür, das hypothetische Entwicklertuch zu werfen und Astronaut oder Rancher zu werden.


NewRelic in 20 Sekunden

Bevor ich mich auf eine einigermaßen lange Tirade über die Leistung von Webapplikation einlasse, ist es sinnvoll, schnell zusammenzufassen, was NewRelic ist, bevor Sie zu Reddit oder ähnlichem wechseln.

NewRelic ist ein Managed Service (SaaS), den Sie in Ihre Webanwendung "einbinden" und der Leistungsmetriken Ihrer Live-Webanwendung sammelt und aggregiert.

Die darin enthaltenen Informationen können Ihnen helfen, Antworten auf folgende Fragen zu finden: Ist meine Website langsam? Für wen ist es langsam? Wo ist es genau langsam? Benötigen wir mehr oder größere Server? Was können wir tun, um die Dinge zu verbessern?

Diese Fragen und ihre Antworten sind häufig entscheidend für den Erfolg oder Misserfolg Ihrer Webanwendung. Wenn Sie noch nie Leistungsmetriken aus Ihrer Live-Web-App erfasst haben, werden Sie buchstäblich mit verbundenen Augen ausgeführt. Irgendwann wirst du gegen eine Wand stoßen!

Bevor ich Sie auf eine Tour durch die Funktionen von NewRelic mitnehme, muss ich die Leistung von Webanwendungen definieren. Lassen Sie uns anfangen.


Was genau ist die Leistung von Webapplikation?

Bei der Front-End-Leistung geht es um "wahrgenommene" Leistung.

Ich teile die Leistung von Web-Apps gerne in zwei konzeptionelle Teile auf: Front-End-Leistung und Back-End-Leistung. Während die beiden Bereiche tatsächlich Überkreuzungen aufweisen und sich gegenseitig beeinflussen, ist es hilfreich, eine Unterscheidung zu treffen.

In erster Linie können Sie sich die Front-End-Leistung als Bereiche vorstellen, die die wahrgenommene Leistung betreffen, z. B. wie lange es dauert, bis eine Seite für einen Endbenutzer vollständig gerendert ist. Zu den Variablen, die sich auf diese Art der Leistung auswirken, gehören:

  • Wie groß sind Ihr HTML, CSS, JavaScript und Ihre Bilder?
  • Wie viele HTTP-Anforderungen werden an Server gesendet, um alle diese Assets abzurufen?
  • Wie sind sie auf der Seite organisiert, um die wahrgenommene Leistung zu beeinflussen, unabhängig davon, ob der Browser eines Benutzers Assets erneut herunterladen muss, unabhängig davon, ob sie identisch sind oder nicht?

Ich habe nur gesehen, dass Webanwendungen und Websites aufgrund von Missmanagement des Backends "umfallen".

Die Back-End-Leistung umfasst eine Art Programmiersprache, in der Ihr Code ausgeführt wird (d. h. PHP, Ruby), und eine Art Datenbankserver (d. h. MySQL). Im Allgemeinen stellen die meisten Webanwendungen HTML-Dokumente zusammen, die an den Browser Ihres Benutzers gesendet werden sollen, und bestehen aus Daten, die aus einer oder mehreren Datenbanken abgerufen werden - oder sogar aus einem oder mehreren externen Diensten (wie der Twitter-API). In der Regel werden auch Serverressourcen (wie CPU-Auslastung, Speichernutzung, Festplatten-E/A) in diese Kategorie eingeordnet, da der auf Ihrem Server ausgeführte Code (nicht im Browser Ihres Benutzers) diese Ressourcen beeinflusst.

Warum ist diese Unterscheidung so wichtig? Denn meiner Erfahrung nach habe ich festgestellt, dass eine Verwechslung zwischen beiden zu unnötigen Anstrengungen führt, wenn versucht wird, Leistungsprobleme zu verbessern. Ich habe Arbeiten an der Front-End-Leistung angeschlagener Websites miterlebt, als das eigentliche Problem das Backend war. Andererseits habe ich beobachtet, wie sich die Leute auf die Back-End-Optimierung konzentrierten, wenn das Problem im Front-End lag. Es ist wichtig, dass Sie den Unterschied verstehen und schätzen.

Diese beiden Themen können für sich genommen ziemlich tief und kompliziert sein, und es ist ein Thema für eine völlig andere Reihe von Beiträgen. Während ich mich in meiner gesamten beruflichen Laufbahn entschieden auf Back-End-Leistung spezialisiert habe, habe ich nur gesehen, dass Webanwendungen und Websites aufgrund von Missmanagement des Back-End "umfallen".


Dreieinhalb Ansätze zur Leistungsverwaltung

Es gibt drei Möglichkeiten, wie Benutzer die Leistung ihrer Webanwendungen verwalten können:

  1. Schreiben Sie Code, stellen Sie ihn bereit und hoffen Sie auf das Beste.
  2. Schreiben Sie Code, raten Sie, welche Bereiche zu Engpässen werden, messen und optimieren Sie sie im Voraus, setzen Sie sie ein und hoffen Sie auf das Beste.
  3. Schreiben Sie Code, messen Sie die Live-Anwendung mit etwas wie NewRelic und korrigieren und optimieren Sie sie entsprechend.

Der erste Ansatz ist 100% reaktionär. Wenn Sie diese Methode anwenden, wissen Sie nur, wenn Ihre Web-App ausfällt oder eine schlechte Leistung erbringt, wenn Ihre Kunden es Ihnen mitteilen (falls sie es Ihnen jemals mitteilen).

Der zweite Ansatz ist wesentlich ausgereifter; Die Entwickler verhindern Probleme und versuchen, sie im Voraus zu lösen. Dies ist zwar bewundernswert, aber die Möglichkeit, wichtige Ressourcen für die Optimierung des falschen Bereichs aufzuwenden, und das Fehlen eines fortlaufenden Feedbacks liefern nur wenige Fakten darüber, was in der Live-Umgebung wirklich vor sich geht.

Der dritte Ansatz ist die fast ideale Situation. Durch die Überwachung einer Live-Webanwendung können Sie die Leistung verschiedener Dinge überprüfen, je nachdem, was Ihre Kunden tatsächlich tun. Sie können Code schreiben und sofort Feedback erhalten, wie gut (oder nicht) er funktioniert.

Der ideale Ansatz

Der ideale Ansatz besteht darin, dem dritten zu folgen und ein gesundes Maß des zweiten anzuwenden.

Es tut nicht weh, die Leistung im Voraus zu betrachten. Es ist unendlich nützlicher, echte Metriken zu haben. Das alte Programmier-Sprichwort "vorzeitige Optimierung ist die Wurzel allen Übels" mag hier gelten, obwohl Axiome in der Programmierung wie im Leben selten mehr als Halbwahrheiten sind.


Messung & Management: Ein Balanceakt

Es gibt keine echte Methode zur Verwaltung der Leistung Ihrer Webanwendung.

Egal, was jemand sagt (einschließlich mir!), Es gibt keine echte Methode, um die Leistung Ihrer Webanwendung zu verwalten. Abhängig von Ihrer App und Ihren Kunden gibt es unterschiedliche Ansätze und Techniken. Eines bleibt jedoch konstant: Man muss messen.

Also, was messen Sie? Auch hier gibt es keine wahre Liste, aber es wird immer eine gemeinsame Anzahl von Metriken geben, die es wert sind, gemessen zu werden. Beispielsweise:

  • Die Anzahl der Anwendungsanforderungen im Laufe der Zeit.
  • Die Wanduhr-Zeitanforderungen werden abgeschlossen.
  • Die CPU-Auslastung Ihrer Server im Laufe der Zeit.
  • Die Festplatte liest, schreibt und nutzt im Laufe der Zeit (bekannt als Disk IO).
  • Die Anzahl der Datenbankabfragen und die Zeit, die für die Ausführung benötigt wird.
  • Abfragen werden in Ihrer Datenbank ausgeführt, deren Abschluss mehr als zwei Sekunden dauert (langsame Abfragen).
  • Eingehende und ausgehende Bandbreite im Laufe der Zeit.

Diese Liste ist zwar sicherlich nicht vollständig, bietet jedoch einen umfassenden Einblick in das Verhalten Ihrer Web-App, insbesondere wenn Sie sie noch nie zuvor überwacht haben.

Sobald Sie diese Art von Daten haben, beginnt bei der Verwaltung Ihrer Webanwendung der ganze Spaß. Möglicherweise stellen Sie fest, dass Sie nach dem Entfernen eines Engpasses in Ihrer Datenbank (möglicherweise einige langsam ausgeführte Abfragen) einen anderen verfügbar machen, wenn mehr Serverressourcen freigegeben werden. Es ist wirklich ein Balanceakt.

Letztendlich sieht ein erfolgreiches Management ungefähr so aus: Sie können die Effizienz Ihres einzelnen Servers verdoppeln und so den Kauf um eine Sekunde verzögern. In größerem Maßstab können Sie Ihre Serverfarm um den Faktor 50% reduzieren, und in ausreichendem Umfang kann dies ernsthaftes Geld bedeuten. Auf der leichteren Seite können Sie Ihren Kunden einfach eine gute Servicequalität ohne plötzliche Überraschungen bieten.


NewRelic: Ihre Geheimwaffe

Nachdem wir uns nun mit den "Was" - und "Wie" -Bits befasst haben, werfen wir einen Blick auf NewRelic. Es war einmal in Software-Land, als Sie Ihre eigene Messung in eine App rollen mussten - wenn Sie überhaupt gemessen haben (was genauso viel Arbeit bedeuten kann wie das Schreiben Ihrer App selbst). Mit NewRelic können Sie den Agenten einfach an Ihre Ruby, PHP, .NET oder Python-Applikation anschließen und sofort mit der Erfassung realer Daten beginnen.

Nachdenklich ist ihr Produkt in drei Kernregionen aufgeteilt:

  • Endbenutzerüberwachung (Frontend, Browser)
  • Anwendungsüberwachung (Backend, Ihr Code)
  • Serverüberwachung (Backend, die Server)

Schauen wir uns die einzelnen in der Reihenfolge an, in der sie historisch veröffentlicht wurden.

Das allererste von NewRelic eingeführte Feature war die Anwendungsüberwachung. Es verfolgt und meldet 'Anfragen pro Minute' (auch bekannt als RPM), durchschnittliche Antwortzeiten dieser Anfragen und speichert diese Daten für Sie zur Analyse. Dies ist besonders nützlich, um Trends im Datenverkehr im Laufe der Zeit zu erkennen (z. B. wird meine Website langsamer, wenn unsere Seitenaufrufe zunehmen?).

Darüber hinaus erhalten Sie über die "langsamen Transaktionsspuren" eine Liste der letzten Anfragen von echten Benutzern, die unverhältnismäßig langsam waren. Wenn Sie diese überprüfen, können Sie einen Drilldown durchführen und feststellen, warum eine Anfrage so lange gedauert hat. So erhalten Sie die Informationen, die Sie zur Verbesserung benötigen.

Durch die Endbenutzerüberwachung erhalten Sie einen Einblick in die Darstellung Ihrer Website in den Browsern der Benutzer. Es unterteilt die Gesamtzeit in Blöcke, basierend auf Netzwerkzeit (wie lange das Herunterladen von Assets gedauert hat), DOM-Rendering (wie lange Ihr Browser damit verbracht hat, Ihren HTML-Code herauszufinden), Laden von Bildern (wie von Ihrem Webserver oder einem CDN bereitgestellt). .

Eine nette Funktion der Endbenutzerüberwachung ist, dass sie Ihnen zeigt, wie gut oder schlecht Ihre Anwendung für Benutzer in verschiedenen Ländern funktioniert. Zum Beispiel sind vielleicht 50% Ihrer Kunden in Großbritannien ansässig, während sich die anderen 50% in den USA befinden. Möglicherweise stellen Sie fest, dass die Front-End-Leistung in Großbritannien aufgrund der physischen Entfernung zu Ihren Servern nicht allzu hoch ist. Die Einführung eines CDN oder eines Servers in Großbritannien verbessert deren Erfahrung.

Das Beste daran, NewRelic zu verwenden und basierend auf seinen Daten Maßnahmen zu ergreifen, ist, dass Sie nach einer beliebigen Anzahl von Änderungen sofort überprüfen können, ob die Änderungen wirksam waren oder nicht!

Das letzte Puzzleteil und die neueste Überwachung, die NewRelic eingeführt hat, sind die Serverüberwachungstools. Ich habe immer bemerkt, dass Sie die Ressourcen Ihres Servers mit den Antwortzeiten Ihrer Webanwendung korrelieren müssen, um ein umfassenderes Bild der Effizienz zu erhalten. Möglicherweise haben Sie hervorragende Antwortzeiten, aber Sie müssen möglicherweise auch unnötigerweise erhebliche Serverressourcen opfern, um diese bereitzustellen.

Ich habe zum Beispiel Apps mit hervorragenden YSlow-Ergebnissen gesehen, aber absolut keinen Spielraum für mehr Verkehr - selbst auf erheblichen Mengen an Hardware!

Ich hoffe, Sie beginnen jetzt zu sehen, wie wertvoll diese Art von Informationen ist!


NewRelic installieren

Sie müssen mindestens auf einem VPS sein und Wurzel-Zugriff für den PHP-Agenten haben.

Eine meiner einzigen Kritikpunkte an NewRelic ist, dass die Installation für einige Benutzertypen nicht einfach ist. Wenn Sie ein Ruby on Rails-Programmierer sind, werden Sie es ziemlich einfach finden, da es ein einfaches Rails-Plugin ist.

Wenn Sie ein PHP-Entwickler sind und nicht gerne in der Befehlszeile herumspielen, wird die Installation schwierig, da es sich um eine PHP-Erweiterung handelt und die Installation eines Daemons erforderlich ist, der neben Ihrem Webserver ausgeführt wird. Einige PHP-Cloud-Plattformen wie PHPFog bieten jedoch eine sofort einsatzbereite NewRelic-Integration.

Dies ist in meinen Augen unglücklich, da es für die meisten Menschen eine Hürde ist. Ich hoffe, NewRelic sucht derzeit nach einer Partnerschaft mit mehr Standard-Webhosting-Anbietern, damit deren Produkt einem breiteren Publikum zugänglich ist. Derzeit gibt es buchstäblich kein solches Werkzeug auf dem Markt, und sie sollten es allen PHP-Entwicklern leicht machen, es zu verwenden.

Wenn Sie vorhandenes Hosting verwenden, müssen Sie sich mindestens auf einem VPS befinden und über Wurzel-Zugriff für den PHP-Agenten verfügen. Es ist ein kurzer Prozess, einen VPS von einem Anbieter wie Linode hochzufahren und Apache, PHP, MySQL und NewRelic zu installieren. Dies erfordert jedoch etwas Komfort und Know-how in einer Shell.

Der beste Weg, um mit PHP und NewRelic zu beginnen, besteht darin, ein Werkzeug wie Oracle VirtualBox zu verwenden, Linux zu installieren, Apache und PHP einzurichten und dann den Agenten zu installieren. Dann können Sie NewRelic zumindest in Ihrer lokalen Entwicklungsumgebung verwenden.

Ich persönlich habe noch keine Erfahrung mit dem Python-Agenten und habe aus dritter Hand gehört, dass die .NET-Komponente kinderleicht in Betrieb genommen werden kann.


Wie verwendet Envato NewRelic?

Envato verwendet NewRelic seit 2008. Wir haben es in den folgenden Produkten mit guten (und manchmal interessanten) Ergebnissen verwendet:

Die Marktplätze

Zunächst entdeckten wir an unerwarteten Stellen auf den Marktplätzen ungefähr drei große langsame Stellen. Wir haben herausgefunden, was unsere am häufigsten gehandelten Anfragen waren, und uns darauf konzentriert, sie speziell zu optimieren. Wenn 80% unserer Zeit an einem Ort verbracht wurde, erhöhte sich die Kapazität doppelt so schnell und wir konnten keine Mittel mehr für Hardware bereitstellen. Wir haben ungewöhnlichen Datenverkehr (wie Spammer und Hacker) entdeckt, der es uns ermöglicht, früher als später Vorsichtsmaßnahmen zu treffen, um so das Erlebnis für unsere echten Kunden zu verbessern. Wir verwenden es täglich, um die Leistung unseres gesamten neuen und vorhandenen Codes zu überwachen.

Die Tuts+ Blogs

In den Jahren 2009-2010 hatte das Blog-Netzwerk von Envato aufgrund einer Reihe von Architekturproblemen ernsthafte Stabilitätsprobleme. Es war meine Aufgabe, einzugreifen und die Probleme zu lösen. Nach einer Architekturanalyse und einer Neugestaltung haben wir den (dann Beta!) PHP-Monitor angeschlossen. Wir haben viele, viele unerwünschte Dinge entdeckt!

  • 20% der Anfragen waren Kanalanrufe (die zwischengespeichert oder an FeedBurner gesendet werden sollten)
  • 3 SQL-Abfragen dauerten routinemäßig länger als 5 Sekunden, um Ergebnisse zurückzugeben
  • Langjährige WP-Cron-Aufgaben banden unseren Web-Arbeiterpool zusammen
  • Die Erstellung von 404 Seiten dauerte mehr als 1 Sekunde!

Im Laufe des Jahres 2010-2011 haben wir die Probleme schrittweise gelöst, bis sie mehr oder weniger alle gelöst waren. Bis heute überwachen wir die PHP-Blogs mit NewRelic. Und jetzt ist das Blog-Netzwerk zum Glück schön und stabil.

Das Tuts+ Premium Redesign

Als wir das Tuts+ Premium-Redesign starteten, verwendeten wir NewRelic, um Leistungsprobleme vor dem eigentlichen Start auf den tatsächlichen Servern zu debuggen, auf denen sie ausgeführt werden sollten. Dies beseitigte die Angst vor einer Katastrophe beim Start. Wir überwachen weiterhin die Leistung der Website mithilfe von NewRelic.

In jeder wichtigen Anwendung von Envato ist heute ein NewRelic-Agent angeschlossen. Dies hat uns ehrlich gesagt viel Zeit und Geld gespart und es uns ermöglicht, unseren Benutzern und Kunden Servicequalität zu bieten.


Andere Werkzeuge, die Envato verwendet, um NewRelic zu erweitern

Es wäre nicht fair, die anderen Werkzeuge, mit denen wir unsere Anwendungen bearbeiten, nicht zu erwähnen. Wir verwenden ScoutApp derzeit für eine feinkörnigere Serverüberwachung (es unterstützt vom Benutzer bereitgestellte Plugins, damit wir bestimmte Dienste wie HAProxy, Nginx usw. überwachen können). Wir verwenden auch AirBrake, das unsere Fehler in unseren Ruby on Rails-Anwendungen protokolliert und aggregiert.

Zuletzt haben wir einige unserer speziellen, benutzerdefinierten Werkzeuge eingeführt, die beispielsweise Cache-Treffer, Backend-Anforderungen, Einnahmen, Anmeldungen und Benachrichtigungen überprüfen, wenn eine signifikante Abweichung von den Trends auftritt. Zum Beispiel kann das Anhalten oder Sinken von Einnahmen bedeuten, dass unsere Zahlungsintegration unterbrochen ist. Eine Änderung der Anmeldungen bedeutet, dass wir möglicherweise von Spammern angegriffen wurden, die Geister-Accounts für die spätere Verwendung erstellt haben.


Einpacken

Wenn Sie an einer geschäftskritischen Webanwendung arbeiten oder eine nicht ganz funktionierende App reparieren müssen, ist NewRelic für Sie von unschätzbarem Wert.

Wenn Sie Fragen haben, fragen Sie in den Kommentaren nach und ich werde mein Bestes tun, um sie zu beantworten. Insbesondere wenn Interesse an einem Screencast zum Einrichten eines VPS oder einer VM mit NewRelic besteht, können wir sicher einen für Sie arrangieren.

Werde ein Programmierer-Superheld. benutze NewRelic!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.