LAMP auf Raspberry Pi 2 - was ARM CPU + USB kann

Ich werde sofort eine Reservierung vornehmen. Ziel ist es nicht, die maximale Leistungsfähigkeit des Systems herauszufinden, sondern die grundlegende Leistung moderner Mikrocomputer als vollwertige Webserver herauszufinden und die Wettbewerbsfähigkeit in Bezug auf Shared Hosting zu bewerten. Daher werden in diesem Artikel die Probleme der Optimierung und der Untersuchung der maximal zulässigen Last nicht behandelt. Stattdessen wird an vorhandenen Standorten ein Experiment mit echten Besuchern durchgeführt.

Einführung


Wahrscheinlich haben viele, die mit den Mikrocomputern essbarer Familien (Himbeere, Banane, Orange ...) vertraut sind, darüber nachgedacht, den Anwendungsbereich zu erweitern. Ursprünglich für Smart-Home-Systeme und Robotik entwickelt, werden sie bei gleichbleibender Größe immer schneller. Ein geringer Stromverbrauch bei erhöhter Prozessorleistung macht sie attraktiv für die potenzielle Verwendung als Webserver. Wählen wir ein dafür geeignetes Modell.

Warum ist das Raspberry Pi 2 Modell B?


Da der schwächste Punkt solcher Systeme aus Hosting-Sicht der Prozessor ist, der eine sehr geringe relative Leistung aufweist (dazu später mehr), werden wir versuchen, einen Webserver mit einer Budgetoption zu organisieren, der sich jedoch als leistungsfähig genug herausstellen kann Unsere Aufgabe ist das Raspberry Pi 2 Modell B. Es verfügt über einen 4-Kern-Prozessor, der im normalen Modus ohne Kühlung bei 900 MHz arbeitet, und die Möglichkeit, diese Frequenz von 700 auf 1200 MHz zu ändern. Wir werden die Taktfrequenz nicht erhöhen, wir beachten nur, dass Sie zum „Übertakten“ einen Kühler und möglicherweise einen Lüfter benötigen. Da das Raspberry Pi 2 Modell B heute den produktivsten Prozessor unter den "Klassenkameraden" hat, wählen wir ihn zum Testen aus.

Technische Merkmale der betreffenden Plattform


Zentralprozessor

Wir haben einen ungewöhnlichen Prozessor, die RISC-Familie. Kurz gesagt, wir können sagen, dass der Befehlssatz für einen solchen Prozessor viel kleiner ist als der von "normalen", aber er führt einfache Befehle sehr schnell aus. Um komplexe Anweisungen auszuführen, benötigen solche einfachen Befehle jedoch viel. Daher zykliert der Takt mehr. Wenn es also jemandem so vorkam, als wären 4 Kerne mit jeweils 900 MHz mehr als genug für einen Webserver, sollten Sie eine Änderung vornehmen - Broadcom BCM2836 Quad-Core Cortex A7 für unsere Aufgabe wird nicht schneller sein als der alte Pentium 300-400 MHz. Richtig, 6-mal überholt das vorherige Single-Core-Modell auf dem Raspberry Pi und 1,9-mal vor dem Dual-Core-Klassenkameraden auf dem Banana Pi M2 (der, obwohl durch das Vorhandensein von SATA und Gigabit-Ethernet beworben, aufgrund seines Prozessors für den Webserver viel weniger geeignet ist )Gerade wegen der Langsamkeit des Zentralprozessors beobachten wir einen Rekordverbrauch an Mikrocomputern. Nach den verfügbaren Daten verbraucht Raspberry Pi 2 bis 3 Watt, 4 Watt bei Spitzenlast und 1 Watt im Leerlauf. Nun, durchschnittlich 2-3 Watt (5 V, 0,4 bis 0,6 A) für das gesamte System, mit Ausnahme der Leistung von Speichermedien - dafür lohnt es sich, im Bereich des Unternehmens- oder Heim-Webhostings zu kämpfen, was es wirtschaftlich rentabel machen kann Standpunkte.was kann es wirtschaftlich vorteilhaft machen.was kann es wirtschaftlich vorteilhaft machen.

Erinnerung

Der verwendete Speicher ist nicht der schnellste, es ist DDR2, aber es gibt eine ausreichende Menge an Speicher - 1 GB. Ich muss sagen, dass dies eine gute Menge für normale Webserver unter Linux ist.

Netzwerkschnittstelle

Für die Datenübertragung reicht eine 100-Megabyte-Netzwerkschnittstelle aus. Wir brauchen nichts anderes - das Informationsspeichersubsystem und der Prozessor können die hohe Last einfach nicht bewältigen .

