Heroku contre Google App Engine

Pour introduire ce billet j’annonce que l’application (tout à fait inutile) Cédric, on mange où à midi? peut maintenant être déployée sur Google App Engine (instance de test) et sur Heroku (instance de test). Ceci avec le même code source et sans configurations spécifiques requises. J’ai ainsi pu faire une petite comparaison des deux principales plateformes PaaS. Pour faire court, je préfère le service Heroku.

D’abord je trouve les plateformes PaaS plutôt pratiques pour déployer des applications Web rapidement et sans avoir à se soucier de l’infrastructure. Malheureusement ces services sont assez onéreux. Mais les offres de base (gratuites) permettent de faire des choses assez intéressantes (comme déployer un démonstrateur pour une conférence, une application débile «d’aide à la décision», etc.). Les plateformes IaaS comme Amazon EC2 et Google Compute Engine sont également exorbitantes. Je suis plus intéressé par les services PaaS car ils m’apportent une simplicité de déploiement et forcent à structurer correctement le projet (c’est quand même super de pouvoir déployer avec Git un projet sur différentes plateformes PaaS ainsi que sur son serveur privé, sans avoir à modifier une librairie tierce ou le code). Mettant de côté l’avantage des ressources «élastiques», une plateforme IaaS n’a à mes yeux pas de grands avantages par rapport à une solution classique (serveur privé ou mutualisé). Et finalement une application déployée sur Heroku est cloisonnée dans une stack AWS (Celadon) cedar de base (je ne pense pas que l’offre d’entrée permet d’avoir une instance en Europe).
À noter qu’AWS offre actuellement un service PaaS, Elastic Beanstalk, que je n’ai pas encore testé.

Pour en revenir aux plateformes PaaS, le service Heroku est à mon avis clairement plus simple à utiliser que Google App Engine. Il suffit de comparer les documentations de ces plateformes respectives pour déployer une application Flask. Avec Heroku il est essentiellement requis de connaitre Python (bien sûr si vous déployez une application Python) et Git (un minimum). Tandis que App Engine nécessite l’installation d’un framework (à importer dans le code car il propose un certain nombre de fonctionnalités, notamment pour le stockage de données car sur une plateforme PaaS on ne peut généralement pas écrire de fichiers. Ainsi le framework fournit le Datastore) et quelques fichiers de configurations à placer dans votre projet (c’est donc un peu plus invasif dans votre application et ça ne la concerne pas directement).

Une autre différence notable est la manière dont les librairies tierces de votre application sont gérées. Avec Heroku il faut spécifier les dépendances dans un fichier nommé requirements.txt (comme de coutume pour un projet Python) afin qu’elles soient automatiquement installées côté plateforme. Avec App Engine il faut installer les librairies localement (avec pip) puis les envoyer en même temps que votre application grâce à un script Python inclus dans le SDK. Je pense que cette différence est principalement dû au fait que Heroku est basé sur des conteneurs Linux (LinuX Containers), comme le service Docker. Cette approche me plait bien mais je ne sais pas si les problèmes de sécurité connus de LXC s’appliquent dans un contexte PaaS (l’accès à la console ne se fait que via le client Heroku en utilisateur normal).

Le Dashboard de Google App Engine est plus complet (et bien plus compliqué) que celui d’Heroku, il est possible de contrôler beaucoup de choses (logs, facture très détaillée, charge de l’application, etc.). Mais je pense qu’avec un compte payant des choses se débloquent sur Heroku.

D’un point de vue temps de réponse, Google App Engine semble faire un peu mieux que Heroku, surtout lorsqu’un nouveau processus doit être initié après une période de repos de l’application. Je n’ai pas de mesures précises sur ce point et ça ne me pose pas vraiment de problème. À noter aussi qu’avec Heroku HTTPS est utilisé par défaut.

Finalement, vous pouvez utiliser mon petit projet «d’aide à la décision» pour les indécis comme tutoriel. C’est toujours mieux que le Hello World du tutoriel de Google App Engine. Et vous pourrez ainsi vous faire votre propre idée.