Les applications dynamiques, par opposition au contenu statique d'un site Web, désignent des logiciels d'application Web développés avec des langages côté serveur tels que C/C++, PHP, Java, Perl, .NET, comme les forums, les albums photo en ligne, les réseaux sociaux, les BLOG et d'autres applications courantes. Les systèmes d'application dynamiques sont généralement indissociables des systèmes de bases de données, des systèmes de cache, des systèmes de stockage distribué, etc.

La plateforme de systèmes d'application dynamiques à grande échelle est avant tout une architecture système de bas niveau établie pour les sites Web à fort trafic et à forte concurrence. Le fonctionnement des grands sites Web nécessite une plateforme de systèmes d'application fiable, sécurisée, évolutive et facile à maintenir comme support afin de garantir le bon fonctionnement des applications du site Web.

Les systèmes d'application dynamiques à grande échelle peuvent être subdivisés en plusieurs sous-systèmes :

  • 1) Système frontal Web
  • 2) Système d'équilibrage de charge
  • 3) Système de cluster de bases de données
  • 4) Système de cache
  • 5) Système de stockage distribué
  • 6) Système de gestion de serveurs distribués
  • 7) Système de distribution de code

Système front-end Web

Schéma de structure :

Afin d'atteindre les objectifs de partage de serveurs entre différentes applications, d'éviter les points de défaillance uniques, de gestion centralisée, de configuration unifiée, etc., les serveurs ne sont pas divisés par application. Au lieu de cela, tous les serveurs sont utilisés de manière uniforme, et chaque serveur peut fournir des services à plusieurs applications. Lorsque le trafic vers certaines applications augmente, l'ajout de nœuds de serveur améliore les performances de l'ensemble du cluster de serveurs, et les autres applications en bénéficient également. Ce système front-end Web est basé sur des plateformes d'hébergement virtuel telles que Apache/Lighttpd/Eginx et fournit un environnement d'exécution de programmes PHP. Les serveurs sont transparents pour les développeurs, et les développeurs n'ont pas besoin de s'impliquer dans la gestion des serveurs.

Système d'équilibrage de charge

Les systèmes d'équilibrage de charge sont divisés en deux types : matériel et logiciel. L'équilibrage de charge matériel est efficace mais coûteux, comme F5. Les systèmes d'équilibrage de charge logiciels sont peu coûteux ou gratuits, et bien que moins efficaces que les systèmes d'équilibrage de charge matériels, ils sont suffisants pour les sites web ayant un trafic moyen ou légèrement supérieur, comme LVS et Nginx. La plupart des sites web utilisent une combinaison de systèmes d'équilibrage de charge matériels et logiciels.

Système de cluster de bases de données

Schéma de structure :

Puisque le front-end Web utilise une structure de cluster à équilibrage de charge pour améliorer la disponibilité et l'évolutivité du service, la base de données doit également être hautement fiable afin de garantir la haute fiabilité de l'ensemble du système de service. Comment pouvons-nous construire un système de base de données hautement fiable capable de gérer un traitement concurrent à grande échelle ?

Nous pouvons adopter la solution illustrée dans le schéma ci-dessus :

1) Utilisez la base de données MySQL. Compte tenu de la caractéristique des applications Web selon laquelle les lectures de base de données sont plus fréquentes que les écritures, nous avons principalement optimisé la base de données de lecture en fournissant des bases de données de lecture et d'écriture dédiées, et implémenté les opérations de lecture et d'écriture dans l'application pour accéder respectivement à différentes bases de données.

2) Utilisez le mécanisme de réplication MySQL pour répliquer rapidement les données de la base de données maître (base de données d'écriture) vers les bases de données esclaves (bases de données de lecture). Une base de données maître correspond à plusieurs bases de données esclaves, et les données de la base de données maître sont synchronisées en temps réel vers les bases de données esclaves.

3) Il existe plusieurs bases de données d'écriture, chacune pouvant être partagée par plusieurs applications. Cela permet de résoudre le problème de goulot d'étranglement des performances et le problème de point de défaillance unique des bases de données d'écriture.

4) Il existe plusieurs bases de données de lecture, et l'équilibrage de charge est réalisé via des dispositifs d'équilibrage de charge, ce qui permet d'obtenir des bases de données de lecture à hautes performances, haute fiabilité et haute scalabilité.

5) Les serveurs de bases de données sont séparés des serveurs d'applications.

6) Utilisez BigIP pour l'équilibrage de charge des bases de données esclaves.

Système de cache

