Utilisation des ressources de Google Go vs Python et Java sur Appengine

Google Go utilisera-t-il moins de ressources que Python et Java sur Appengine? Les temps de démarrage de l’instance sont-ils plus rapides que les temps de démarrage de Java et de Python?

Le programme go est-il téléchargé en tant que binary ou code source et, s’il est téléchargé en tant que code source, est-il compilé une fois ou au démarrage de chaque instance?

En d’autres termes: vais-je bénéficier de l’utilisation du moteur d’application Go dans une perspective de coût? (en tenant compte uniquement du coût des ressources de l’appengine et non du temps de développement)

Google Go utilisera-t-il moins de ressources que Python et Java sur Appengine? Les temps de démarrage de l’instance sont-ils plus rapides que les temps de démarrage de Java et de Python?

Oui, les instances Go ont une mémoire inférieure à celle de Python et Java (<10 Mo).

Oui, les instances Go démarrent plus vite que les équivalents Java et Python car le moteur d’exécution doit uniquement lire un seul fichier exécutable pour démarrer une application.

De plus, même si vous êtes en mode mono-thread, les instances Go gèrent les requêtes entrantes simultanément à l’aide de goroutines, ce qui signifie que si une entité attend des entrées-sorties, une autre peut traiter une demande entrante.

Le programme go est-il téléchargé en tant que binary ou code source et, s’il est téléchargé en tant que code source, est-il compilé une fois ou au démarrage de chaque instance?

Le programme Go est téléchargé en tant que code source et compilé (une fois) en un fichier binary lors du déploiement d’une nouvelle version de votre application à l’aide du SDK.

En d’autres termes: vais-je bénéficier de l’utilisation du moteur d’application Go dans une perspective de coût?

L’exécution de Go est sans aucun doute un avantage en termes de rapport performance / prix, mais elle n’affecte pas la tarification des autres quotas d’API décrits par Peter.

Le coût des instances ne représente qu’une partie du coût de votre application. Je n’utilise que le runtime Java pour le moment, donc je ne sais pas à quel point les choses seraient plus ou moins efficaces avec Python ou Go, mais je ne pense pas que ce soit différent. Je sais que les instances ne sont pas les seuls que vous devez prendre en compte. Selon ce que fait votre application, vous pouvez constater que les coûts API ou de stockage sont plus importants que les différences mineures entre les temps d’exécution. Tous les coûts de l’API seront les mêmes avec le temps d’exécution que vous utilisez.

La langue “pourrait” affecter ces coûts:

  • Instances frontales à la demande
  • Instances Frontend Réservées
  • Instances sauvegardées

Coûts indépendants de la langue:

  • Datastore haute réplication (par concert stocké)
  • Bande passante sortante (par concert)
  • API de banque de données (par opérations)
  • Blobstore API storge (par concert)
  • API de messagerie (par email)
  • API XMPP (par strophe)
  • API de canal (par canal)

La question est la plupart du temps sans object.

L’empreinte mémoire minimale d’une application Go est inférieure à une application Python inférieure à une application Java. Ils coûtent tous le même prix par instance. Par conséquent, à moins que votre application fonctionne mieux avec un espace de mémoire supplémentaire, ce problème est sans importance.

Go Le temps de démarrage est inférieur au temps de démarrage de Python, qui est inférieur au temps de démarrage de Java. À moins que votre application ait une raison particulière de passer par de nombreux cycles de démarrage / arrêt d’instances, cela n’est pas pertinent du sharepoint vue des coûts. D’un autre côté, si votre application est exceptionnellement chargée dans des délais très courts , le temps de démarrage peut être un avantage.

Comme mentionné dans d’autres réponses, de nombreux coûts sont identiques pour toutes les plates-formes, en particulier pour les opérations de banque de données. Dans la mesure où Go vs Python vs Java aura un effet sur la facture en heures-instance, il est lié à:

  • Votre application génère-t-elle beaucoup de déchets? Pour de nombreuses applications, le plus grand coût de calcul est le garbage collector. Java a de loin le GC le plus mature et les opérations de base comme la sérialisation sont considérablement plus rapides qu’avec Python. Le ramasse-miettes de Go semble être un sujet de développement permanent, mais à partir de recherches web sommaires, il ne semble pas (encore) être une source de fierté.

  • Votre application nécessite-t-elle un calcul intensif? Java (compilé avec JIT) et Go sont probablement meilleurs que Python pour les opérations mathématiques.

Les trois langues ont leurs vertus et leurs malédictions. Dans la plupart des cas, il est préférable de laisser les autres problèmes dominer – quelle langue préférez-vous travailler avec la plupart?

C’est probablement plus sur la manière d’allouer les ressources que sur votre choix de langue. J’ai lu que GAE était conçu pour être indépendant de la langue, il n’y a donc probablement aucun avantage intégré pour aucune langue, mais vous pouvez tirer avantage du choix de la langue avec laquelle vous êtes à l’aise et motivé. J’utilise python et ce qui a rendu mon déploiement beaucoup plus rentable était la mise à niveau vers python 2.7 et vous ne pouvez effectuer cette mise à niveau que si vous utilisez le sous-ensemble correct de la version 2.6, ce qui est bien. Donc, si vous choisissez une langue avec laquelle vous êtes à l’aise, il est probable que vous tiriez parti de vos capacités en utilisant la langue plutôt que la langue combinée + l’environnement lui-même.

En bref, je recommande python mais c’est le seul langage de moteur d’application que j’ai essayé et c’est mon choix même si je connais assez bien Java, le code d’un projet sera beaucoup plus compact en utilisant mon langage préféré python.

Mes applications sont de taille petite à moyenne et elles ne coûtent rien:

entrer la description de l'image ici

Je n’ai pas utilisé Go, mais je soupçonnerais fortement qu’il chargerait et exécuterait des instances beaucoup plus rapidement, et utiliserait moins de mémoire simplement parce qu’il est compilé. De manière anecdotique du groupe, je pense que Python est plus réactif que Java, du moins au moment du démarrage de l’instance.

Les temps de chargement / démarrage de l’instance sont importants car lorsque votre instance est touchée par plus de requêtes qu’elle ne peut en gérer, elle se transforme en une autre instance. Cela fait que la demande prend beaucoup plus de temps, donnant peut-être l’impression que le site est généralement lent. Java et Python doivent tous deux démarrer leur machine virtuelle / interpréteur, donc je m’attendrais à ce que Go soit un ordre de grandeur plus rapide ici.

Il y a un autre problème – maintenant que Python2.7 est disponible, Go est la seule option à thread unique (ironiquement, étant donné que Go est conçu comme un langage multiprocessus moderne). Donc, même si les requêtes Go doivent être traitées plus rapidement, une instance ne peut traiter que les requêtes en série. Je serais très surpris si cette limitation dure longtemps.