Introduction
Maintenant que nous avons vu en détail les performances des PaaS PostgreSQL sur AWS puis sur Azure nous allons essayer de comparer ceux-ci ; nous essaierons de construire un jugement objectif, attention cependant, celui-ci est basé sur un benchmark de type TPC-C, il se peut donc que dans certains cas le comportement observé ne soit pas identique, d’autre part, les configurations postgreSQL ont été laissées à leurs valeurs prédéfinies qui peuvent donc varier d’un “Cloud provider” à l’autre.
Normalisation
De façon à pouvoir comparer il à d’abord fallu “normaliser les PaaS”, c’est à dire pouvoir faire correspondre les types d’instances entre les différents “Cloud Provider”, ainsi les instances de type “GP” (General Purpose) d’Azure correspondent à des instances “db.m” d’AWS et les instances “MO” (Memory Optimized) correspondent à des instances de type “db.r” (une remarque qui ne change à rien au test, ce sont à chaque fois des instances de 5eme génération qui sont utilisées, càd “db.m5” ou “db.r5” pour AWS et Gen 5 chez Azure) :
Pour les instances GP Azure provisionne 5Go de RAM / vCore
Pour les instances MO Azure provisionne 10Go de RAM / vCore
AWS | AZURE | ||||
Instance class | CPU | MEM | CLASS | CPU | MEM |
db.m5.8xlarge | 32 | 128 | GP_32 | 32 | 160 |
db.m5.4xlarge | 16 | 64 | GP_16 | 16 | 80 |
db.m5.2xlarge | 8 | 32 | GP_8 | 8 | 40 |
db.m5.xlarge | 4 | 16 | GP_4 | 4 | 20 |
db.m5.large | 2 | 8 | GP_2 | 2 | 10 |
db.r5.8xlarge | 32 | 256 | MO_32 | 32 | 320 |
db.r5.4xlarge | 16 | 128 | MO_16 | 16 | 160 |
db.r5.2xlarge | 8 | 64 | MO_8 | 8 | 80 |
db.r5.xlarge | 4 | 32 | MO_4 | 4 | 40 |
db.r5.large | 2 | 16 | MO_2 | 2 | 20 |
On a donc les instances Azure qui sont provisionnées avec un peu plus de mémoire.
Par souci de commodité, dans ce qui suit les dénomination d’instances suivantes seront utilisées pour AWS et Azure :
<GP|MO>_<vCPU>_<Stockage> (la quantité de mémoire allouée pourra donc être retrouvée au besoin dans le tableau ci-dessus.
Comparaison des performances
Nous allons comparer ici AWS (RDS et Aurora) et Azure (Single Server et Flexible Server), Aurora ne pouvant être provisionné que sur des instances de type “db.r”, on restreindra le comparatif à uniquement des instances de type AWS “db.r” et Azure “MO” ; de plus, étant donné que les IOPS ne sont pas une contrainte sur Aurora on utilisera le stockage le plus gros provisionné lors des benchs (2To) comme référence de comparaison et ce même si en fait sur Aurora les 2To ne sont pas réellement provisionnés (pour rappel, sur Aurora le stockage est de facto en augmentation automatique par incrément de 30Go, cf : https://blog.capdata.fr/index.php/aws-rds-aurora-postgresql/).
Remarque : Le stockage provisionné ici est de 2To !!!
Aurora est donc surtout très performant pour des grosses instances (par rapport aux autre PaaS, je rappelle aussi qu’ici le stockage a été sur-dimensionné pour profiter de plus d’IO).
RDS classique s’en sort très bien pour les petites instances.
Azure Single Storage est plus performant qu’Azure Flexible Server (toujours avec un stockage sur-dimensionné car avec un stockage normalement dimensionné la tendance est inversée).
Pour rappel sur les comparatifs complets, cf : https://blog.capdata.fr/index.php/azure-et-postgresql-en-paas/ et https://blog.capdata.fr/index.php/aws-rds-aurora-postgresql/ et ci-dessous les graphes.
Comparaison performances Azure Single Server vs Flexible Server
Comparaison performances AWS RDS vs AWS Aurora
Comparaison financière
La comparaison financière ci-dessous permet de comparer le “coût d’une transaction” entre les différents PaaS Azure (Single Server et Flexible Server) et AWS (RDS en GP2, RDS en Provisioned IOPS 10k, 30k et Aurora) testés précédemment.
La définition de la “taille” (l’instance utilisée) est définie comme ci-dessus, càd :
<MO|GP>_<vCore>_<stockage en Mo>
Remarque : Pour AWS MO est équivalent aux instances de type db.r5 et GP aux instances de type db.m5
Résumé
Ci-dessous un comparatif avec une taille de stockage à 1To, seule capacité où les tests ont tous été faits (en effet, pour tester du “provisioned IOPS” sur RDS il faut provisionner une quantité suffisante de stockage).
SIZE | ||||||
Cost / TPM | Cost / TPM | |||||
Single Server | Flexible Server | RDS GP2 | RDS PIO 10k | RDS PIO 30k | Aurora | |
MO_2_1024 | 0,020 | 0,025 | 0,016 | 0,073 | 0,250 | 8,711 |
MO_4_1024 | 0,014 | 0,016 | 0,020 | 0,055 | 0,603 | 8,407 |
MO_8_1024 | 0,011 | 0,011 | 0,021 | 0,045 | 0,092 | 11,799 |
MO_16_1024 | 0,019 | 0,018 | 0,042 | 0,062 | 0,108 | 8,218 |
Les coûts sont exprimés en $/mois/transaction
Attention, le tableau ci-dessus peut être trompeur, en effet, il ne tient pas compte de l’activité souhaitée mais fait le postulat que l’on essaie d’avoir le maximum de transactions par minute, ce qui n’est pas souvent le cas.
Ainsi, on peut voir à quel point Aurora, bien qu’étant une solution performante peut vite devenir très onéreuse, en effet, dans le calcul du coût final / TPM a été pris en compte le fait que sur Aurora les IOPS sont facturées en plus du stockage et de l’instance ; ci-dessous le détail de ces IO.
PaaS_size | Nb IO (75eme percentile) |
MO_32 | 1716014,50994444 |
MO_8 | 977871,730525966 |
MO_4 | 445554,741155943 |
MO_2 | 253022,491465421 |
MO_16 | 1813954,3061938 |
Remarque, les coûts inhérents au fait de provisionner 10k IOPS et 30k IOPS ont également été pris en compte.
Tableau complet
Et le tableau complet montrant toutes les instances, les TPM et les différents coûts.
SIZE | Azure | AWS | ||||||||||||||||
Costs | TPM | Cost / TPM | Costs | TPM | Cost / TPM | |||||||||||||
Single Server | Flexible Server | Single Server | Flexible Server | Single Server | Flexible Server | RDS GP2 | RDS PIO 10k | RDS PIO 30k | Aurora* | RDS GP2 | RDS PIO 10k | RDS PIO 30k | Aurora | RDS GP2 | RDS PIO 10k | RDS PIO 30k | Aurora | |
GP_2_128 | 133,00 € | 130,00 € | 1212 | 10801 | 0,110 € | 0,012 € | 165,34 € | 1 325,34 € | 3 645,34 € | 11200 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_2_128 | 175,00 € | 175,00 € | 2029 | 10011 | 0,086 € | 0,017 € | 228,70 € | 1 388,70 € | 3 708,70 € | 255,28 € | 20901 | #N/D | #N/D | 16834 | 0 | #N/D | #N/D | 9 |
GP_4_128 | 251,00 € | 247,00 € | 1779 | 25339 | 0,141 € | 0,010 € | 313,66 € | 1 473,66 € | 3 793,66 € | 24066 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_4_128 | 337,00 € | 337,00 € | 2244 | 29632 | 0,150 € | 0,011 € | 440,38 € | 1 600,38 € | 3 920,38 € | 496,48 € | 40168 | #N/D | #N/D | 30713 | 0 | #N/D | #N/D | 8 |
GP_8_128 | 488,00 € | 479,00 € | 2045 | 41828 | 0,239 € | 0,011 € | 610,30 € | 1 770,30 € | 4 090,30 € | 42873 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_8_128 | 660,00 € | 660,00 € | 1824 | 63373 | 0,362 € | 0,010 € | 863,74 € | 2 023,74 € | 4 343,74 € | 978,88 € | 46677 | #N/D | #N/D | 48007 | 0 | #N/D | #N/D | 12 |
GP_16_128 | 963,00 € | 945,00 € | 1619 | 53316 | 0,595 € | 0,018 € | 1 203,58 € | 2 363,58 € | 4 683,58 € | 36851 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_16_128 | 1 305,00 € | 1 306,00 € | 1384 | 59160 | 0,943 € | 0,022 € | 1 710,46 € | 2 870,46 € | 5 190,46 € | 1 943,68 € | 41830 | #N/D | #N/D | 127860 | 0 | #N/D | #N/D | 8 |
GP_2_256 | 146,00 € | 143,00 € | 2418 | 12258 | 0,060 € | 0,012 € | 182,37 € | 1 342,37 € | 3 662,37 € | 11513 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_2_256 | 188,00 € | 188,00 € | 6519 | 11774 | 0,029 € | 0,016 € | 245,73 € | 1 405,73 € | 3 725,73 € | 269,36 € | 16377 | #N/D | #N/D | 16834 | 0 | #N/D | #N/D | 9 |
GP_4_256 | 264,00 € | 260,00 € | 4793 | 30607 | 0,055 € | 0,008 € | 330,69 € | 1 490,69 € | 3 810,69 € | 20136 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_4_256 | 350,00 € | 350,00 € | 16088 | 32641 | 0,022 € | 0,011 € | 457,41 € | 1 617,41 € | 3 937,41 € | 510,56 € | 39128 | #N/D | #N/D | 30713 | 0 | #N/D | #N/D | 8 |
GP_8_256 | 501,00 € | 492,00 € | 7896 | 60381 | 0,063 € | 0,008 € | 627,33 € | 1 787,33 € | 4 107,33 € | 47657 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_8_256 | 673,00 € | 673,00 € | 13657 | 58740 | 0,049 € | 0,011 € | 880,77 € | 2 040,77 € | 4 360,77 € | 992,96 € | 57498 | #N/D | #N/D | 48007 | 0 | #N/D | #N/D | 12 |
GP_16_256 | 976,00 € | 958,00 € | 5559 | 66177 | 0,176 € | 0,014 € | 1 220,61 € | 2 380,61 € | 4 700,61 € | 65691 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_16_256 | 1 318,00 € | 1 319,00 € | 5548 | 69331 | 0,238 € | 0,019 € | 1 727,49 € | 2 887,49 € | 5 207,49 € | 1 957,76 € | 60069 | #N/D | #N/D | 127860 | 0 | #N/D | #N/D | 8 |
GP_2_512 | 174,00 € | 171,00 € | 4968 | 9093 | 0,035 € | 0,019 € | 216,42 € | 1 376,42 € | 3 696,42 € | 19401 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_2_512 | 216,00 € | 216,00 € | 10479 | 10450 | 0,021 € | 0,021 € | 279,78 € | 1 439,78 € | 3 759,78 € | 297,52 € | 22901 | #N/D | #N/D | 16834 | 0 | #N/D | #N/D | 9 |
GP_4_512 | 292,00 € | 288,00 € | 9725 | 23045 | 0,030 € | 0,012 € | 364,74 € | 1 524,74 € | 3 844,74 € | 29554 | #N/D | #N/D | #N/D | 0 | #N/D | #N/D | #N/D | |
MO_4_512 | 378,00 € | 378,00 € | 23090 | 28656 | 0,016 € | 0,013 € | 491,46 € | 1 651,46 € | 3 971,46 € | 538,72 € | 32332 | #N/D | #N/D | 30713 | 0,015 € | #N/D | #N/D | 8,405 € |
GP_8_512 | 529,00 € | 520,00 € | 21327 | 47392 | 0,025 € | 0,011 € | 661,38 € | 1 821,38 € | 4 141,38 € | 76063 | #N/D | #N/D | #N/D | 0,009 € | #N/D | #N/D | #N/D | |
MO_8_512 | 701,00 € | 701,00 € | 36539 | 64192 | 0,019 € | 0,011 € | 914,82 € | 2 074,82 € | 4 394,82 € | 1 021,12 € | 73817 | #N/D | #N/D | 48007 | 0,012 € | #N/D | #N/D | 11,798 € |
GP_16_512 | 1 004,00 € | 986,00 € | 33032 | 67148 | 0,030 € | 0,015 € | 1 254,66 € | 2 414,66 € | 4 734,66 € | 85698 | #N/D | #N/D | #N/D | 0,015 € | #N/D | #N/D | #N/D | |
MO_16_512 | 1 346,00 € | 1 347,00 € | 26944 | 73871 | 0,050 € | 0,018 € | 1 761,54 € | 2 921,54 € | 5 241,54 € | 1 985,92 € | 78345 | #N/D | #N/D | 127860 | 0,022 € | #N/D | #N/D | 8,218 € |
GP_2_1024 | 228,00 € | 225,00 € | 7707 | 10714 | 0,030 € | 0,021 € | 284,51 € | 1 444,51 € | 3 764,51 € | 19546 | 20574 | 22442 | #N/D | 0,015 € | 0,070 € | 0,168 € | #N/D | |
MO_2_1024 | 270,00 € | 270,00 € | 13245 | 10805 | 0,020 € | 0,025 € | 347,87 € | 1 507,87 € | 3 827,87 € | 353,84 € | 21780 | 20587 | 15313 | 16834 | 0,016 € | 0,073 € | 0,250 € | 8,711 € |
GP_4_1024 | 346,00 € | 342,00 € | 15649 | 23456 | 0,022 € | 0,015 € | 432,83 € | 1 592,83 € | 3 912,83 € | 29899 | 30688 | 26189 | #N/D | 0,014 € | 0,052 € | 0,149 € | #N/D | |
MO_4_1024 | 432,00 € | 432,00 € | 30131 | 26926 | 0,014 € | 0,016 € | 559,55 € | 1 719,55 € | 4 039,55 € | 595,04 € | 28520 | 31311 | 6699 | 30713 | 0,020 € | 0,055 € | 0,603 € | 8,407 € |
GP_8_1024 | 583,00 € | 574,00 € | 51375 | 56428 | 0,011 € | 0,010 € | 729,47 € | 1 889,47 € | 4 209,47 € | 62496 | 45416 | 47342 | #N/D | 0,012 € | 0,042 € | 0,089 € | #N/D | |
MO_8_1024 | 755,00 € | 755,00 € | 69446 | 69565 | 0,011 € | 0,011 € | 982,91 € | 2 142,91 € | 4 462,91 € | 1 077,44 € | 46194 | 47345 | 48372 | 48007 | 0,021 € | 0,045 € | 0,092 € | 11,799 € |
GP_16_1024 | 1 058,00 € | 1 040,00 € | 77250 | 73993 | 0,014 € | 0,014 € | 1 322,75 € | 2 482,75 € | 4 802,75 € | 74894 | 46458 | 52959 | #N/D | 0,018 € | 0,053 € | 0,091 € | #N/D | |
MO_16_1024 | 1 400,00 € | 1 401,00 € | 72340 | 77191 | 0,019 € | 0,018 € | 1 829,63 € | 2 989,63 € | 5 309,63 € | 2 042,24 € | 43456 | 47841 | 49108 | 127860 | 0,042 € | 0,062 € | 0,108 € | 8,218 € |
GP_2_2048 | 337,00 € | 334,00 € | 9585 | 6621 | 0,035 € | 0,050 € | 420,70 € | 1 580,70 € | 3 900,70 € | 22540 | #N/D | #N/D | #N/D | 0,019 € | #N/D | #N/D | #N/D | |
MO_2_2048 | 379,00 € | 379,00 € | 11120 | 8331 | 0,034 € | 0,045 € | 484,06 € | 1 644,06 € | 3 964,06 € | 466,48 € | 20761 | #N/D | #N/D | 16834 | 0,023 € | #N/D | #N/D | 8,718 € |
GP_4_2048 | 455,00 € | 451,00 € | 24501 | 20609 | 0,019 € | 0,022 € | 569,02 € | 1 729,02 € | 4 049,02 € | 42415 | #N/D | #N/D | #N/D | 0,013 € | #N/D | #N/D | #N/D | |
MO_4_2048 | 541,00 € | 541,00 € | 37207 | 24624 | 0,015 € | 0,022 € | 695,74 € | 1 855,74 € | 4 175,74 € | 707,68 € | 44550 | #N/D | #N/D | 30713 | 0,016 € | #N/D | #N/D | 8,410 € |
GP_8_2048 | 692,00 € | 683,00 € | 62430 | 54995 | 0,011 € | 0,012 € | 865,66 € | 2 025,66 € | 4 345,66 € | 68180 | #N/D | #N/D | #N/D | 0,013 € | #N/D | #N/D | #N/D | |
MO_8_2048 | 864,00 € | 864,00 € | 74070 | 67194 | 0,012 € | 0,013 € | 1 119,10 € | 2 279,10 € | 4 599,10 € | 1 190,08 € | 70506 | #N/D | #N/D | 48007 | 0,016 € | #N/D | #N/D | 11,801 € |
GP_16_2048 | 1 167,00 € | 1 149,00 € | 58392 | 71574 | 0,020 € | 0,016 € | 1 458,94 € | 2 618,94 € | 4 938,94 € | 72923 | #N/D | #N/D | #N/D | 0,020 € | #N/D | #N/D | #N/D | |
MO_16_2048 | 1 509,00 € | 1 510,00 € | 74289 | 67449 | 0,020 € | 0,022 € | 1 965,82 € | 3 125,82 € | 5 445,82 € | 2 154,88 € | 76100 | #N/D | #N/D | 127860 | 0,026 € | #N/D | #N/D | 8,219 € |
*Coûts Aurora : Sont exclu ici les coûts inhérents aux IOPS qui sont à rajouter à la facture globale (0.00000022 / IO mensuelle)
Comparatif TPM / Coût
Stockage 128Mo
Stockage 256Mo
Stockage 512Mo
Stockage 1024Mo
Stockage 2048Mo
*Coûts Aurora : Sont exclu ici les coûts inhérents aux IOPS qui sont à rajouter à la facture globale (0.00000022 / IO mensuelle)
Conclusion
Ce comparatif aura montré d’une part que bien qu’Aurora soit un PaaS très performant qui de prime abord peut paraitre peu onéreux (si on ne prend que le prix de base instance + stockage) ce prix peut vite devenir important en fonction des opérations (et donc des IO) lancées sur celui-ci, on le réservera donc à des besoins spécifiques bien calibrés.
D’autre part, Azure bien qu’assez récent dans le domaine des PaaS PostgreSQL se montre un très bon challenger face à AWS avec des tarifications assez agressives et des performances plus qu’acceptables notamment sur les instances de type Flexible Server (performances à revérifier lors de la disponibilité en “General Availability” tout de même).
Continuez votre lecture sur le blog :
- Azure et PostgreSQL en PaaS (Capdata team) [AzurePostgreSQL]
- AWS RDS, Aurora et PostgreSQL (Capdata team) [AWSPostgreSQL]
- Stocker ses bases de données dans un Azure Blob Storage : l’impossible dilemme ? (Capdata team) [AzureSQL Server]
- Comparatif MySQL dans le PaaS, épisode 3 : Amazon RDS (1/2) (David Baffaleuf) [AWSMySQL]
- MySQL dans le PaaS : le radar de notation des solutions (David Baffaleuf) [AWSAzureGCPMySQL]