Maison >développement back-end >tutoriel php >PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Lisa Kudrow
Lisa Kudroworiginal
2025-02-25 10:05:09430parcourir

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Cet article est partagé à partir de l'un de nos sites sœurs, CloudSpring. Si vous le trouvez utile, assurez-vous de leur rendre visite!

Ce tutoriel vous montrera comment utiliser Amazon DynamoDB comme installation de stockage pour les sessions PHP. Cette méthode devient très utile lorsque vos applications profitent des services d'équilibrage et d'automate de charge élastique. Vous aurez besoin du compte Amazon AWS activé d'utiliser EC2, Elastic Load Balancer et DynamoDB comme condition préalable pour jouer le long du tutoriel.

Les plats clés

  • Amazon DynamoDB peut être utilisé comme une installation de stockage pour les séances PHP, ce qui est particulièrement utile lorsque les applications tirent parti de l'équilibrage de la charge élastique et des services d'autoscalités.
  • L'équilibreur de charge élastique agit comme un frontal pour un ou plusieurs serveurs virtuels, distribuant des demandes entre eux. L'automate permet au système de démarrer plus de clones des serveurs Web lorsqu'il y a un trafic élevé et d'arrêter un peu lorsque le trafic baisse.
  • Les données de session PHP doivent être stockées en dehors du serveur virtuel. Une option consiste à stocker des sessions dans une base de données comme DynamoDB, qui est une base de données NOSQL puissante et rapide gérée par Amazon.
  • La classe Amazondynamodb du SDK PHP officiel est équipée pour s'inscrire en tant que gestionnaire de session. Le SDK AWS pour PHP permet aux développeurs de créer plus facilement des applications qui exploitent le cloud AWS rentable, évolutif et fiable.

Qu'est-ce qu'un équilibreur de charge élastique

L'équilibreur de charge élastique agit comme un frontal pour un ou plusieurs de vos serveurs virtuels. Il accepte les demandes et les distribue entre les serveurs virtuels. Les serveurs virtuels peuvent être créés en clonage un modèle de machine (AMI) ou peuvent être détruits si nécessaire. Traitement de l'alimentation si votre application peut varier en ajoutant ou en réduisant dynamiquement les serveurs virtuels.

et automatiquement?

Lorsque la mise à l'échelle automatique rejoint le jeu, le système peut également:
  • Démarrer plus de clones des serveurs Web lorsqu'il y a un trafic élevé
  • Arrêter certains d'entre eux lorsque le trafic tombe en dessous d'un seuil prédéfini
  • terminer les instances malsaines et les remplacer si nécessaire

comment puis-je faire?

L'une de vos applications peut-elle fonctionner dans cet environnement? Oui s'il satisfait deux exigences critiques:
  • Étant donné que les serveurs virtuels sont créés dynamiquement, les serveurs ne doivent contenir que le code d'application et non aucune donnée. Ceci est facilement faisable avec un service de base de données.
  • Tout état de session utilisateur doit être persisté en dehors du serveur virtuel. Ceci est un peu plus difficile, car par défaut, le module PHP stocke ces données dans le système de fichiers du serveur Web Che.
Et c'est le problème que nous allons essayer de résoudre dans ce… euh, session.

que ne pas faire: sessions collantes

Sticky Session est une fonctionnalité du service d'équilibreur de charge élastique qui lie la session d'un utilisateur à une instance d'application spécifique, de sorte que toutes les demandes provenant de l'utilisateur pendant la session seront envoyées au même serveur virtuel. Le cookie de session peut être généré par l'équilibreur de chargement ou l'application, mais: c'est considéré comme une mauvaise pratique. L'idéal serait de concevoir l'application comme apatride, mais ce n'est pas toujours possible.

Stockez vos sessions dans une base de données

L'autre option est: stocker nos sessions dans une base de données. Il peut s'agir de la même base de données SQL externe utilisée par l'application ou une instance MemCache ou une autre base de données NOSQL. Dans ce cas, DynamoDB semble très intéressant car il s'agit d'une base de données NOSQL puissante et rapide, elle est gérée par Amazon elle-même et est également facile à partir de nos serveurs virtuels. De plus, la classe Amazondynamodb du SDK PHP officiel est déjà équipée pour s'inscrire en tant que gestionnaire de session. Si vous n'avez jamais entendu parler de DynamoDB, je vous recommande de regarder cette vidéo d'introduction.

L'application de démonstration

J'ai mis en place une application simple pour tester l'intégralité du mécanisme, vous pouvez télécharger le code source à partir de notre référentiel GitHub. Nous exécuterons cette application à l'aide d'un équilibreur de charge élastique et au moins deux instances. Nous n'utiliserons pas la mise en scène pour le moment.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