La mise en cache est divisée en mise en cache de fichiers, mise en cache en mémoire et mise en cache de base de données. Dans les applications Web à grande échelle, la mise en cache en mémoire est la plus largement utilisée et la plus efficace. L'outil de mise en cache en mémoire le plus couramment utilisé est Memcached. L'utilisation d'un système de mise en cache approprié permet d'atteindre les objectifs suivants :

1. L'utilisation d'un système de cache peut améliorer l'efficacité d'accès, augmenter le débit du serveur et améliorer l'expérience utilisateur.

2. Réduire la pression d'accès sur les bases de données et les serveurs de stockage.

3. Il existe plusieurs serveurs Memcached pour éviter les points de défaillance uniques, fournir une haute fiabilité et scalabilité, et améliorer les performances.

Système de stockage distribué

Schéma de structure :

Les exigences de stockage dans une plateforme système Web présentent les deux caractéristiques suivantes :

1) La capacité de stockage est très grande, atteignant souvent une échelle qu'un seul serveur ne peut pas fournir, comme pour des applications telles que les albums photo et les vidéos. Par conséquent, un système de stockage professionnel à grande échelle est nécessaire.

2) Chaque nœud du cluster à répartition de charge peut accéder à n'importe quel objet de données, et le traitement des données de chaque nœud peut également être partagé par d'autres nœuds. Par conséquent, les données sur lesquelles ces nœuds doivent opérer ne peuvent logiquement être qu'un tout, et non des ressources de données indépendantes.

Par conséquent, un système de stockage distribué à haute performance est une partie très importante des applications de sites Web à grande échelle. (Une brève introduction à un système de stockage distribué doit être ajoutée ici.)

Système de gestion de serveurs distribués

Schéma de structure :

Avec l'augmentation continue du trafic des sites Web, la plupart des services réseau fournissent des services externes sous la forme de clusters à répartition de charge. À mesure que l'échelle du cluster s'accroît, le modèle original de gestion de serveurs basé sur une machine unique ne peut plus répondre à nos besoins. Les nouvelles exigences doivent pouvoir gérer les serveurs de manière centralisée, groupée, par lots et automatisée, et exécuter des tâches planifiées par lots.

Parmi les logiciels de système de gestion de serveurs distribués, il existe d'excellents programmes, et l'un des plus idéaux est Cfengine. Il peut regrouper les serveurs, et différents groupes peuvent personnaliser séparément les fichiers de configuration système, les tâches planifiées et d'autres configurations. Il est basé sur une structure C/S. Toutes les configurations de serveur et les programmes de scripts de gestion sont stockés sur le Cfengine Server, tandis que les serveurs gérés exécutent le programme Cfengine Client. Le Cfengine Client envoie périodiquement des requêtes au côté serveur via des connexions chiffrées SSL afin d'obtenir les derniers fichiers de configuration, commandes de gestion, programmes de scripts, installations de correctifs et autres tâches.

Avec un outil de gestion centralisée de serveurs comme Cfengine, nous pouvons mettre en œuvre efficacement la gestion de clusters de serveurs à grande échelle. Les serveurs gérés et le serveur Cfengine peuvent être répartis n'importe où, et tant que le réseau est connecté, une gestion automatisée rapide peut être obtenue.

Système de publication de code

Schéma de structure :

Avec l'augmentation continue du trafic des sites web, la plupart des services réseau fournissent des services externes sous la forme de clusters à répartition de charge. À mesure que l'échelle du cluster s'agrandit, afin de répondre à la distribution et à la mise à jour par lots du code de programme dans un environnement de cluster, nous avons également besoin d'un système de publication de code de programme.

Ce système de publication peut nous aider à atteindre les objectifs suivants :

1) Les serveurs de l'environnement de production fournissent des services sous forme d'hôtes virtuels, sans exiger que les développeurs soient impliqués dans la maintenance et les opérations directes. Le système de publication permet de distribuer les programmes vers les serveurs cibles sans se connecter aux serveurs.

2) Nous devons mettre en œuvre la gestion de quatre étapes de développement : développement interne, test interne, test en environnement de production et publication en environnement de production. Le système de publication peut intervenir dans la publication du code à chaque étape.

3) Nous devons mettre en œuvre la gestion du code source et le contrôle de version. SVN peut répondre à cette exigence.

Des outils courants tels que Rsync peuvent être utilisés ici, et en développant des outils de script correspondants, une distribution synchronisée du code entre les clusters de serveurs peut être réalisée.

Source : http://blog.csdn.net/dinglang_2009/article/details/6863697