Passage à l'échelle d'une application web![]() Le passage à l'échelle[1], anglicisme pour le redimensionnement et la mise à l'échelle, est la faculté qu’a un système à pouvoir changer de taille ou de volume selon les besoins des utilisateurs. La disponibilité et la latence (temps de réponse) font partie des critères de qualité d'un site web. Le nombre d’utilisateurs d’un site variant de jour en jour, il s’avère difficile et coûteux de prévoir les ressources nécessaires au bon fonctionnement du site. Ainsi, posséder la faculté d'être capable de passer facilement l’application à l’échelle s'avère donc un atout majeur pour un site. Le cloud computing répond à ce besoin. Il permet d’ajuster les ressources matérielles de manière dynamique et transparente en fonction de la charge utilisateurs pour assurer une disponibilité continue du site et un délai de réponse correct. Avantages du cloudLe cloud computing répond aux besoins suivants :
Introduction au passage à l'échelleLorsque les capacités d'une machine qui héberge une application web, appelée serveur, sont trop limitées pour supporter le nombre de requêtes utilisateurs, plusieurs solutions sont envisageables : ![]()
Pour une mise à l'échelle optimale, une application basée sur le cloud doit être distribuée. Une architecture distribuée est une architecture qui divise une application en plusieurs éléments (appelés couches) logiques indépendants. L'architecture n-tier est un exemple d'architecture logicielle distribuée. Les architectures distribuées permettent de déployer chaque couche du logiciel sur un ensemble de machines différentes (appelé cluster) diminuant ainsi la charge de chaque machine. On pourra donc appliquer la scalabilité horizontale sur chacune de ces couches[4]. Répartition de la chargeDans le cas du cloud, la mise à l'échelle horizontale est privilégiée. Ainsi, plusieurs serveur web sont capables de répondre à la demande de l'utilisateur. Afin de répartir la charge équitablement entre plusieurs serveurs, un composant appelé Load balancer sert d'interface entre l'utilisateur et les serveurs web. Ce composant a la responsabilité d'orienter une requête utilisateur vers l'un des serveurs web. Infrastructure élastique (auto-scaling)![]() L'auto-scaling consiste à optimiser le coût de l'hébergement de l'application tout en maximisant sa disponibilité et en conservant un délai de réponse qui satisfait l'utilisateur. Pour cela, les hébergeurs adaptent dynamiquement et sans intervention humaine le nombre de serveurs selon la charge de l'application à un moment donné[5]. Une application élastique a la capacité :
Le processus d'auto-scaling, appelé MAPE loop du système, se déroule en quatre étapes :
MonitorUn système d'auto-scaling a besoin d'un système de monitoring fournissant des informations sur la demande utilisateurs et l'état/statut de l'application.
Pour analyser l'état du système, le moniteur observe au niveau :
AnalyzeLa phase d'analyse consiste à traiter les données rassemblées lors de l'étape de Monitoring. Il existe deux types d'auto-scaler :
PlanUne fois l'état de l'application connu, l'auto-scaler est chargé de planifier la mise à l'échelle des ressources. ExecuteCette étape passe en exécution le passage à l'échelle des ressources trouvées dans l'étape précédente. L'exécution du passage à l'échelle des serveurs peut prendre un certain temps non négligeable (démarrage des serveurs, installations des logiciels, modifications réseaux). Ainsi, les auto-scaler proactifs ont pour objectif d'anticiper ce temps de mise en place pour répondre au mieux à la demande. Cette étape est réalisée par une API du fournisseur du cloud. Le stockageLes demandes des utilisateurs sont maintenant réparties entre plusieurs serveurs Web utilisant un mécanisme de répartition de charge. Les serveurs web font ensuite appel à la base de données pour obtenir les informations persistantes. Par conséquent, la base de données doit aussi être étudiée pour pouvoir traiter les demandes entrantes avec une latence acceptable. Fichiers statiques![]() Les applications web contiennent souvent du contenu statique, par exemple des images, des vidéos, des fichiers javascript, des documents pdf. Pour pouvoir réduire au maximum la charge des serveurs d'application exécutant du code dynamique, les applications de cloud utilisent un serveur dédié à stocker des fichiers statiques volumineux. Sur ce serveur, les données sont organisées dans une hiérarchie de dossiers similaires à un système de fichiers ordinaire. Chaque fichier statique reçoit un identificateur unique composé de son emplacement dans la hiérarchie du dossier et le nom du fichier[6]. Base de donnéesLa mise à l'échelle d'une base de données est caractérisée par la scalabilité en écriture, en lecture et en stockage données. Plusieurs techniques permettent de mettre à l'échelle les différents types de base de données :
Réplication![]() La réplication est une technique permettant de dupliquer une instance de base de données en plusieurs instances identiques (possédant les mêmes données). Elle est utilisée pour la mise à l'échelle en lecture des données. Cette technique améliore la disponibilité d'une application. En effet, si l'une des répliques est indisponible, il est toujours possible pour les autres instances de répondre à une demande de lecture. Toutes les répliques étant capable de répondre, les requêtes de lecture peuvent être distribuées entre chacune d'elles. Ainsi la charge de travail de chaque serveur et par conséquent la latence d'une réponse diminue[7]. Cette solution possède plusieurs inconvénients :
Il existe deux types principaux de réplication[8] :
PartitionLe partitionnement permet de mettre à l'échelle la capacité en écriture d'une base de données en séparant les données en partitions (ou shards). Le partitionnement permet de séparer les données dans différents serveurs indépendants[9]. Il existe deux types de partitionnement :
Cette méthode permet d’améliorer les performances des bases de données et de simplifier la gestion de bases de données de très grande ampleur. Le partitionnement augmente les performances des requêtes puisque les ensembles de données sont plus petits comparés à une table unique de grande taille (scalabilité en lecture, écriture et stockage)[10]. Bases de données relationnellesLes bases de données relationnelles respectent plusieurs caractéristiques principales regroupées sous l'acronyme ACID. Les bases de données relationnelles sont facilement réplicables. Cependant, partitionner ce type de base de données s'avère complexe. De plus, garantir la consistance des données est souvent incompatible avec les performances. Ainsi, le passage à l'échelle horizontal est délicat pour ce type de base de données. Comme le modèle relationnel ne semble pas adapté aux environnements nécessitants de grosses architectures distribuées et que les propriétés ACID des bases de données ne permettent généralement pas de passer à l'échelle de manière horizontale et optimale[11], les concepteurs du cloud computing et de grands sites communautaires ont proposé un nouveau modèle de base de données : NoSQL[12]. Bases de données NoSQLLes bases de données NoSQL se basent sur le théorème CAP, mieux adapté aux données massivement partagées, qui déclare qu'il est impossible sur un système informatique de calcul distribué de garantir en même temps les trois contraintes suivantes[13] :
La première propriété (la cohérence) du théorème CAP est parfois intéressante à supprimer car elle permet d'augmenter les performances de manière non négligeable[11]. Ainsi, certains sites préfèrent optimiser la disponibilité et la latence de l'application au détriment de ne pas fournir une réponse identique pour une même requête. Le fait d'accepter des données inconsistantes est connu sous le nom de BASE (Basically Available, Soft-state, Eventually consistent) en opposition aux propriétés ACID. Si la cohérence est importante pour certaines données du système, il est d'usage d'isoler ces données dans des bases relationnelles et de placer les autres données dans des bases NoSQL. Les bases de données NoSQL facilitent le passage à l'échelle en utilisant plusieurs systèmes qui mettent en œuvre les propriétés citées par le théorème CAP. Les voici :
Base de données clé-valeur (Key-value store)Ce type de base de données est considérée comme la plus élémentaire et la plus simple à utiliser. On y trouve un ensemble de couples clé-valeur représentant chacun une donnée. Chacune des valeurs stockées dans la base de données peut avoir un type différent. Mais ce type est opaque, sa nature est donc masquée. Il est alors impossible de connaître et de modifier le contenu de la valeur. On peut simplement la stocker et la transmettre dans une base de données. Afin d'identifier chaque valeur sans ambiguïté, celle-ci est alors associée à une clé unique. C'est grâce à cette clé que l'on pourra connaître et modifier le contenu de la valeur. Les clés et les valeurs ne sont pas obligatoirement du même type. Ces bases de données sont très efficaces dans le stockage de données distribuées. Elles sont ainsi performantes pour :
Par contre, le type opaque des valeurs empêche de manier les requêtes au niveau données et de faciliter l'accès aux données à l'aide de l'indexation sur les données puisqu'il est impossible de récupérer ou de changer le contenu d'une valeur. Ces bases de données sont seulement capables de lancer des requêtes sur les clés. De plus elles sont dans l'obligation d'utiliser des applications clientes car elles n'ont pas la possibilité de gérer les relations entre les différentes données[14]. Base de données orientée documentTout comme les bases de données clé-valeur, le système de stockage d'une base de données orientée document se fait toujours sous forme d'un couple clé-valeur. Par contre, la valeur est représentée à l'aide d'un document dont le format n'est pas imposé. Le plus souvent, ils seront de type JSON. Il n'est pas obligatoire que tous les documents d'une base de données orientée document possèdent la même structure. Les bases de données orientées document peuvent grâce à la clé primaire, générer des requêtes et indexer les documents. Elles peuvent également le faire à l'aide de la valeur puisque son type est connu, il n'est pas opaque. Mais elles n'ont pas la capacité à sauvegarder des relations entre les données, les obligeant ainsi à faire appel à des applications clientes[15]. Base de données orientée colonneContrairement aux bases de données relationnelles qui stockent les données par ligne, celles-ci le font par colonne. L'ensemble des données est enregistré dans un ensemble de lignes. Chacune d'entre elles corresponde à une clé primaire. Les bases de données orientées colonne sont constituées d'un ensemble de famille de colonnes qui contiennent toutes les valeurs. Grâce aux ensembles de famille de colonnes, ce type de base de données offre de puissantes capacités de génération de requêtes et d'indexation des données. Mais elles ne possèdent pas l'aptitude à stocker les différentes relations entre les données[15]. Base de données orientée grapheUne base de données orientée graphe s'appuie sur la théorie des graphes. Les données sont décrites par des nœuds. Quant aux relations entre les différentes données, celles-ci sont symbolisées via les arcs du graphe. Contrairement aux autres bases de données, elles peuvent stocker efficacement les relations entre les différentes données. Elles sont également spécialisées dans le traitement des données interconnectées[16]. Communication : messages asynchrones (files)Les composants d'une application distribuée sont hébergés sur plusieurs ressources du cloud et doivent échanger des informations entre eux. Le mode de communication privilégié est la file de message car elle permet l'échange de messages asynchrones. L'utilisation des files de messages (structure FIFO) permet de mettre en attente les messages envoyés lorsque le receveur n'est plus capable de traiter les messages reçus, facilitant ainsi la flexibilité de traitement du receveur[17]. Ce système de communication permet de se prémunir contre la surcharge du serveur destinataire. De plus, l'observation de l'état de la file de messages permet d'obtenir des informations sur l'état du serveur. Il existe plusieurs variantes de file de messages dont la file de messages avec messages prioritaires. Ce type de communication est souvent utilisé dans le cloud entre les serveurs logiques et les serveurs de base de données. Traitement : map reduceMaintenant que les données sont distribuées à l'aide des mécanismes de réplication et de partition sur plusieurs instances de bases de données, il est nécessaire de traiter les données de façon distribuée. Il faut donc synchroniser les données entre les différents serveurs de bases de données tout en diminuant leur charge de travail. Cela implique de répartir d'une certaine manière, le travail entre les différents serveurs. Afin de gérer et traiter un grand volume de données, un framework nommé MapReduce a été mis en œuvre. Il permet de simplifier le traitement parallèle des données grâce à deux interfaces: map et reduce[18]. L'interface map partage le travail alors que l'interface reduce synchronise les données entre les différents nœuds du cluster[19]. Le framework MapReduce possède ainsi des propriétés importantes dans le passage à l'échelle[20] :
Notes et références
AnnexesBibliographie
Articles connexes |
Portal di Ensiklopedia Dunia