Maison > cadre php > Laravel > Équilibrage de charge, distribution, compréhension des clusters, comment synchroniser plusieurs codes serveur

Équilibrage de charge, distribution, compréhension des clusters, comment synchroniser plusieurs codes serveur

步履不停
Libérer: 2019-07-03 14:42:18
original
4460 Les gens l'ont consulté

Équilibrage de charge, distribution, compréhension des clusters, comment synchroniser plusieurs codes serveur

Les concepts de ces termes seront expliqués ci-dessous

Cluster

Si notre projet s'exécute sur une machine, si cette machine tombe en panne Si oui, ou le volume de demandes des utilisateurs est relativement élevé et une seule machine ne peut pas le prendre en charge. Notre site Web peut ne pas être accessible. Alors comment le résoudre ? Nous devons utiliser plusieurs machines et déployer le même programme afin que plusieurs machines puissent exécuter notre site Web en même temps. Alors, comment distribuer les requêtes à toutes nos machines. C’est ainsi qu’est apparu le concept d’équilibrage de charge.

Équilibrage de charge

L'équilibrage de charge signifie que, sur la base du proxy inverse, toutes les demandes actuelles peuvent être distribuées à différents serveurs selon l'algorithme de politique spécifié. Nginx, lvs. Mais maintenant, il y a aussi un problème, que dois-je faire s'il y a un problème avec le serveur d'équilibrage de charge ? Toutes les notions de redondance émergent.

Redondance

La redondance est en fait composée de deux serveurs ou plus, un serveur maître et un serveur esclave. Supposons qu'il y ait un problème avec le serveur d'équilibrage de charge d'un serveur maître et que le serveur esclave puisse remplacer le serveur maître pour continuer l'équilibrage de charge. La façon d'y parvenir est d'utiliser keepalive pour capturer l'hôte virtuel.

Distribué

Distribué consiste en fait à diviser un grand projet et à l'exécuter de manière indépendante.

Prenons l'exemple ci-dessus. Disons que notre trafic est particulièrement élevé. Nous pouvons le rendre distribué, avec le même mécanisme que CDN. Un cluster identique est construit à trois endroits : Pékin, Hangzhou et Shenzhen. Les utilisateurs proches de Pékin accéderont au cluster à Pékin, et les utilisateurs proches de Shenzhen accéderont au cluster à Shenzhen. De cette façon, notre bataille en ligne est divisée en trois domaines, chacun étant indépendant.

Un autre exemple est notre distribution Redis. La distribution Redis distribue les données dans Redis sur différents serveurs. Chaque serveur stocke un contenu différent, tandis que le cluster MySQL stocke les mêmes données sur chaque serveur. Cela comprend également les concepts de distribution et de clustering.

mysql maître-esclave

mysql Le serveur maître écrira le journal des opérations SQL dans le journal bin.log Le serveur esclave lira le journal bin.log du maître, puis exécutera l'instruction SQL. .

Maître et esclave ont les problèmes suivants.

1. Le serveur maître peut écrire et lire, mais l'esclave ne peut qu'écrire.

Les données lues par l'esclave n'ont pas encore été écrites. Comment résoudre ce problème ?

1. Si mis en cache, lisez à partir du cache.
2. Forcer la lecture du maître.
3. Grâce au cluster pxc, n'importe quel nœud est lisible et inscriptible, avec une forte cohérence en lecture et en écriture.

Comment Laravel résout les incohérences des données

Définissez sticky sur true dans le bloc de configuration mysql config/database.php

sticky est une valeur facultative, qui peut être utilisée pour une lecture immédiate Obtenez les enregistrements qui ont été écrits dans la base de données pendant le cycle de demande en cours. Si l'option sticky est activée et qu'une opération « écriture » a été effectuée pendant le cycle de requête en cours, toutes les opérations de « lecture » utiliseront la connexion « écriture ». Cela garantit que les données écrites dans le même cycle de requête peuvent être lues immédiatement, évitant ainsi le problème d'incohérence des données provoqué par le retard maître-esclave. Cependant, son activation dépend des besoins de l'application.

Et si notre code est synchronisé sur plusieurs serveurs ?

Laravel nous fournit le package d'extension laravel/envoy, qui fournit un ensemble de syntaxe concise et légère pour définir les tâches quotidiennes des serveurs distants. La syntaxe de style lame peut être utilisée pour configurer des tâches de déploiement, exécuter des commandes Artisan, etc.

composer global require laravel/envoy
Copier après la connexion

Les tâches Envoy doivent toutes être définies dans Envoy.blade.php dans le répertoire racine du projet. Écrivez le contenu

@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])

@task('deploy', ['on' => ['web-1', 'web-2']])
    cd site
    git pull origin {{ $branch }}
    composer update
    php artisan migrate
@endtask
Copier après la connexion

La signification du code ci-dessus est que lorsque l'envoy exécutera le déploiement sur la ligne de commande, nous nous connecterons à web-1, web-2 et exécuterons

    cd site
    git pull origin {{ $branch }}
    php artisan migrate
Copier après la connexion

Bien sûr, cette prémisse est que nous avons joint ssh au serveur distant.

Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne Tutoriel Laravel pour apprendre !

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal