Maison > Applet WeChat > Développement WeChat > le corps du texte

Conjecture sur le principe de mise en œuvre des enveloppes rouges WeChat

阿神
Libérer: 2017-02-10 14:31:16
original
2040 Les gens l'ont consulté

Le contenu suivant provient de l'arrière-plan des enregistrements de discussion d'un groupe d'architecture à haute disponibilité chez QCon : un ami a consulté sur l'architecture des enveloppes rouges WeChat, et le contenu de la discussion suivante a été tiré des explications et des discussions de responsables ou Des camarades de classe non officiels ont été nombreux pendant cette période. Un camarade de classe a donné une enveloppe rouge pour tester l'algorithme sur le réseau actuel.

Le processus de récupération des enveloppes rouges

Lorsque quelqu'un envoie une enveloppe rouge à N personnes du groupe, avec un montant total de M yuans, que se passe-t-il en arrière-plan est la suivante :

1. Opération en arrière-plan pour l'envoi d'enveloppes rouges :

Ajoutez un enregistrement d'enveloppe rouge dans la base de données, stockez-le dans CKV et définissez l'heure d'expiration ; >Dans le cache (probablement la base de données kv interne de Tencent, basée sur la mémoire, elle a été implémentée et dispose d'un module de traitement réseau à l'état du noyau pour fournir des services sous la forme d'un module de noyau)). enveloppes rouges N

2. Opérations en coulisses pour récupérer les enveloppes rouges :

Saisir les enveloppes rouges Elle est divisée en saisie et démolition. L'opération de saisie est terminée au niveau du cache. est décrémenté par opération de soustraction atomique jusqu'à ce qu'il atteigne 0. Cela signifie qu'elles sont toutes supprimées. En fin de compte, le nombre réel d'opérations de démontage en arrière-plan n'est pas important. Grâce à la séparation des opérations, les requêtes invalides sont directement bloquées en dehors de la couche cache. L’opération de soustraction atomique n’est pas ici une opération de soustraction atomique au vrai sens du terme, mais Le CAS fourni par la couche Cache continue d'essayer en comparant les numéros de version. Il existe un certain degré de conflit. L'utilisateur en conflit sera libéré et autorisé à passer à l'étape suivante du démontage. Cela explique également pourquoi certains utilisateurs ont saisi l'opération de démontage. ​ La situation lorsque le développement est terminé.

L'ouverture des enveloppes rouges est complétée dans la base de données. Le nombre et le montant reçus sont accumulés grâce à l'opération de transaction de la base de données, et une réclamation est insérée. ​ L'eau courante et l'enregistrement sont des opérations asynchrones, ce qui explique également pourquoi les enveloppes rouges ne sont pas visibles dans la balance après leur réception lors de la Fête du Printemps. Le montant sera calculé en temps réel lors du fractionnement. Le montant est un nombre aléatoire compris entre 1 point et 2 fois le montant total restant. Une enveloppe rouge d'une valeur de M yuans, la plus grande enveloppe rouge est M * 2 /N (et ne dépassera pas M), lorsque l'enveloppe rouge est ouverte, le montant et le numéro restants seront mis à jour. Tenpay prépare 200 000 transactions par seconde, mais le montant réel n'est que de 80 000 par seconde.

FAQ

Puisqu'il y a des atomes réduits lors de la saisie, ne devrait-il pas y avoir une situation où ils ne sont pas démantelés après la saisie ?

La soustraction atomique ici n'est pas une opération atomique au vrai sens du terme. Il s'agit du CAS fourni par la couche Cache, qui est constamment essayé en comparant les numéros de version.


Que dois-je faire si le cache et la base de données sont en panne ?

Réconciliation principale et de secours


Le nombre d'enveloppes rouges a disparu, mais le solde est toujours là ?

Non, le programme aura une opération de type take all et une garantie de rapprochement asynchrone à la fin.


Pourquoi séparer accaparement et démolition ?


L'idée générale est de mettre en place des filtres multicouches, de les filtrer couche par couche, et de réduire le débit et la pression couche par couche. Cette conception était à l'origine due au fait que l'opération de saisie est la couche métier et que l'opération de fractionnement est l'opération comptable. Une opération est trop lourde et le taux d'interruption est élevé. ​ Au niveau de l'interface, la première interface est une pure opération de cache et possède de fortes capacités de compression. Un simple cache de requête bloque la plupart des utilisateurs et effectue le premier filtrage, de sorte que la plupart des gens verront l'invite indiquant que le contenu a été épuisé.

Après avoir récupéré l'enveloppe rouge, envoyez-la ou retirez de l'argent. Y a-t-il une stratégie ici ?

