Ich schreibe einige Webservices, die JSON-Daten zurückgeben, die viele Benutzer haben.
Was sind die Vorteile der Verwendung von Nginx vor meinem Server im Vergleich zur Verwendung des go http-Servers?
Ich schreibe einige Webservices, die JSON-Daten zurückgeben, die viele Benutzer haben.
Was sind die Vorteile der Verwendung von Nginx vor meinem Server im Vergleich zur Verwendung des go http-Servers?
Antworten:
Es hängt davon ab, ob.
Wenn Sie Nginx als Reverse-Proxy einsetzen, erhalten Sie sofort Folgendes:
Der Go - HTTP - Server ist sehr gut, aber Sie werden müssen , das Rad neu zu erfinden einige diese Dinge zu tun (was in Ordnung ist: es ist nicht zu sein , alles zu jedem gemeint).
Ich fand es immer einfacher, Nginx in den Vordergrund zu stellen - was gut ist - und es das "Webserver" -Ding machen zu lassen. Meine Go-Anwendung erledigt die Anwendungen und nur das Nötigste an Headern / etc. dass es muss. Betrachten Sie Nginx nicht als "schlechte" Sache.
log
Pakets). Wenn Sie die IP-Adresse, den Ressourcenzugriff usw. protokollieren möchten, müssen Sie diese schreiben. Gleiches gilt für das Setzen von Headern über die Grundlagen hinaus. Obwohl ich keine konkreten Daten habe, sollte Nginx vor Go eigentlich nicht langsamer sein als Go: Tatsächlich kann es dank gzip und seinen eigenen Optimierungen schneller sein. Die "Kosten" werden mehr Speicher- / CPU-Auslastung sein, aber nginx ist auch in dieser Hinsicht sehr effizient.
Der Standard-HTTP-Server von Go ist in Ordnung. Wenn Ihre Anwendung meistens / nur "dynamische" Anfragen / Antworten sind, ist dies wirklich der beste Weg.
Sie könnten nginx verwenden, um statische Assets bereitzustellen, aber höchstwahrscheinlich ist das Standard-Go-One auch dafür in Ordnung. Wenn Sie eine höhere Leistung benötigen, sollten Sie einfach so viel CDN oder Cache wie möglich mit Varnish verwenden (zum Beispiel).
Wenn Sie verschiedene Anwendungen von derselben IP-Adresse aus bedienen müssen, ist nginx eine gute Wahl für einen Proxy, um Anforderungen zwischen den verschiedenen Anwendungen zu verteilen. obwohl ich für so etwas öfter Lack oder HAProxy aus der Toolbox holte.
Das Gorilla Web Toolkit bietet Ihnen:
schema
Paket konvertiert Formularwerte in eine Struktur.Dies füllt eine große Lücke zwischen Go's net/http
und HTTP-Servern wie NGINX.
Persönlich würde ich es vermeiden, einen anderen HTTP-Server zusätzlich zu installieren und zu konfigurieren, net/http
wenn ich weiß, dass ich stattdessen ein CDN anschließen kann.
Ich denke, net/http
hat den leistungsstärksten HTTP-Server in jeder Standardbibliothek.
Unter https://blog.gopheracademy.com/caddy-a-look-inside/ sieht es so aus, als ob Go mit Middleware gzip, Fehler, statische Dateien, Routing und http-Header verarbeiten kann. Die folgende Zeile aus dem Blog zeigt, wie Sie mit einer solchen Anfrage umgehen würden.
logHandler(gzipHandler(fileServer))
Sie behandeln die Fehlerprotokollierung auf sehr interessante Weise. Solange Ihre Middleware einen Fehlercode (int) zurückgibt, wird dieser von der Middleware zur Fehlerbehandlung automatisch verarbeitet. Sie sind sogar so weit gegangen, die gesamte Site in Go wie Nginx zu konfigurieren. "Die Datei nginx.conf für alle Websites der Gopher Academy war über 115 Zeilen lang. Die entsprechende Caddy-Datei umfasst nur 50 Zeilen."