Il y a peu, j’ai parlé avec Yann Klis, de Scalingo, sur le forum de Human Coders. Suite à cette discussion, j’ai souhaité effectuer un benchmark pour comparer les performances de Digital Ocean et de Scalingo. Dans cet article, je vais exposer les résultats des tests ainsi que ma méthodologie.
L’application
Voici l’application testée : https://www.associatedartcollectors.com/fr. Il s’agit d’une application Rails optimisée, avec un système de mise en cache, des assets sur un CDN, etc. Il s’agit d’une vraie application (encore en développement). J’ai préféré l’utiliser plutôt que d’en faire une uniquement pour des tests afin de mieux représenter la réalité.
Les serveurs
Le serveur Digital Ocean est situé à Francfort et coûte 10$ par mois pour 1Go de RAM. Scalingo, quant à lui, est situé en France et coûte 14.40€ pour 512Mb. Scalingo est donc légèrement plus cher pour moins de puissance.
Scalingo étant beaucoup plus facile à gérer, je pense que le temps économisé au niveau de la gestion du serveur vaut largement le léger surplus de prix. En effet, dans son utilisation, Scalingo ressemble davantage à Heroku qu’a Digital Ocean. J’ai choisi de ne pas comparer Scalingo à Heroku, car, selon de précédents tests, Digital Ocean offre une meilleure performance. J’ai voulu comparer Scalingo au meilleur.
Note
Je ne suis pas administrateur système. Il est probablement possible de faire mieux que ce que j’ai fait sur Digital Ocean. Ceci dit, je suis probablement dans la même situation qu’un bon nombre de développeurs. L’intérêt des systèmes similaires à Heroku ou Scalingo est également ne pas s’occuper du système. On créer l’application en 2 minutes, on pousse l’application et ça marche. C’est tout.
Les tests
La plus grosse part de marché de Scalingo est située en France. J’ai souhaité commencer mes tests proches de la France. Pour cela, j’ai choisi de créer un droplet Digital Ocean à Londres.
Mon objectif a été de simuler un certain nombre de requêtes et ceux de manière concurrente. J’ai donc créé un code qui lance plusieurs processus simultanément. Chaque processus effectue un certain nombre de requêtes. Le temps effectué par chaque processus permet de comparer la performance. Plus les requêtes se sont complétées rapidement, plus le serveur est efficace.
Le code
Le code n’est probablement pas le meilleur que j’ai écrit de ma vie, mais est largement suffisant pour faire ce que je souhaitais.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Ce code permet d’entrer un nombre de processus simultané et le nombre de requêtes fait pour chaque processus. De plus, il permet d’indiquer la page appelée par le code. Pour les tests, j’ai choisi des pages différentes qui sont représentatives de l’application.
Le code permet également d’afficher le statut de la requête envoyé, afin de s’assurer qu’elles sont toutes valides, ainsi que le numéro de la requête effectuée, juste pour voir la progression.
J’ai eu un problème avec le protocole SSL sur Digital Ocean. Pour le test, j’ai simplement désactivé la vérification.
Test 1
Le premier test consiste uniquement à visiter une page. Pour l’affichage de cette page, 11 requêtes SQL sont exécutées.
Digital Ocean :
Threads : 10
Requests per thread : 100
Temps de réponse :
163.755285
163.906003
164.070419
164.222361
164.379131
164.520751
164.717367
164.894695
165.059584
165.245484
Scalingo :
Threads : 10
Requests per thread : 100
Temps de réponse :
110.868637
110.982509
111.086731
111.195775
111.377322
111.482194
111.590034
111.697870
111.821420
111.938271
Ce premier test montre clairement que Scalingo offre un temps de réponse plus rapide. Scalingo est quasiment deux fois plus rapide.
Test 2
Dans ce deuxième test, j’ai voulu tester le comportement avec plus de requêtes concurrentes.
Digital Ocean :
Threads : 100
Requests per thread : 10
Temps de réponse :
150.062375
150.365437
150.532612
165.780870
165.941798
166.111019
Scalingo :
Threads : 100
Requests per thread : 10
Temps de réponse :
92.787676
92.877818
92.959175
...
102.423316
102.525122
102.622236
Encore cette fois, Scalingo est nettement supérieur. Pendant que les tests s’effectuaient, je suis allé sur les deux sites avec mon navigateur. Même si cela ne se reflète par sur les résultats du benchmark, j’ai constaté une grande dégradation de performance pour les deux fournisseurs.
Test 3
Par la suite, j’ai souhaité tester une autre page un peu plus complexe. Sur cette page, plus de requêtes SQL sont effectuées et il y a plus de code à exécuter.
Digital Ocean :
Thread : 10
Request : 100
Temps de réponse :
204.311959
204.509295
204.683958
204.864534
205.055946
205.240614
205.440767
205.621924
205.807302
206.020173
Scalingo :
Thread : 10
Request : 100
Temps de réponse :
143.032002
143.170704
143.322095
143.458987
143.596800
143.742877
143.877174
144.017422
144.161915
144.303397
Sans surprise, le résultat est le même dans ce cas.
Test 4
Enfin, j’ai voulu tester une page encore plus complexe. Il s’agit du formulaire d’inscription d’un utilisateur. J’utilise des gems comme SimpleForm pour gérer le formulaire. Les listes des services, des pays et des régions sont disponibles ce qui correspond à autant de requête SQL et de donnée à traiter.
Digital Ocean :
Thread : 10
Request : 100
Temps de réponse :
420.542306
420.998163
421.375207
421.724786
422.231918
422.618054
422.983907
423.442330
423.815438
424.163915
Scalingo :
Thread : 10
Request : 100
Temps de réponse :
669.174683
669.800881
670.571744
671.256995
671.949939
672.582819
673.282322
673.983594
674.634513
675.310771
Cette fois, Digital Ocean est plus rapide. Je pense que c’est là que la différence de puissance du serveur se fait sentir. Étant donné qu’il y a plus de code a exécuter, le traitement nécessite plus de ressource, et donc, Digital Ocean est avantagé. Ceci dit, cette page n’est pas l’une des plus utilisées et je pense que la performance est plus importante pour les pages permettant uniquement l’affichage.
Conclusion
Je pense que Scalingo gagne le duel. En plus d’offrir une performance plus qu’honorable, la gestion du serveur est grandement simplifiée. Je conseille vivement d’essayer cet outil si vous n’avez pas besoin d’avoir un accès complet à la machine. Comme moi, les développeurs ne sont pas toujours des administrateurs systèmes. Je trouve beaucoup plus simple de laisser la gestion du serveur à quelqu’un d’autre. En plus d’être probablement mieux configuré que ce que j’ai fait, c’est également plus sécuritaire, car, si une faille de sécurité est découverte, le problème sera géré par des professionnels dans le domaine.
Pour cet article, mes tests ont été effectués depuis Londres afin de représenter la clientèle européenne. Pour ma part, je me situe au Québec. Dans une seconde étape, je vais tester depuis des serveurs en Amérique du Nord et à partir d’autres endroits dans le monde pour observer le comportement selon les lieux.
Dans un prochain article, je vais faire la comparaison entre Clever Cloud et Scalingo. Surveillez mes prochains articles pour connaitre les résultats de mon prochain benchmark.