Stratégie de dépôt prioritaire de gros montants


Existe-t-il des données prouvant si la probabilité de chaque enveloppe rouge est égale ?

Ce n’est pas absolument égal, c’est juste un simple algorithme de tapotement cérébral.


Avec l'algorithme des tapotements de tête, y aura-t-il deux meilleurs ?

Il y aura le même montant, mais il n'y a qu'un seul chanceux, celui qui l'attrape en premier est le meilleur.


L'argent de la personne qui donne l'enveloppe rouge sera-t-il gelé ?

Il est déduit directement en temps réel, non gelé.


Pourquoi utiliser le calcul du montant en temps réel ?

L'efficacité en temps réel est plus élevée, mais l'efficacité budgétaire est faible. Le budget prend également en compte le stockage supplémentaire. Comme l’enveloppe rouge n’occupe qu’un seul enregistrement et n’est valable que quelques jours, elle ne prend pas beaucoup de place. Même lorsque la pression est élevée, la machine à expansion horizontale l'est.


Test 2 : Expérience de l'utilisateur de Zhihu "Ma Jingchen" :


Voici un échantillon de données d'enquête sur 100 échantillons et proposez votre propre supposition.

1. L'argent du portefeuille satisfait à la distribution normale de nombres aléatoires censurée. En gros, les nombres aléatoires sont extraits d'une distribution normale censurée, et le nombre total est divisé par la valeur totale pour obtenir le facteur de correction, puis le facteur de correction est multiplié par tous les nombres aléatoires pour obtenir la valeur de l'enveloppe rouge.

Cette répartition signifie : il y a plus d'enveloppes rouges en dessous de la moyenne, mais pas loin de la moyenne ; il y a peu d'enveloppes rouges au dessus de la moyenne, mais il y a plus d'enveloppes rouges qui sont beaucoup plus grandes que la moyenne.

Conjecture sur le principe de mise en œuvre des enveloppes rouges WeChatFigure 1. La valeur du portefeuille et son histogramme de distribution de fréquence et son ajustement normal

Mais regarder l'histogramme de distribution ne permet pas de déduire qu'il est conforme à la normale distribution , mais compte tenu de la simplicité du programme et de la rationalité des nombres aléatoires, c'est l'hypothèse la plus raisonnable.

2. Les portefeuilles ultérieurs ont généralement plus de valeur

Conjecture sur le principe de mise en œuvre des enveloppes rouges WeChatFigure 2. La courbe de relation entre le numéro de série du portefeuille et sa valeur

À partir de la ligne rouge d'ajustement linéaire de la figure 2, nous pouvons voir que la tendance globale de changement de la valeur du portefeuille augmente lentement et que sa plage de changement est approximativement un « canal » délimité par les limites supérieure et inférieure de la ligne pointillée verte. . (La courbe peut être enfermée dans un tel "canal" régulier, ce qui reflète également la rationalité de la règle 1 de côté et illustre que les nombres aléatoires ne sont pas uniformément distribués)

À partir d'une autre moyenne, ce modèle peut également être vu dans la figure.

Conjecture sur le principe de mise en œuvre des enveloppes rouges WeChat


Figure 3. La courbe d'évolution du nombre moyen avec le numéro de séquence

Dans l'échantillon, un portefeuille d'une valeur de 1000 a été divisé en 100 parties, la moyenne est de 10. Cependant, sur la figure 3, nous pouvons voir qu'avant le dernier portefeuille, la moyenne était inférieure à 10, ce qui montre que la valeur du portefeuille au début est faible et a été tirée vers le haut par la valeur du portefeuille plus tard. période. Meilleure valeur.

3. Bien entendu, le graphique moyen peut également révéler une autre règle, c'est-à-dire que la dernière personne a souvent la chance de tirer davantage. Parce que la dernière personne obtient ce qui reste dans son portefeuille et que la moyenne de tous ceux qui la précèdent est inférieure à 10, il est au moins garanti que la dernière personne sera supérieure à la moyenne. Dans cet échantillon, le portefeuille numéro 98 en a tiré 35, tandis que le dernier portefeuille en a tiré 46.

Conjecture sur le principe de mise en œuvre des enveloppes rouges WeChat

Pour résumer, sur la base de l'échantillon de supposition :

1 La plupart du temps, l'argent tiré est aussi petit que les autres, mais une fois qu'il est obtenu. c'est plus, cela devient beaucoup plus facile.

2. Plus vous sortez le portefeuille à l'arrière, plus il est facile de gagner de l'argent.

3. La dernière personne a souvent de la chance.

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!