2012-04-13 10 views
12

Ho pensato invece di utilizzare:Go webserver come è la stabilità delle prestazioni, in termini di stabilità di lungo periodo rispetto a Tomcat, Apache?

  • Tomcat
  • Apache
  • web server leggero
  • PHP
  • Rubino
  • JSP

Perché non cambiare i miei progetti a Vai alla lingua. Perché ci ho:

  • webserver costruito nel
  • Non ho nemmeno bisogno di dipendere da PHP, Ruby, JSP
  • Go risolve cross-platform come ad esempio: funziona su FreeBSD, Linux, Solaris (Windows , Mac, Android, Tizen)
  • né Apache né Tomcat né altri maintainer del server web
  • velocità del browser sarebbe extreamly più veloce rispetto ad altri linguaggi di scripting del server Web.

Ma una cosa di cui sono preoccupato, che è la stabilità del server web Go rispetto ad altri server web.

Qualcuno ha già fatto questo o sto costruendo da solo progetti di questo tipo per le versioni di produzione?

+0

Ruby ha anche un server web nella libreria standard ('require 'webrick''), ma non lo esporrò necessariamente direttamente agli utenti. –

+0

La maggior parte dei server Web come Go non sono progettati per essere server con funzionalità complete; le persone generalmente le gestiscono come server di applicazioni dietro qualcosa come Apache o nginx.In questo modo, il frontend più configurabile può gestire cose come il caching, il bilanciamento del carico, la pubblicazione di dati statici e così via. –

+0

Non dice "Bill the Lizard' solo le domande di chiusura di _love_ che sono effettivamente utili su StackOverflow ?! Basato su qualche stupido tecnicismo. Questo sito è pensato per essere un pratico forum di domande e risposte per sviluppatori del mondo reale e questa domanda fa un ottimo lavoro all'essere uno (e anche la risposta). Sono sicuro che sente che sta facendo qualcosa di incredibilmente utile nella sua vita. Questa non è la prima volta che mi imbatto in questa situazione - da qui questo commento per puro "wating" di anni. –

risposta

20

non ci sono problemi di stabilità.

Ho alcuni server Web al 100% in esecuzione per mesi, che servono circa un milione di query al mese senza alcun problema (principalmente JSON, tramite GET, POST e websockets).

Sono su server ubuntu a 64 bit, ma credo che avreste difficoltà a produrre il tanto chiacchierato bug a 32 bit, specialmente con un server web.

Non utilizzare un front-end se non si dispone di un motivo specifico: è facile creare un'applicazione Web completa utilizzando semplicemente Go.

Sarete lontani da soli. Secondo me, Go è particolarmente adatto per costruire server a lunga durata. Goroutine e canali rendono davvero facile gestire sia le richieste degli utenti che le attività a lungo termine (o, per esempio, eseguire la postreatment delle query utente dopo aver risposto alla query http, che non è così semplice in php ed è troppo LOC in java se vuoi farlo correttamente).

+2

+1 Per parlare dell'esperienza sul campo. – Flavius

+0

Stai usando uno strumento specifico per tenerti in vita e monitorare i tuoi processi su Ubuntu? – Blacksad

+0

Non oggi. Io uso un servizio che mi avverte se uno smette di rispondere ma, poiché non ho mai avuto un incidente in prod, non sento la pressione ora. Immagino che potresti usare uno strumento standard se necessario. Ho scoperto che il ciclo di debug è diverso da quello di, ad esempio, java o php: si rilevano gli errori molto velocemente, sia durante la compilazione che ai primi test (principalmente errori di indice dell'array o mappa non allocata ...) mentre nella maggior parte dei casi gli errori di altre lingue sono spesso nascosti. Mi piace usare anche lo strumento "go test". Il fatto che la compilazione sia veloce e inclusa nell'operazione rende più semplice. –

1

Utilizzare Nginx come front-end e assicurarsi di utilizzare la versione a 64 bit di Go. La versione a 32 bit presenta gravi problemi di stabilità, che rappresentano un ostacolo per qualsiasi processo di lunga durata.

+1

Potresti fornire un paio di collegamenti a segnalazioni di bug rilevanti e/o discussioni su gruppi di discussione/ML? Sono anche interessato alla ricerca della domanda originale, e mentre la tua affermazione è forte sembra essere un po 'sventolante; affermazioni come questa dovrebbero essere supportate da dati. – kostix

+0

Ecco una discussione che illustra i problemi con 32 bit. http://groups.google.com/group/golang-nuts/browse_thread/thread/ab1971bb9459025d/64241d28b02fa0db?lnk=gst – kristianp

+0

Si prega di notare che questo bug può verificarsi anche su server a 64 bit, ma è così raro che non lo farete sicuramente vederlo, anche su 32 bit. Ci sono voluti anni e uno specifico schema di utilizzo della memoria per rilevarlo. –

2

Perché non utilizzare la Build in Webserver e impostare un proxy inverso come Varnish, o lasciare che Nginx agisca come proxy?

http://wiki.nginx.org/ReverseProxyCachingExample

+3

Perché? Perchè vorresti? Aggiunge un altro livello di astrazione che deve essere mantenuto e aggiornato. E questo è ciò che l'interrogante sembrava cercare di evitare. L'aggiunta di caching non aiuta nella stabilità, ma solo nelle prestazioni. Solo per la cache-lifetime può fornire ulteriore "stabilità"; nascondendo i tempi morti. – Kissaki

Problemi correlati