编程知识 cdmana.com

Byte Hopping Java Service Call, 2021 Alibaba Tencent Express offer a été obtenu!

Puits de verrouillage distribué

Problèmes de concurrence élevée

Le problème suivant ne veut pas dire qu'il n'est pas facile de se produire dans des situations où la concurrence n'est pas élevée,C'est juste qu'il y a plus de chances que ça arrive dans un scénario de concurrence élevée.

Les problèmes de rendement découlent des deux aspects suivants::

**①Temps d'acquisition de la serrure.**Si Redlock Utilisé dans des scénarios de haute concurrence,Existe N - Oui. Master Noeud,Un par un.,Ça prendra beaucoup de temps.,Ce qui affecte le rendement.

C'est bon.,Il n'est pas difficile de trouver,L'acquisition d'une serrure à partir de plusieurs noeuds n'est pas une opération synchrone,Peut être asynchrone,Cela permet à plusieurs noeuds d'obtenir simultanément.

Même en parallèle,Il faut encore prévoir le temps d'acquisition de la serrure.,Verrouillage garanti TTL>Temps d'acquisition de la serrure+Temps de traitement des tâches.

**②Les ressources verrouillées sont trop grandes.**Le système de verrouillage lui - même sacrifierait la concurrence pour l'exactitude,Le sacrifice est proportionnel à la taille de la ressource,Vous pouvez envisager de diviser les ressources à ce stade.

Il y a deux façons de diviser:

**①Diviser les ressources verrouillées en segments à partir de l'entreprise,Verrouillage séparé de chaque section.**Par exemple,,J'a i plusieurs opérations à faire avec un marchand,Verrouillez ce marchand avant l'opération,À ce stade, je peux démonter plusieurs opérations en plusieurs étapes séparées et verrouiller,Améliorer la concurrence.

**②Avec l'idée d'un seau fendu,Diviser une ressource en plusieurs seaux,Un verrouillage a échoué. Essayez immédiatement le suivant..**Comme les scénarios de traitement des tâches par lots,À traiter 200w Tâches des commerçants,Pour accélérer le traitement,Avec plusieurs fils,Chaque thread récupère 100 Traitement des commerçants,Il faut le donner. 100 Verrouillage des commerçants.

Sans traitement,Il est difficile de s'assurer qu'il n'y a pas de chevauchement entre deux commerçants verrouillés en même temps,Vous pouvez maintenant appuyer sur une dimension.

Comme une étiquette,Seau séparé pour les commerçants,Puis une tâche traite un seau fendu,Après avoir traité ce sous - seau, nous traitons le Sous - seau suivant.,Réduire la concurrence.

**Problème de retry:**Qu'il s'agisse d'une simple mise en œuvre ou Redlock Réalisation,Il y a une logique de retry.

Si vous suivez directement l'algorithme ci - dessus,Oui, il y en aura plusieurs. Client Obtenir la même serrure presque en même temps,Et chaque Client Tous les noeuds sont verrouillés.,Mais il n'y en a pas. Client Obtenir l'état de la plupart des noeuds.

Les solutions sont également courantes,Décaler plusieurs noeuds lors de la retry,La façon de décaler est d'ajouter un temps aléatoire au temps de retry.Ça ne résoudra pas le problème.,Mais ça peut atténuer le problème.,L'essai en personne fonctionne.

Arrêt du noeud

Pour un seul Master Une scène où les noeuds ne sont pas persistants,Le temps d'arrêt est mort.,Cela doit être mis en œuvre pour soutenir les opérations en double,Faites votre propre puissance.Pour beaucoup Master Scènes,Par exemple, Redlock,Regardons une scène comme celle - ci.:

  • Supposons qu'il y ait 5 - Oui. Redis Node of:A、B、C、D、E,Pas de persistance.

  • Client1 De A、B、C Voilà.3 Les noeuds ont réussi à obtenir des serrures,Alors client1 Obtenir la serrure avec succès.

  • Noeud C Raccroche..

  • Client2 De C、D、E Obtenir la serrure avec succès,client2 Verrouillage réussi,Donc en même temps Client1 Et Client2 Verrouillage simultané,Redlock C'est foutu..

