golang java python google-app-engine go

golang - Uso de recursos de google Go vs Python y Java en Appengine



golang vs java api (5)

¿Google Go usará menos recursos que Python y Java en Appengine? ¿Los tiempos de inicio de la instancia son más rápidos que los tiempos de inicio de Java y Python?

¿El programa go se carga como código binario o fuente y si se carga como código fuente, se compila una vez o en cada inicio de instancia?

En otras palabras: ¿Me beneficiaré del uso del motor de aplicaciones Go in desde una perspectiva de costos? (solo teniendo en cuenta el costo de los recursos appengine, no el tiempo de desarrollo)


¿Google Go usará menos recursos que Python y Java en Appengine? ¿Los tiempos de inicio de la instancia son más rápidos que los tiempos de inicio de Java y Python?

Sí, las instancias Go tienen menos memoria que Python y Java (<10 MB).

Sí, las instancias de Go se inician más rápido que el equivalente de Java y Python porque el tiempo de ejecución solo necesita leer un solo archivo ejecutable para iniciar una aplicación.

Además, incluso si se trata de un único subproceso ATM, las instancias Go manejan la solicitud entrante al mismo tiempo usando goroutines, lo que significa que si 1 goroutine está esperando E / S, otra puede procesar una solicitud entrante.

¿El programa go se carga como código binario o fuente y si se carga como código fuente, se compila una vez o en cada inicio de instancia?

El programa Go se carga como código fuente y se compila (una vez) en un archivo binario al implementar una nueva versión de la aplicación mediante el SDK.

En otras palabras: ¿Me beneficiaré del uso del motor de aplicaciones Go in desde una perspectiva de costos?

El tiempo de ejecución de Go definitivamente tiene una ventaja cuando se trata de la relación rendimiento / precio, sin embargo, no afecta el precio de otras cuotas de API como se describe en la respuesta de Peter.


El costo de las instancias es solo una parte del costo de su aplicación. Solo uso el tiempo de ejecución de Java en este momento, así que no sé cuánto más o menos eficiente sería con Python o Go, pero no me imagino que serán órdenes de magnitud diferentes. Sé que las instancias no son el único costo que debe considerar. Dependiendo de lo que haga su aplicación, puede encontrar que los costos de API o almacenamiento son más importantes que cualquier diferencia menor entre los tiempos de ejecución. Todos los costos de la API serán los mismos con el tiempo de ejecución que utilice.

El lenguaje "podría" afectar estos costos:

  • Instancias frontend bajo demanda
  • Instancias frontend reservadas
  • Instancias respaldadas

Costos independientes del lenguaje:

  • Almacén de datos de replicación alta (por concierto almacenado)
  • Ancho de banda saliente (por concierto)
  • API Datastore (por ops)
  • API de Blobstore storge (por concierto)
  • API de correo electrónico (por correo electrónico)
  • API XMPP (por estrofa)
  • API de canal (por canal)

La pregunta es principalmente irrelevante.

La huella de memoria mínima para una aplicación Go es menor que una aplicación Python que es menor que una aplicación Java. Todos cuestan lo mismo por instancia, por lo tanto, a menos que su aplicación tenga un mejor rendimiento con espacio extra de almacenamiento dinámico, este problema es irrelevante.

El tiempo de inicio de Go es menor que el tiempo de inicio de Python, que es menor que el tiempo de inicio de Java. A menos que su aplicación tenga un motivo en particular para agotar muchos ciclos de inicio / apagado de instancias, esto es irrelevante desde una perspectiva de costos. Por otro lado, si tiene una aplicación excepcionalmente explosiva en periodos de tiempo muy cortos , el tiempo de inicio puede ser una ventaja.

Como se menciona en otras respuestas, muchos costos son idénticos entre todas las plataformas, en particular, las operaciones del almacén de datos. En la medida en que Go vs Python vs Java tenga un efecto en la factura de instancias-horas, está relacionado con:

  • ¿Su aplicación genera mucha basura? Para muchas aplicaciones, el mayor costo computacional es el recolector de basura. Java tiene, con mucho, el GC más maduro y las operaciones básicas como la serialización son mucho más rápidas que con Python. El recolector de basura de Go parece ser un tema continuo de desarrollo, pero a partir de búsquedas superficiales en la web, no parece ser una cuestión de orgullo (todavía).

  • ¿Tu aplicación es computacionalmente intensiva? Java (JIT-compiled) y Go son probablemente mejores que Python para operaciones matemáticas.

Los tres idiomas tienen sus virtudes y maldiciones. En su mayor parte, es mejor dejar que otros temas dominen, ¿con qué idioma le gusta trabajar más?


No he usado Go, pero sospecho fuertemente que cargaría y ejecutaría instancias mucho más rápido, y usaría menos memoria puramente porque está compilada. Como anécdota del grupo, creo que Python es más receptivo que Java, al menos en el momento de inicio de la instancia.

Los tiempos de carga / inicio de instancias son importantes porque cuando su instancia recibe más solicitudes de las que puede manejar, genera otra instancia. Esto hace que la solicitud tarde mucho más, lo que posiblemente da la impresión de que el sitio en general es lento. Tanto Java como Python tienen que iniciar su máquina virtual / intérprete, por lo que yo esperaría que Go sea un orden de magnitud más rápido aquí.

Existe otro problema: ahora Python2.7 está disponible, Go es la única opción que tiene un único hilo (irónicamente, dado que Go está diseñado como un lenguaje moderno de multiprocesos). Por lo tanto, aunque las solicitudes Go deben manejarse más rápido, una instancia solo puede manejar solicitudes en serie. Sin embargo, me sorprendería mucho si esta limitación durara mucho.


Probablemente se trate más de cómo asigna los recursos que su elección de idioma. Leí que GAE fue creado sin el idioma adecuado, por lo que probablemente no haya ventaja incorporada para ningún idioma, pero puede obtener una ventaja al elegir el idioma con el que se siente cómodo y motivado. Utilizo Python y lo que hizo que mi implementación fuera mucho más rentable fue la actualización a Python 2.7 y solo puede hacer esa actualización si usa el subconjunto correcto de 2.6, lo cual es bueno. Entonces, si eliges un idioma con el que te sientas cómodo, es probable que obtengas una ventaja de tu habilidad usando el lenguaje en lugar del entorno combinado de idioma +.

En resumen, recomendaría Python, pero ese es el único lenguaje de motor de aplicaciones que probé, y esa es mi elección, aunque sé que Java es bastante bueno, el código para un proyecto será mucho más compacto usando mi Python de idioma favorito.

Mis aplicaciones son de tamaño small a mediano y cuestan nada: