Certains apprentissage et de réflexion Redis Distributed verrouillage distribué principe de verrouillage, ZOOKEEPER verrouillage distribué

Tout d'abord distribué principe serrure et verrou, nous avons parlé habituellement environ essentiellement le même, le but est de faire en sorte que, lorsque plusieurs threads simultanément, un seul fil au même moment l'opération ou des méthodes commerciales, des variables.

Dans un processus, qui est une machine virtuelle ou d'une application, il est facile de contrôle de processus, et jdk contrat de java.util nous a été fourni pour verrouiller ces méthodes, telles que la touche de verrouillage synchronisé ou verrouillage, vous pouvez traitement.

Mais nous déployons maintenant l'application si un seul serveur, qui est pauvre concurrency, si vous avez des milliers de demandes en même temps, il est susceptible de provoquer le serveur à la pression, et la paralysie.

Pensez à double 31 et dix branche p.m. scénarios d'affaires paquet Fu Baohong, besoin naturel d'utiliser plusieurs serveurs pour gérer simultanément ces services, ces services peuvent être des centaines de traitement simultané,

Mais pensons-nous à ce sujet, s'il y a 100 serveurs à forfait poignée de bonus d'affaires On suppose maintenant des enveloppes de 100 millions à 10 millions de points individuels, le montant du hasard, alors ce scénario d'entreprise n'est pas nécessaire de faire en sorte que 10 millions montant de l'enveloppe rouge égale à la somme des points individuels derniers 100 millions.

Sinon, bien joué ~~ affectés chacun à un million, on estime que le jour Ma Nouvel An Papa, vous avez à la faillite ~~

1, la serrure classique fera quoi?

Tout d'abord parler de la raison pour laquelle nous nous engageons en grappes, simple à comprendre, la demande (demande concurrency) devient plus grande, et une puissance de traitement limitée des travailleurs, il recruter plus de travailleurs pour faire face à un certain nombre.

10 millions de demandes sont en supposant uniformément réparties sur les serveurs 100, chaque serveur reçoit la demande et 10W (ce qui est une demande de 10W dans la même seconde, peut être à 1,2 heures, on peut penser à trois 22 heures enveloppes ouvertes pour commencer jusqu'à 10,20, certaines personnes se sont ouvertes, et certaines personnes ne sont pas à attendre jusqu'à 12 heures et nous devons penser ~)

Si cela se produit, une demande en moyenne chaque seconde de moins d'un millier, cette pression est généralement serveur ou ne peut se permettre.

Après la première demande arrive, le besoin est pas là pour lui donner 100 millions en sous-partie de l'argent, la quantité de hasard, en supposant que la première personne assignée à 100, il est pas moins 100 dans ces 100 millions, le reste 99.999.900 ~

Le deuxième utilisateur heures à venir, la quantité de hasard, le sous-200, il est pas sur la nécessité de soustraire 20099999900 restant dans le reste 99.999.700.

10w attendre le premier utilisateur, ainsi qu'un 1000w regard, 1000W et que tout ce dans la sienne.

Chaque serveur équivaut à 100 millions de minutes, ce qui est un utilisateur sous-10W milliards et durent un total de 100 serveurs, à 10 milliards de minutes.

Si vous aimez vraiment cela, et bien que Ma papa ne fera pas faillite (Ma Selon les dernières statistiques, il y a 230 milliards de yuans), et que l'équipe de développement de package bonus, et les gestionnaires de produits, peut GG ~

Structure simplifiée est la suivante:

2, verrou distribué comment gérer?

 Ainsi, afin de résoudre ce problème, alors que 10 millions d'utilisateurs de 100 millions de minutes, au lieu de 10 milliards, ce temps de verrouillage distribué à mettre à l'utilisation.

Lock peut mettre Distributed le cluster sera considéré comme une application à la poignée, il a besoin de la serrure pour être indépendant de chaque service, plutôt que dans l'intérieur du service.

Après considérer que le premier serveur reçoit une requête de l'utilisateur est 1, cette fois-ci, il était non seulement dans leur application afin de déterminer combien d'argent peut être divisé, et la nécessité de gérer les demandes externes responsables de 100 millions de personnes d'enveloppe rouge (service), et lui a demandé: hey, je suis ici pour 100 points, 100 à moi.

Gestion soeur rouge (service) un regard, il y a un million Eh bien, pour vous donner 100, puis le reste 99.999.900.