Datenspeicher

Wir wenden uns einem sehr interessanten Punkt zu: Der integrierte Kartenleser ermöglicht es dem System, nur von diesem zu booten (es sei denn, Sie leiten den Bootloader um ...), und dies beschränkt in einer normalen Situation die Auswahl des Hauptträgers auf eine Micro-SD-Karte. Die gute Nachricht ist, dass sie bereits heute ein beträchtliches Volumen haben und schnell arbeiten können. Obwohl die Mängel bereits offensichtlich sind, ist es unwahrscheinlich, dass wir Website-Dateien, Datenbanken, Swap und Protokolle darauf aufbewahren möchten, um langsame Arbeit und vorzeitige Verkürzung der Lebensdauer des Betreibers zu vermeiden. Dazu haben wir ein anderes Medium auf dem USB-Bus. Dieser Ansatz erhöht nicht nur die Systemleistung, sondern bietet auch den Vorteil der Modularität. Es ist einfach, das Medium durch ein Ersatzmedium zu ersetzen und das gesamte Image zu sichern. Die Frage ist, was genau wir als externes Medium verwenden möchten - eine SSD-Festplatte, eine Festplatte oder eine schnelle Speicherkarte.Hier entscheidet jeder für sich, vieles hängt von der Art der gehosteten Seiten ab. Es ist zu beachten, dass der Raspberry Pi 2 den USB 2.0-Standard verwendet, der die Geschwindigkeit unserer Datenübertragung auf unser Dateisubsystem begrenzt.

In diesem Beispiel wird als externes Gerät eine relativ langsame Option für die Aufzeichnung in Betracht gezogen. Hierbei handelt es sich um einen USB-Kartenleser mit angeschlossener Lexar Professional-SD-Karte im Vollformat, mit dem Sie mit dieser Verbindung Daten mit nur etwa 15 MBit / s aufzeichnen können. Obwohl (im allgemeinen Fall) Mediengeschwindigkeiten über 100 Megabit zum Lesen und Schreiben für uns unwichtig sind, da die Kommunikation mit der Außenwelt durch diese Zahl begrenzt ist. Wenn Sie Festplattensubsysteme verwenden, sollten Sie deren Stromverbrauch berücksichtigen. Winchester 2,5 "verbraucht ~ 5 Watt und wird wahrscheinlich eine separate Stromversorgung benötigen. Sie sollten sich auch an die spezifische Organisation der Eingabe / Ausgabe an Raspberry über USB erinnern. Natürlich haben wir noch einen weiteren Engpass:

Funktionsblockdiagramm des Raspberry Pi 2 Modell B.

Also das Testmedium:

" Intern ": MicoSD 8Gb Klasse 10
Extern: SD 32 GB Klasse 10+ (UHS)

Installation und Zusammensetzung der LAMPE


Das System sollte einfach sein, aber die volle Funktionalität haben. Daher ist eine Anforderung nichts weiter, aber nur Apache wird sich hinter Nginx verstecken, da der Speicher dies zulässt.

Operationssystem

Minibian wird auf dem „internen“ Medium aus dem Image 2015-02-18-wheezy-minibian.img installiert.

Dies ist Debian 7.8 als Minimum für Raspberry. Wir reservieren, im Standard-Repository erwarten sie PHP nicht höher als 5.5 und Apache nicht höher als 2.2. Dies ist keine störende Einschränkung, aber für diesen Artikel ist es hilfreich, die Möglichkeit der Verwendung der neuesten Versionen zu prüfen. Um PHP 5.6.x und Apache 2.4.x zu installieren, die nicht im Standard-Repository enthalten sind, musste ich die Quelle für die 8. Version von Raspbian ändern. Das System hatte nach dem Upgrade von apt-get Version 8.0.

Apache

Version 2.4.10 (Raspbian). Gzip ist enthalten, alle am häufigsten verwendeten Module aus dem Standardpaket sind verbunden, einschließlich mod_rewrite, mod_cache ..., ohne die standardmäßig aktivierten.

Php

5.6.12-0 + deb8u1 (cli). Läuft in Apache als Prefork. Es gibt PHP-Curl, PHP-GD und andere beliebte Bibliotheken.

MySQL

5.5.44-0 + deb8u1 - (Raspbian).

Nginx

Nginx / 1.6.2. Nginx ist für die Statik verantwortlich. Gzip-Komprimierung ist enthalten.

Ich möchte Sie daran erinnern, dass alle Protokolle auf externe Medien geschrieben wurden, die MySQL-Datenbank vorhanden ist, der Austausch nicht deaktiviert ist, sondern für die gesamte Testzeit leer ist.

Als Hilfsdienstprogramme verwende ich PhpMyAdmin, htop, iostat und webmin. Exim4 ist installiert, jedoch nur zum Senden von Nachrichten aus Formularen. Wie Sie sehen können, ist unser Server recht modern und funktionsfähig. Ich werde die Fans des VESTA-Bedienfelds enttäuschen - leider unterstützt der Hersteller keine ARM-Prozessoren und wird dies in naher Zukunft nicht tun. Deshalb webmin.

Testen


Ich wollte nicht sofort synthetische Tests durchführen, da diese eher aus dem Bereich einer sehr weit entfernten Theorie stammen. In der Praxis hängt alles stark von der Art der gehosteten Sites, von der Lastverteilung nach Zeit, vom Kommunikationskanal, der Anzahl der Aufrufe, der Zeit der Besucher der Site ... sowie von den Einstellungen ab. Mit anderen Worten, ich schlage vor zu sehen, was sich tatsächlich auf bestehenden Websites herausstellt.

Die getesteten Websites basieren nicht auf einem CMS, sondern verwenden die Anzeige von Bildern aus der Datenbank auf dynamischen (PHP) Seiten, sodass MySQL sehr stark belastet werden kann. Es gibt jedoch überhaupt keine AJAX-Verbindungen. Da unser Hosting noch keinen Anspruch auf Professionalität erhebt, wurde es für den Test als ausreichend angesehen, 16 aktive Websites mit geringem Datenverkehr zu platzieren, von denen etwa fünf etwa 100 bis 200 Personen pro Tag sind, der Rest sind nicht mehr als 50 Besucher Zeit. Insgesamt etwa 800-900 Personen pro Tag, was in Bezug auf eine akzeptable Auslastung mit kostengünstigem Shared Hosting vergleichbar ist. Die Hälfte der Besucher fällt abends, die Hauptbesuche finden um 20-22 Uhr statt (~ 300 Personen in zwei Stunden, durchschnittlich 4 Aufrufe = 10 Aufrufe pro Minute, jeweils ~ 700 kb = 116 Kilobyte Verkehr pro Sekunde).Wir werden diese Zeit als "Hauptverkehrszeit" bezeichnen und gleichzeitig Tests durchführen. Es wird nur zwei Arten von Tests geben - Leistungsbewertung mit Diensten von Drittanbietern und einen Bericht von htop, iostat-Dienstprogrammen über die tatsächliche Arbeit.

1. Der Zeitpunkt der Erstellung und des Ladens von Seiten durch den Benutzer zu "Spitzenzeiten".

Wir verwenden nur zwei Hauptparameter - Seitengenerierungszeit und Seitenladezeit für zwei Seitentypen - "schwer" (schwer für den Prozessor, da viele Bilder von MySQL vorhanden sind, lange Erzeugung) und "leicht" (normale dynamische PHP-Seite). Wir werden jeden Test zehnmal wiederholen, um die Wahrscheinlichkeit eines zufälligen Ergebnisses zu verringern, und wir werden auch verschiedene Dienste verwenden.

Ich möchte Sie an die Geografie der Testserver und an ihre mögliche Arbeitsbelastung erinnern. Daher können die absoluten Ergebnisse stark variieren, dies ist normal. Ich habe wiederholte Messungen mit Unterbrechungen von 5-10 Minuten durchgeführt, um unterschiedliche Ladezeiten der Dienste zu ermitteln. Der Kanal der getesteten Himbeere ist Gigabit-Optik, Geographie ist Sibirien, 150 garantierte Megabit nach Moskau. Um zu überprüfen, ob der Server mehrere Verbindungen gleichzeitig bedienen kann, wurden an den folgenden Service-Standorten gleichzeitig Tests gestartet:

Leichte Seite (547 kb, ohne MySQL-Zugriff)

PingDom.com, Schweden

Ladezeit der Seite (46 Anforderungen): Minimum - 925 ms, Maximum - 1124 ms, Durchschnitt - 955 ms.

Google PageSpeed ​​Insights

Es gibt keine Beschwerden über Geschwindigkeit.

Sitespeed.ru

Gesamtseitenladezeit 3,9-4,2, Durchschnitt 4,0. Seitengenerierungszeit von 139 bis 157, durchschnittlich 145 ms. Deshalb hat Google keine Beschwerden - wir kommen in die zulässigen 200 ms.

`Heavy` Seite (843 kb, einschließlich 38 Bilder von 10-15 kb von MySQL)

PingDom.com, Schweden