Comment résoudre?L'option la plus facile à imaginer est d'activer la persistance.La persistance peut faire durer tout Redis Les ordres,Mais cela aura un impact considérable sur la performance,Généralement non utilisé,Si ce n'est pas le cas,,Une petite partie des données doit être perdue pendant que le noeud est suspendu,Peut - être que notre serrure est là..

Une autre option est de retarder le démarrage.C'est un noeud qui a été réparé.,Ne pas rejoindre immédiatement,J'ai attendu un moment avant de me joindre à vous.,Le temps d'attente est supérieur au maximum de toutes les serrures au moment de l'arrêt TTL.

Mais cette solution ne résout toujours pas le problème.,Si, à l'étape précédente, 3 Moyenne B Et C C'est parti.,Il ne reste que A、D、E Trois noeuds,De D Et E J'ai réussi à obtenir la serrure.,Ça va mal tourner..

Alors ça ne peut qu'augmenter. Master Total des noeuds,Ça soulage le problème..Ajouter Master Les noeuds augmentent la stabilité,Mais ça augmente aussi les coûts.,Il faut trouver un équilibre entre les deux..

La tâche a été exécutée plus longtemps que la serrure TTL

Il y a eu des retards dans l'exécution des tâches sur la ligne de production plus tôt que prévu en raison de retards dans le réseau,Verrouillage expiré,Exécution par plusieurs threads.

C'est un problème pour toutes les serrures distribuées,Y compris sur la base Zookeeper Et DB Verrouillage distribué réalisé,C'est une serrure périmée et Client Je ne sais pas si la serrure est expirée..

Pendant que la serrure est allumée,D'habitude, on donne une serrure TTL,C'est pour éviter qu'après le verrouillage Client Temps d'arrêt,Le problème que la serrure ne peut pas être libérée.

Mais toutes ces poses posent le même problème,Il n'y a aucune garantie que Client Le temps d'exécution doit être inférieur à celui de la serrure TTL.

Bien que la plupart des programmeurs soient optimistes que cela ne peut pas se produire,Je pensais aussi,Jusqu'à ce qu'il soit frappé au visage par la réalité encore et encore.

Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Java

Martin Kleppmann J'ai aussi remis en question,En utilisant sa carte:

  • Client1 Obtenir la serrure.

  • Client1 Début de la Mission,Et c'est arrivé STW De GC,Le temps a dépassé l'expiration de la serrure.

  • Client2 Obtenir la serrure,Début de la Mission.

  • Client1 De GC Fin,Poursuivre la Mission,À ce moment - là. Client1 Et Client2 Ils pensent qu'ils ont la serrure,Ils s'occupent des tâches,Une erreur s'est produite.

Martin Kleppmann Par exemple: GC Exemples,Ce que j'ai rencontré, c'est la latence du réseau.Dans les deux cas,Il est indéniable que cette situation ne peut être évitée,Une fois là - Bas, c'est facile d'être confus.

Comment le résoudre??Une solution est de ne pas configurer TTL,Mais après avoir obtenu la serrure,Ajoutez un watchdog,watchdog Une tâche programmée,Renouvellement lorsque la serrure n'est pas libérée et qu'elle est sur le point d'expirer.

Enfin

Après tout, le travail a duré si longtemps ,À part le tour de Land Rover,J'ai interviewé beaucoup de grandes usines,Comme Ali.、Tu as faim?、Meituan、Ces entretiens n'ont pas tous été écrits dans cet article..Je vais organiser un entretien détaillé et quelques détails sur les questions que vous aimeriez savoir

Expérience de l'entrevue de groupe

Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Java_02
Octets d'expérience en entrevue
Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Java_03
Expérience de l'entrevue de débutants
Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Programmeur_04
Expérience de l'entrevue avec ant Gold
Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Programmeur_05
Vipshop interview experience
Byte RunoutJavaLes mouvements sociaux,2021Année Ali Tencent Vite!offer Tout est là. !_Arrière - plan_06

En raison de l'espace limité,Le texte ne peut pas être publié en détail

 CodeChinaProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication】

版权声明
本文为[Programme Yuan Daiyu]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210915073756757y.html

Scroll to Top