Après la deuxième demande arrive, le serveur 2 acquiert, continuent de demander, gérer soeur rouge, mon côté à 10 points, gérer rouge soeur première vérifiée là-dessous 99.999.900, il a dit: Eh bien, pour vous donner 10 bloc. Cela laisse 99,999,890

Après la première arrivée jusqu'à 1000W demande, demande de serveur 100 pour obtenir, continuer à demander, gérer soeur rouge, vous devez 100, sur leva les yeux et vous dit, nous avons seulement un, et l'amour pour le faire cette fois-ci Je ne peux vous donner une place (aussi de l'argent, vous pouvez acheter une bande chaude ou racine peut).

Ces demandes ne représentent pas la séquence des numéros 1, 2, exécutés, sous la scène officielle, devrait être de 100 serveurs par serveur est titulaire d'une demande de visite la sur responsable de la gestion d'une enveloppe rouge (service), et que le tube en même temps il y aura une soeur enveloppe rouge il a reçu 100 demandes, ce besoin de temps dans la sur en charge des t-il des enveloppes rouges plus un verrou sur elle (en jetant Hydrangea), vous obtenez un serveur 100 qui verrouille (grab hortensia), qui vont venir et me parler, je donne vous des points, d'autres attendant d'aller

Après le traitement de la serrure ci-dessus distribué, Ma père a été soulagé, l'équipe a décidé de donner des enveloppes rouges par personne, plus une cuisse de poulet.

La structure simplifiée est la suivante:

3, pour obtenir verrouillage distribué de quoi?

 En ce qui concerne la mise en uvre des verrous distribués, il y a encore beaucoup, il y a une base de données de la manière, il y a Redis verrou distribué, il ZOOKEEPER verrou distribué etc.

Si nous utilisons Redis comme un verrou distribué, l'image ci-dessus négative « enveloppes rouges soeur responsable (service) », vous pouvez remplacer Redis, faire votre propre cerveau.

3.1 Pourquoi Redis verrouillage distribué peut être atteint?

Première Redis est mono-thread, mono-thread ici se réfère à un réseau en utilisant un module de requête de fil (donc la sécurité sans tenir compte de la concurrence), à savoir un fil pour gérer toutes les demandes de réseau, d'autres modules restent avec la pluralité de fils.

En fonctionnement réel, le processus est généralement comme ceci:

1 serveur enveloppes rouges rendre visite à ma sur, qui est, Redis, alors il sera par Redis dans le jeu de fonctionnement « setnx valeur clé » dans une clé, la valeur n'a pas d'importance ce qui est important est d'avoir une clé, qui est une marque et la clé Jiaosha Jiaosha vous aimez, aussi longtemps que la clé est le même que tous les paramètres du serveur peuvent être.

Supposons que nous ayons un ensemble, comme sur la figure.

On peut donc voir que renvoie un 1, elle représente un succès.

Si une demande de nouveau mis la même touche, comme indiqué ci-dessous:

Cette fois-ci retournera 0, il représente l'échec.

Ensuite, nous pouvons passer par cette opération est de ne pas juger le courant peut obtenir un verrou, ou eu accès à des « enveloppes rouges soeur responsable, » si elle retourne 1, alors j'ai commencé à réaliser le derrière logique, si elle retourne 0, a expliqué qu'il avait été occupé, je vais continuer à attendre.

Lorsque le serveur pour obtenir un verrou, un processus d'affaires est terminé, doivent également libérer le verrou, comme indiqué ci-dessous:

Supprimé retourne avec succès 1, puis l'autre serveur peut continuer à répéter les étapes ci-dessus pour définir cette clé, afin d'atteindre l'objectif de l'acquisition de verrouillage.

Bien sûr, l'opération ci-dessus est effectuée directement dans le client Redis, grâce à un programme appelé, alors certainement vous ne pouvez pas écrire si, par exemple en java Jedis besoin de faire appel, mais le processus est la même logique de base

Grâce à la manière ci-dessus, nous semble résoudre le problème de verrouillage distribué, mais pensons qu'il n'y a pas de problème? ?

 Oui, le problème est toujours là, il peut y avoir un blocage se produit, par exemple après avoir installé le serveur 1, après l'acquisition de la serrure, est soudainement venu les temps d'arrêt.

Cette opération de suivi ne serait pas en mesure d'effectuer la touche de suppression, cette clé existera toujours dans Redis, l'autre pour vérifier le serveur à chaque fois, retourne 0, ils penseront que quelqu'un utilise le verrou, je dois attendre.

Pour résoudre ce problème de blocage, nous devons définir une clé valide.

 Il y a deux façons de régler la

1, la première série est terminée après que la clé, directement clé valide « expireront time-out », définir un délai pour la clé, l'unité est le deuxième, plus cette fois-ci libérera automatiquement le verrouillage, pour éviter une impasse.

De cette façon, l'équivalent, les verrous détenus en cours de validité, remis à Redis contrôle. Si le temps est écoulé, vous ne me donnez pas une clé de suppression, puis supprimez Redis vous donnera diriger, l'autre serveur peut continuer à acquérir setnx une serrure.

2, la deuxième façon est de supprimer la clé à droite à l'autre serveur, cette fois-ci, vous devez utiliser la valeur de la valeur,

Par exemple, le serveur 1, la valeur est définie à l'heure actuelle + 1 deuxième délai d'attente, cette fois du serveur 2 se trouve le temps a dépassé le temps du système actuel, il montre le serveur 1 ne libère pas le verrou, le serveur 1 peut être un problème,

2 serveur opération de suppression de clé a commencé et continue d'effectuer une opération setnx.

Mais cela a un problème, qui est, non seulement vous pouvez constater que le serveur 21 délai d'attente du serveur, le serveur 3 peut également trouver, si juste, serveur 2, opération setnx est terminée, le serveur va alors supprimer 3, est également pas le serveur 3 setnx réussir?

Cela équivaudrait à un serveur 2 et le serveur 3 ont obtenu enfermé, il est un gros problème. Cette fois-ci comment le faire?

Ce besoin de temps pour utiliser les commandes « getSet valeur clé ». Ce moyen de commande que pour obtenir la valeur de la clé actuelle et définissez la nouvelle valeur.

En supposant que le serveur 2 trouve la clé a expiré, a commencé à appeler commande GetSet, le temps nécessaire pour déterminer si l'expiration, si l'acquisition est encore temps écoulé, il montre qui a obtenu verrouillé.

Sinon, avant l'exécution de service getSet 2, 3 peut également trouver verrouillage du serveur a expiré, et exécuté des opérations getSet avant que le serveur 2, re-régler l'heure d'expiration.

Le serveur 2 devra renoncer à des opérations ultérieures, continuer à attendre 3 serveur pour libérer le verrou ou la clé pour contrôler la validité a expiré.

En fait, il y a une petite partie du problème est que le serveur 3 a révisé sa date d'expiration, obtenir après les verrous, 2 serveur, modifier la date d'expiration, mais n'a pas obtenu la serrure, mais cette période de temps, il a été à la base du serveur 3 ajouter un peu, mais cet effet est en réalité très faible, presque négligeable.

3.2 Pourquoi peut être atteint verrouillage Zookeeper distribué?

Baidu Wikipedia est ainsi décrit: ZooKeeper est distribué, le service de coordination open source pour les applications distribuées, Formes généreuses de Google est une implémentation open source, est une composante importante de Hadoop et Hbase.

Pour la première fois que les gens que nous connaissons, peuvent être compris comme ZooKeeper comme notre système de fichiers d'ordinateur, nous pouvons créer un dossier dans le disque d, et peut continuer à créer des dossiers a1, a2 dans un dossier.

Que notre système de fichiers Quelles sont les caractéristiques? ? C'est le même nom de fichier dans un répertoire ne peut pas être répété, la même chose est vraie de ZooKeeper.

 Dans tous les nuds ZooKeeper, qui est un dossier appelé Znode, et ce noeud Znode qui peut stocker des données.

Nous pouvons être créé par « créer / zkjjj agréable » un nud, la commande dit, créer un nud dans zkjjj avec le répertoire, la valeur est agréable. La même valeur ici, et je l'ai dit plus tôt dans Redis que peu de sens, vous parlez.

En outre ZooKeeper peut créer quatre types de noeuds, à savoir:

1, le nud persistant

2, l'ordre des noeuds Persistance

3, au noeud temporaire

4, un ordre temporaire des noeuds

Tout d'abord, que la différence entre le nud suivant et les noeuds temporaires persistants, le nud persistant que tant que vous avez créé le noeud, peu importe si vous ZooKeeper client est déconnecté, le serveur ZooKeeper enregistrera ce nud.

noeud temporaire est tout le contraire, une fois que vous client ZooKeeper déconnecté, ce serveur ZooKeeper ne sera plus sauver ce nud.

En outre sous la commande des noeuds, l'ordre des moyens de noeud lors de la création des noeuds, ZooKeeper automatiquement le numéro de noeud, tel que 0000001, 0000002 ceux-ci.

Enfin dit, Zookeeper dispose d'un mécanisme de détection, les registres de client auditeur noeud de répertoire, il craint que lorsque le changement de répertoire des noeuds (données de changement est supprimé, supprimer les augmentations de nud sous-répertoire), etc., Zookeeper informera le client.

Ici, nous continuons de combiner notre scène paquet de bonus supérieur, explique comment verrouiller au Zookeeper.

En supposant que le serveur 1, créez un noeud / zkjjj, avec succès, que le serveur 1 pour acquérir un verrou, un serveur 2 créer à nouveau le même verrou, alors il est perdu, cette fois-ci, il ne peut suivre l'évolution du nud.

Attendez que lorsque le serveur 1, terminé avec les entreprises, le nud supprimé, il sera informé, puis de créer le même nud, d'acquérir l'entreprise de traitement de verrouillage, puis les noeuds de suppression, suivi de 100 serveurs avec la même

Notez que le serveur 100 n'est pas un par un pour effectuer une opération pour créer des nuds ci-dessus, mais en même temps, lorsqu'un serveur est créé avec succès, le 99 restants seront enregistrés pour surveiller le nud, telles que les notifications, et ainsi de suite.

 Mais vous ne l'avez pas remarqué, il y a encore un problème, ou il y aura une situation de blocage existe, non?

Lorsque le nud du serveur 1 crée raccroché, je ne l'ai pas supprimer que les autres serveurs auraient été 99 notifications tel qu'il a terminé. . .

Cette fois-ci pour cela, vous devez utiliser un nud temporaire, et nous avons dit plus haut, les caractéristiques du noeud temporaire est le client Une fois déconnecté, ils seront perdus, qui est, lorsque le serveur 1 crée un nud, si raccroché.

Ensuite, ce nud sera automatiquement supprimé, de sorte que serveur supplémentaire ultérieure, vous pouvez continuer à créer des noeuds, un accès verrouillé.

Mais on peut aussi avoir besoin de noter qu'il est tonnait effet de troupeau: Prenons un exemple très simple, lorsque l'on jette un morceau de nourriture à un groupe de pigeons du milieu, bien que finalement seulement une ponction de colombe nourriture, mais tous les pigeons sera alerté pour se battre, pas grab ..

Lorsque le serveur est un noeud change, il informera le reste des 99 serveurs, mais à la fin d'un seul serveur sera créé, donc 98 doivent encore attendre pour écouter, puis pour faire face à cette situation, nous avons besoin d'utiliser un ordre temporaire de noeuds

En gros ce qui signifie, avant que tous les 99 serveurs à l'écoute sur un nud, chaque serveur est maintenant à l'écoute sur un nud devant lui.

En supposant que 100 serveurs en même temps envoyé une demande, cette fois créé 100 ordre temporaire de noeud / zkjjj / 000000001 Dans / node zkjjj, / zkjjj / 000000002, jusqu'à ce que / zkjjj / 000000100, ce nombre REVIENDRAIT ont donné leur ensemble l'ordre d'acquisition de la serrure.

printemps suprême et de la série d'été vendus sur Countdown! Les quelques grab seul produit restant est gagné?
Précédent
Ce soir, le drame TVB de ces salut professionnel vous!
Prochain
Alfa Romeo Giulia 349800 de la vente de l'édition limitée
Le coût élevé, Rongyao plaque Ping 58 pouces Version assez agréable et amusant!
Wu Yifan chanson Release Party Hey comment? idole de contact Fermer vraiment enviable!
Lire 100 millions, avec les « hommes droits transformation » et « les cheveux tard dans la nuit laid » Comment Dieu pour les hommes de base
« Raiders Yanxi » pour la promotion des artistes de Hong Kong TVB impératrice du haut du corps toutes les scènes drôles
2018 Chengdu Auto Show: 2019 modèles débuts Kai Chen M50V
Huawei Maté 20 compétences Pro et la plus complète pour tirer la lune, cinq grandes secondes pour tirer la lune!
115800 de la vente de la nouvelle génération de Focus, les premiers modèles d'explosion de voiture triplex serait-il?
10 Gloire facilement prendre part, a enregistré la beauté au nord-ouest parfait!
Quatre millions de projets d'investissement en milieu rural rentables, la lutte est l'exécution!
FAW - Volkswagen Audi Q2L vente Wan 22,68 à 28,18
célèbre artiste féminine de Hong Kong est l'auteur best-seller expose le jour du mariage, elle a dit que sa mère était un voleur