Programmation pour le cloud

Effectué

La conception de programmes destinés au cloud nécessite des considérations particulières. Selon le type d’application et la charge attendue, les développeurs peuvent utiliser certaines des fonctionnalités proposées par les fournisseurs de cloud pour améliorer la scalabilité et la maintenabilité des programmes. L’utilisation de systèmes de mise à l’échelle automatique et d’équilibreurs de charge permet aux développeurs d’augmenter ou de réduire dynamiquement l’infrastructure en fonction de l’utilisation du matériel ou d’un facteur de charge calculé par programmation.

Un développeur doit tenir compte de plusieurs considérations durant le développement ou la migration d’une application vers le cloud, en particulier celles qui concernent le niveau de performance et la sécurité.

Facteurs de performance des applications pour le cloud

L’environnement d’un centre de données axé sur le cloud est différent de ce à quoi les développeurs peuvent être habitués durant la conception et le déploiement d’applications sur une infrastructure détenue. Certains développeurs ont du mal à affiner ou à améliorer le niveau de performance de leurs applications, car ils n’ont pas accès à la topologie matérielle physique ou aux spécifications des clouds publics. Nous allons essayer d’énumérer certains des principaux problèmes, en mettant l’accent sur les facteurs qui affectent le niveau de performance des applications cloud :

Bande passante et latence des ressources

La latence est une préoccupation majeure pour le développement et le déploiement d’applications cloud. Les développeurs doivent planifier leurs applications en gardant à l’esprit des exigences de latence strictes. Il existe une approche qui consiste à compiler la distribution des localisations des clients. Cela permet aux développeurs de trouver l’ensemble optimal de localisations de centres de données pour optimiser les performances et la réactivité des applications destinées à l’utilisateur final. Cela est particulièrement vrai dans les applications web, où les requêtes HTTP individuelles liées au contenu web statique peuvent représenter une fraction importante des temps de chargement des pages web.

En plus de la latence, les applications peuvent également avoir des exigences strictes relatives à la bande passante, notamment celles qui gèrent des contenus multimédias riches tels que l’audio et la vidéo. De nombreux fournisseurs de cloud permettent aux développeurs cloud de spécifier des paramètres de performance durant le provisionnement, sous la forme d’exigences IOPS pour les ressources de calcul et de stockage. De plus, de nombreux fournisseurs de cloud permettent aux développeurs de configurer des réseaux virtuels. L’implémentation et l’adoption de réseaux et de stockages à définition logicielle (comme nous le verrons dans les prochains modules) fournissent des insights supplémentaires sur les dernières techniques que les centres de données utilisent pour gérer le trafic de plusieurs clients tout en manageant les exigences individuelles spécifiées dans les SLO (objectifs de niveau de service) de ces clients.

Les techniques mentionnées ci-dessus sont principalement destinées au contenu statique. Il existe un problème beaucoup plus difficile, l’optimisation de la latence de l’accès aux systèmes de stockage de données distribué, en particulier ceux qui doivent gérer les écritures et les mises à jour. Nous en apprendrons un peu plus sur ces préoccupations dans les prochains modules.

Architecture multilocataire

Les applications des centres de données publics s’exécutent généralement sur une infrastructure partagée. Cet aspect des services cloud soulève plusieurs problèmes importants. Bien que les technologies de virtualisation modernes fournissent un environnement isolé en termes d’environnement d’application et de sécurité, ils ne peuvent généralement pas garantir l’isolation des performances. Les ressources virtualisées liées aux clouds ne peuvent donc pas garantir une cohérence du niveau de performance à tout moment. Les performances d’une ressource à tout moment sont une fonction de la charge totale sur les ressources de tous les locataires, également appelée interférence d’autres locataires partageant le même matériel.

Certains fournisseurs de cloud, tels qu’Azure, offrent aux clients la possibilité de provisionner certains types de ressources (telles que des machines virtuelles) sur du matériel dédié. Cela permet d’éviter les fluctuations de performance importantes. Ainsi, les ressources offrent un niveau de performance relativement cohérent. Toutefois, les instances basées sur du matériel dédié coûtent beaucoup plus cher que les instances à la demande normales, car Azure doit affecter un serveur exclusivement aux ressources.

Un aspect connexe de l’architecture multilocataire est le problème de la variation d’approvisionnement, où les demandes identiques de ressources virtuelles sur les clouds publics ne sont pas mappées de manière identique sur des ressources physiques, ce qui entraîne une variation des performances. 1 Par exemple, deux demandes identiques pour les machines virtuelles (VM1 et VM2) peuvent être acheminées vers deux machines physiques différentes (A et B). La machine physique A peut avoir quatre autres locataires en concurrence pour des ressources situées sur la même machine, alors que la machine B peut n’en avoir que deux. Le client est facturé de la même façon pour les machines virtuelles VM1 et VM2, alors que le niveau de performance peut être différent sur ces machines.

Paramètres de sécurité

Les clouds ​​publics sont soumis à des vecteurs d’attaque accrus, comme nous l’avons vu dans l’unité 1. Les développeurs doivent être extrêmement vigilants. Ils doivent suivre les bonnes pratiques, les protocoles et les procédures nécessaires durant le déploiement et la maintenance des applications sur le cloud. Ainsi, le niveau de performance peut être l’objet de charges supplémentaires en raison de l’utilisation de protocoles de sécurité imposés par les clouds publics.

Dans la mesure où nous avons discuté de ces protocoles dans un module précédent, nous ne les aborderons pas à nouveau en détail. Tout code déployé sur un cloud public doit passer par un processus strict, à la fois manuel et automatisé, qui comprend des analyses statiques et des revues de code source ainsi que des tests d’intrusion et des analyses de vulnérabilité dynamiques. Les recommandations relatives au déploiement d’applications de manière sécurisée sont présentées à la page suivante.


Références

  1. Rehman, M.S et Sakr, M.F (2010). Résultats initiaux pour la variation de l'approvisionnement dans le cloud computing de la deuxième conférence internationale IEEE de 2010 sur la technologie et la science du cloud computing (CloudCom)