Ladezeit der Seite (85 Anforderungen): Minimum - 946 ms, Maximum - 1001 ms, Durchschnitt - 973 ms.

Google PageSpeed ​​Insights

Es gibt keine Beschwerden über Geschwindigkeit.

Sitespeed.ru

Gesamtseitenladezeit 5,3-4,2, Durchschnitt 4,0. Seitengenerierungszeit von 158 bis 169, durchschnittlich 162 ms.

2. Bericht des Dienstprogramms htop

Wie erwartet hat Htop gezeigt, dass MySQL-Prozesse der Hauptverbraucher der CPU-Zeit sind. Sie "aßen" 98 Minuten ab dem letzten Tag der Prozessorzeit. Was nicht überrascht - die häufigen und „schweren“ Anfragen an die Basis wurden ursprünglich von uns angenommen. Wenn sich Bilder im Nginx-Cache befinden würden, hätten wir einen Leistungsgewinn, aber der Test ist interessant, da er die erhöhte Belastung von MySQL mit einem Rand modelliert, der übrigens für die meisten CMS typisch ist.

3. Bericht des Dienstprogramms iostat

Dieses Dienstprogramm zeigte durchschnittliche Lese- und Schreibgeschwindigkeiten auf Medien:
1. „Interne“ Medien (System) - durchschnittlich 0,87 kb / s, durchschnittlich 15,5 kb / s (wahrscheinlich aufgrund von Nginx-Caching gibt es etwas zu verbessern in Konfiguration).
2. „Externe“ Medien (Sites, Protokolle, Datenbanken) - 2,4 kb / s lesen und 3 kb / s schreiben (hier ist alles in Ordnung, das Lesen wird zwischengespeichert, Protokolle werden geschrieben).

4. CPU-Zuordnung

CPU-Zeitverteilung nach htop, Stichproben - genau zwei Arbeitstage (~ 1600 eindeutige Besucher, die gemäß Yandex-Metriken bedient werden):

mysql 6,8%
htop 1,8%
nginx 0,75%
apache2 <0,3%

Fast den Rest der Zeit ruhte der Prozessor.

Infolgedessen haben wir einen großen Spielraum für die freie Prozessorzeit, einen Spielraum für die Erhöhung der Prozessorfrequenz und einen Spielraum für die Geschwindigkeit der Aufzeichnungsmedien. Es stehen viele Optimierungen zur Verfügung, um sowohl Serverprogramme (z. B. den Nginx-Cache auf einem separaten Medium) als auch die Sites selbst zu konfigurieren. Alles in allem - ein gutes Potenzial zur Steigerung der Gesamtproduktivität.

Gesamt


Unserem virtuellen Besucher gefiel die Geschwindigkeit des Webservers auf dem Mikrocomputer, obwohl andere Besuche gleichzeitig stattfanden. Trotz der Engpässe (USB und Prozessor) haben wir eine sehr offensichtliche Schlussfolgerung: Ein vollwertiger Webserver auf dem Raspberry Pi 2 Modell B ist real. Sowohl in der Software als auch in technischen Parametern. Aufgrund der sehr geringen Arbeitsbelastung bei der in Betracht gezogenen Option gehe ich davon aus, dass er in der Lage sein wird, schnell mindestens ein paar tausend Besucher an den durchschnittlichen Standorten pro Tag zu bedienen.

Multiprocessing hilft, Anfragen schneller zu bearbeiten, es gibt genügend Speicher für das Caching, die Datenübertragung über USB ist zufriedenstellend, sodass der Baby-Server nicht nur Strom sparen, sondern auch schnell (und kostengünstig!) Ersetzen fehlerhafter Geräte durchführen kann. Ein solches System kann sich im Vergleich zu anderen gängigen Lösungen in einem Unternehmensnetzwerk als Unternehmensserver (Datenbankserver, Webserver, Sicherungsserver, Dateifreigabe) amortisieren. Und sicherlich eine Alternative zum virtuellen Hosting in den richtigen Händen. Bei einer kostengünstigen unterbrechungsfreien Stromversorgung kann ein mit einem Router gekoppelter Mikrocomputer beispielsweise stundenlang arbeiten, sodass die Frage eines kurzen (und nicht so) Stromausfalls zu Hause geklärt werden kann.wenn die Site des Anbieters auch UPS hat. Sie können auch die Elektrizität steuern, Befehle an verschiedene Geräte senden, eine Videokamera und verschiedene Sensoren anschließen ...

Versuchen, experimentieren, Mikrocomputer - es ist nicht nur günstig, sondern auch angenehm leise ...

Source: https://habr.com/ru/post/de384209/


All Articles