L'application demande à l'utilisateur de choisir un nom d'utilisateur qui est stocké dans la session en cours et agit comme une «connexion». Si un nom d'utilisateur est présent dans la session, l'application permet à l'utilisateur d'insérer une sorte de «profil», essentiellement une série d'informations de clé / valeur telles que le nom, le nom de famille, l'e-mail, etc. (la clé et la valeur sont des chaînes). Toute cette logique est incluse dans le fichier index.php.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Le session.php Le fichier contient une bibliothèque de session simple. Cette bibliothèque nous permet de gérer les données de session avec des méthodes amicales telles que $ session-> read ('some_var') et $ session-> write ('some_key', 'some_value'). Cet objet de session peut être configuré pour utiliser le mécanisme de session PHP par défaut (si nous sommes un serveur de test local) ou une classe personnalisée. La première étape de notre fichier d'application est le démarrage de session:
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
La valeur du moteur par défaut est PHP qui n'a pas besoin de paramètres. Si nous choisissons le moteur «Amazondynamodb», le constructeur de session exécutera un code supplémentaire:
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name'       => $params['table_name'],
</span><span>'lifetime'         => $params['lifetime'],
</span><span>));
</span><span>break;</span>
Nous chargeons d'abord le SDK AWS qui doit être déjà installé et accessible, puis nos informations d'identification sont chargées dans l'environnement AWS. À partir de ce moment, nous pouvons utiliser des classes AWS, donc une nouvelle instance d'Amazondynamodb est créée et configurée avec la bonne région où réside notre table. Enfin, nous disons à notre objet DynamoDB de s'inscrire en tant que gestionnaire de session passant le nom de la table à utiliser, et c'est vraiment ce dont nous avons besoin. Le fichier config.php est l'endroit où nous indiquons à l'application quel moteur que nous souhaitons utiliser, également nos paramètres AWS Credentials et DynamoDB sont enregistrés ici. Dans l'index.php, j'ai également inclus une petite fonction utilitaire qui, si nous ne sommes pas dans le serveur local, récupère le nom de l'instance dans laquelle est en cours d'exécution. Ceci est utile pour vérifier que la session est maintenue cohérente sur nos serveurs.
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
La fonction getServerName () utilise l'API Metadata EC2 pour trouver le nom de l'instance. Exécutez l'application sur votre flotte Afin de tester cette application, nous avons besoin d'une flotte d'au moins deux serveurs Web derrière un équilibreur de charge. Le serveur que j'ai utilisé est une instance Ubuntu GNU / Linux équipée de:
  • Le serveur Web Apache,
  • php 5.3 (à la fois la ligne de commande et le module Apache),
  • Le programme Curl et l'extension PHP,
  • Le gestionnaire de packages de puits (nécessaire pour installer facilement le SDK),
  • Le SDK AWS pour PHP (je suggère l'installation par poire).
Si vous savez comment construire un ami, vous pouvez construire le vôtre à partir de zéro. Mais vous pouvez également utiliser celui que j'ai préparé et rendu public: AMI-4B42443F. Cette machine contient déjà le code source PHP pour l'application et toutes les autres dépendances. Une fois que vous avez votre ami prêt… allons-y!

Initialiser le stockage de session

Accédez à votre console AWS, sélectionnez le service DynamoDB et votre région préférée (le mien est UE West - Irlande). Cliquez sur le bouton «Créer la table».

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Entrez «Test_Sessions» comme nom de table et choisissez une clé primaire de chaîne appelée «ID», le type de clé doit être «Hash». Si vous choisissez un autre nom, il doit être copié dans le fichier config.php plus tard. Entrez «10» pour les champs de lecture et de capacité d'écriture (par exemple. Quelle est la vitesse de votre table), cela suffit à tester.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Maintenant, vous avez une table NoSQL où chaque ligne a un champ d'ID obligatoire mais peut avoir un nombre variable d'autres champs différents de chaîne de types, numéro, ensemble de chaînes ou ensemble de nombres. L'objet Session Manager utilisera un champ de chaîne nommé «Data» pour stocker les variables de la session et un champ de nombres nommé «Expire» pour l'horodatage d'expiration de la session.

Lancez et configurez les serveurs

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Sélectionnez maintenant le service EC2 et la même région que vous avez choisie pour la table DynamoDB. Cliquez sur le bouton «Lancez l'instance» à partir du tableau de bord ou de la section «Instances». Sélectionnez votre AMI personnalisé ou, avec l'assistant classique, accédez à l'onglet «Community Amis» et entrez «AMI - 4B42443F». Dans l'écran suivant, entrez au moins «2» pour le nombre d'instances et choisissez votre type d'instance, j'ai choisi Micro (t1.micro). Vous pouvez laisser «aucune préférence» dans la liste déroulante de la zone de disponibilité, mais dans un environnement de production, il est préférable que les différentes instances soient distribuées entre deux zones ou plus dans la même région. Acceptez les paramètres par défaut pour les panneaux de configuration «Instance» et les panneaux de configuration du «périphérique de stockage», puis continuez. Entrez une ou plusieurs balises facultatives si vous le souhaitez. Choisissez une cave ou créez-en un nouveau et choisissez un groupe de sécurité qui permet au moins HTTP sur le port 80 et SSH sur le port 22.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Passez en revue vos paramètres, puis lancez les instances. Lorsque l'état des instances «s'exécute», ils peuvent être configurés via SSH. Chaque instance a un nom DNS public similaire à EC2-xxx-xxx-xx-xx.region.compute.amazonaws.com. Vous devrez modifier le fichier config.php sur chaque instance que vous avez créée. Connectez-vous à l'instance avec SSH ou avec un client SFTP en utilisant votre clé publique et le nom d'utilisateur «Ubuntu» (si vous avez utilisé mon AMI public): $ ssh -i /path/to/key.pem ubuntu@ec2-x-x-x-x.region.compute.amazonaws.com Modifiez le répertoire actuel en / var / www où se trouve l'application de test. Modifiez le fichier config.php inservant votre clé AWS et votre secret. Vérifiez ensuite si les paramètres de la table DynamoDB correspondent, vous devrez sûrement modifier la région avec la valeur appropriée que l'on peut trouver dans cette référence. Créez ensuite un fichier vide appelé ping.html à l'intérieur / var / www: ce fichier sera utilisé par l'équilibreur de chargement pour tester l'accès à chaque instance.

Configuration de l'équilibreur de charge

Avec la base de données et toutes les instances en place, nous pouvons désormais configurer l'équilibreur de charge Frontend. Dans le menu de navigation EC2, sous «Network & Security», choisissez «Charge Balancers» et cliquez sur le bouton «Créer un équilibreur de charge».

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Choisissez un nom pour l'équilibreur de charge et vérifiez que la configuration de l'écoute correspond à celle de la capture d'écran, qui dit essentiellement: Transférez tout le trafic HTTP sur le port 80 de l'équilibreur de charge à HTTP sur le port 80 des instances.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Dans le panneau de vérification de la santé, Entrez /ping.html dans le champ de chemin de ping et laissez les autres paramètres par défaut. Cela signifie: appelez la ressource / html / html de chaque instance toutes les 30 secondes, si le temps de réponse est plus long, alors 5 secondes, le chèque échoue, si l'instance échoue deux vérifications de santé consécutives, il est malsain, s'il passe 10 vérifications consécutives, l'instance est en bonne santé. L'équilibreur de charge ne transmettra pas le trafic vers une instance malsaine et si l'échelle automobile est en place, les instances malsaines peuvent être résiliées et remplacées par de nouvelles nouvelles.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

L'écran suivant vous permet de choisir lequel des instances en cours d'exécution peut être ajouté à l'équilibreur de charge. Sélectionnez les deux instances créées précédemment et continuez. Passez en revue la configuration finale et confirmez si elle vous convient. Maintenant, vous devriez être en mesure de voir les détails de l'équilibreur de charge et l'état de toutes les instances connectées.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Vous pouvez tester l'application en mettant le nom DNS de l'équilibreur de charge (quelque chose comme votre nom-12345678.region.elb.amazonaws.com) dans un navigateur. Vous pouvez également configurer un domaine ou un sous-domaine (par exemple Dynamo.yourDomain.com) en ajoutant un nom de CNAM dans votre panneau DNS qui pointe vers l'URL de l'équilibrage de charge. Il n'est pas recommandé d'utiliser l'IP avec un enregistrement A car l'IP peut changer les heures supplémentaires.

PHP Master | Amazon DynamoDB: stocker des séances PHP avec un équilibreur de charge

Chaque fois que vous soumettez le formulaire ou actualisez la page que vous demandez peut être traitée par une instance différente. Vous pouvez vérifier quelle instance vous sert par le nom affiché via l'utilitaire getServerName ().

Résumé

Et c'est tout pour l'instant. Nous avons couvert un sujet important dans l'écosystème AWS, mais ce n'est que le début. Toutes ces choses sont entièrement programmables, par exemple: vous pouvez ajouter l'automate et concevoir vos instances pour être auto-configurable et télécharger des informations d'identification AWS et d'autres données d'un endroit de confiance. Ou vous pouvez utiliser la formation de cloud pour créer un modèle réutilisable pour toute l'infrastructure. Le point de départ à vérifier est la page d'accueil AWS. Et maintenant, si vous avez terminé les tests, n'oubliez pas de résilier toutes vos affaires, sinon un codage heureux! Image via Fotolia

Questions fréquemment posées (FAQ) sur Amazon DynamoDB et PHP Sessions

Comment puis-je implémenter l'équilibrage de charge avec Amazon DynamoDB et PHP Sessions?

L'équilibrage de charge est un aspect crucial de la gestion du serveur et de la garantie de performances optimales. Avec Amazon DynamoDB et PHP Sessions, vous pouvez y parvenir en utilisant le service d'équilibrage de charge élastique d'Amazon (ELB). ELB distribue automatiquement le trafic d'application entrant sur plusieurs cibles, telles que les instances Amazon EC2, les conteneurs et les adresses IP. Il peut gérer la charge variable de votre trafic d'application dans une seule zone de disponibilité ou sur plusieurs zones de disponibilité.

Quels sont les avantages de l'utilisation d'Amazon DynamoDB pour les sessions PHP?

Amazon DynamoDB offre plusieurs avantages Pour les séances PHP. Il offre des performances rapides et prévisibles avec une évolutivité transparente. Vous pouvez faire évoluer vos tables vers le haut ou vers le bas pour ajuster le trafic, sans aucune dégradation des temps d'arrêt ni des performances. DynamoDB propose également la sécurité, la sauvegarde et la restauration intégrées et la mise en cache en mémoire pour les applications à l'échelle Internet.

Comment puis-je utiliser le SDK AWS pour PHP avec DynamoDB?

Le SDK AWS Pour PHP, il est plus facile pour les développeurs de créer des applications qui exploitent le cloud AWS rentable, évolutif et fiable. Les échantillons de bibliothèque et de code AWS PHP sont inclus dans le SDK qui montrent comment utiliser le SDK AWS pour PHP pour exploiter toutes les fonctionnalités fournies par les services AWS comme Amazon S3, Amazon EC2 et DynamoDB.

Est-ce que certains dynamoDB sont courants avec des exemples de code PHP?

Il existe plusieurs exemples de code communs pour l'utilisation de DynamoDB avec PHP. Il s'agit notamment de la création d'une table, de l'écriture d'éléments dans une table, de la lecture d'éléments d'une table, de la mise à jour des éléments dans une table et de la suppression des éléments d'une table. Chacune de ces opérations peut être effectuée en utilisant le SDK AWS pour Php.

où puis-je trouver des scripts PHP pour Amazon Store?

Vous pouvez trouver des scripts PHP pour Amazon Store sur diverses plates-formes en ligne comme Codecananyon. Ces scripts vous permettent d'intégrer les services d'Amazon dans vos applications PHP, offrant des fonctionnalités telles que la recherche et l'affichage de produits, la gestion des paniers d'achat et le traitement des commandes.

Y a-t-il des exemples complets pour DynamoDB avec PHP?

Oui, il existe des exemples complets pour utiliser DynamoDB avec PHP. Ces exemples incluent généralement du code pour créer une table, écrire des éléments dans la table, lire les éléments de la table, mettre à jour les éléments dans la table et supprimer des éléments de la table. Ils incluent également souvent des exemples de comment gérer les erreurs et les exceptions.

Comment puis-je gérer les erreurs et les exceptions dans DynamoDB avec PHP?

Lorsque vous travaillez avec DynamoDB et PHP, vous pouvez gérer les erreurs et les exceptions en utilisant des blocs de capture d'essai. Le SDK AWS pour PHP lance des exceptions lorsque les opérations échouent, et vous pouvez assister à ces exceptions pour les gérer d'une manière qui convient à votre application.

Comment puis-je optimiser les performances avec DynamoDB et PHP?

Il existe plusieurs façons d'optimiser les performances avec DynamoDB et PHP. Il s'agit notamment d'utiliser le débit provisionné pour gérer la capacité, l'utilisation d'index secondaires globaux pour accélérer les requêtes et l'utilisation de l'accélérateur DynamoDB (DAX) pour fournir une mise en cache en mémoire.

Comment puis-je sécuriser mes données dans DynamoDB?

DynamoDB fournit plusieurs fonctionnalités de sécurité pour protéger vos données. Il s'agit notamment du cryptage au repos, qui sécurise vos données à partir d'un accès non autorisé au stockage sous-jacent et au chiffrement en transit, qui protège vos données lorsqu'il voyage entre votre application et DynamoDB.

Comment puis-je sauvegarder et restaurer les données dans DynamoDB?

DynamoDB fournit une prise en charge intégrée pour la sauvegarde et la restauration des données. Vous pouvez créer des sauvegardes à la demande à tout moment et restaurer vos données de table à partir de ces sauvegardes en cas de besoin. Cela vous permet de protéger vos données contre la suppression ou la modification accidentelle, et de maintenir votre application en douceur même en cas d'échec.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:PHP effrayant effrayantArticle suivant:PHP effrayant effrayant