Comment concevoir un un million d'utilisateurs du système de loterie?

annuaire

CONTEXTE 1. Le système de loterie introduit

2. La combinaison des activités besoins spécifiques système de loterie d'analyse

3. Une architecture de système de non-optimisé

4. Limiter la circulation de la couche d'équilibrage de charge

5.Tomcat nombre d'optimisation de threads

6. Sur la base de la logique métier de loterie mis en uvre Redis

7. émission liens cadeaux pour limiter la coupure de courant de crête

8. Architecture du système de conception Résumé

1, le système d'étirage est introduite CONTEXTE

Cet article partager avec écrêtage flux de conception d'architecture avant l'expérience d'un système de loterie.

Loterie, prenez une enveloppe rouge, pointe, ces systèmes ont fait des caractéristiques communes, qui est, à un moment donné dans le temps sera arrivée instantanée d'un grand nombre de personnes à cliquer sur le système, ce qui provoque le système instantanément cent fois plus élevé que des dizaines normale, ou même des milliers de fois fois la pression de la circulation.

Tels que tirages au sort, il y a une scène: un site Web ou APP ordonnèrent à un moment donné dans le temps, tout le monde peut participer à la loterie, il peut être un million d'utilisateurs squat à ce moment, à la fois tout le monde impliqué dans le tirage au sort.

Prenez une enveloppe rouge, peut-être sur une émission de télévision, dit soudain code de balayage peut saisir une enveloppe rouge, puis ouvrez l'avant du téléviseur avec l'utilisateur instantanément possible de dix millions de code de balayage mobile pour saisir une enveloppe rouge.

Spike encore plus, la soi-disant pointe, ne signifie pas que nous attendons devant l'ordinateur, et vous pouvez soudainement acheter une quantité limitée de produits à la fois

Par exemple, un téléphone mobile vendent généralement 5999, le prix était maintenant limité à 100 unités 2999,50% de réduction, peut-être un million d'utilisateurs seront Accroupi devant l'ordinateur dans un tel 12:00 cliquez sur un bouton à l'achat de ce téléphone.

En fait, une scène similaire est beaucoup, cet article utilisera un système de loterie, par exemple, pour faire face à ce discours sur le flux simultané ultra haute transitoire, la façon de concevoir l'architecture pour faire face à coupure de la circulation, pour que le système ne pas soudainement dévasté?

2, combinée avec des exigences d'affaires spécifiques système de loterie d'analyse

Supposons maintenant qu'il existe un scénario d'affaires de loterie, un utilisateur à la fois peut participer à la loterie, par exemple, un total de 10000 prix, le prix est un cadeau.

Ensuite, l'utilisateur peut participer au tirage des centaines de milliers, probablement des centaines de milliers de demandes moment afflux est venu, puis le moment où 10.000 personnes ont gagné à la loterie, le reste du peuple ne sont pas gagner. Puis demander 1 million jackpot appellerait un service cadeau lien, qui a terminé 10.000 cadeaux gagnants du gros lot libérés.

En termes simples, le scénario de la demande est le cas, cependant, où il y a beaucoup d'endroits une valeur optimisée.

3, une architecture de système non optimisé

Regardez d'abord un pas subi de l'architecture du système optimisé, il est tout simplement un dispositif d'équilibrage de charge de trafic de transfert instantanément afflux de concurrent ultra-haut à l'arrière des services de loterie.

Les services de loterie est d'utiliser Tomcat commun à déployer, qui permettent d'atteindre une logique de loterie spécifique, en supposant que le début de la plus logique de loterie classique est basée sur MySQL pour atteindre, suivi par les services de cadeaux basés sur le déploiement Tomcat, les services de loterie si le Trouvées gagnant Service cadeau besoin d'appeler à accorder des cadeaux.

Comme indiqué ci-dessous:

4 limite, l'écoulement de la couche d'équilibrage de charge

4.1 pour empêcher l'utilisateur de répéter le tirage au sort

Tout d'abord couche d'équilibrage de charge peut faire est d'éviter la duplication de tirage.

Nous pouvons faire une configuration dans le dispositif d'équilibrage de charge pour déterminer si un utilisateur envoie la même demande plusieurs fois dans une minute pour dessiner, que c'est la loterie de répétition de malice, ou ils écrivent leur propre prix de script dans la brosse, ce trafic est considéré comme trafic invalide, les niveaux d'équipement d'équilibrage de charge qui donnent directement masquées.

Par exemple, il y a des centaines de milliers d'utilisateurs, tels que la loterie instantanée en même temps, la plupart en fait, aussi des centaines de milliers de demandes, mais si quelqu'un est en train d'écrire un script ou d'une brosse de prix de loterie répétition, il est actuellement possible afflux de millions de demande, des centaines de milliers de demandes, donc ici, nous pouvons éteindre le trafic invalide à intercepter.

Comme indiqué ci-dessous:

4.2 Tout bloquer le trafic de la violence de loterie

En fait, pic, prenez une enveloppe rouge, tirages au sort, ces systèmes ont une caractéristique commune, qui est en supposant que l'afflux d'un demi-million de demandes arrivent, probablement avant 50.000 demandes directement à la chose finie, et même mettre la première 500 demandes chose fini le travail, suivre le flux de centaines de milliers ne sont pas valides, vous n'êtes pas obligé de les laisser dans le système pour exécuter la logique métier.

Qu'est-ce que cela signifie?

Par exemple, les produits pic, en supposant qu'il ya 50 millions de personnes attrapent un téléphone mobile spécial, les gens prépareront un téléphone 100, puis demander un afflux instantané de 500000, en fait, mettre le téléphone avant que les 500 demandes se précipitent est terminée, des centaines de milliers de demande de suivi pas besoin de le laisser aller de l'avant à l'exécution de service Tomcat pointe la logique métier, est-ce pas?

Tombola, enveloppes rouges sont les mêmes, peut demander l'afflux de 500000, mais mettre la demande avant 10.000 prix sont fumés, ou prenez les enveloppes rouges sont terminées, le trafic ultérieur est déjà Tomcat ne pas besoin de mettre en place un service de loterie, retour d'interception de la violence directe tirages au sort fin sur elle.

Dans ce cas, en effet, dans ce équilibrage de charge de couche (Nginx peut être considéré à mettre en uvre une telle utilisation) peut être interceptée de 99% du trafic non valide.

Il doit être permis de tirer le service d'équilibrage de charge avec un mécanisme de partage entre l'État.

C'est tous les services de loterie de loterie une fois terminé, mettez à jour directement un état partagé. Chargez ensuite l'équilibrage perçue après, toutes les demandes ultérieures renvoient une interception de la fin du logo de loterie sur elle.

Cela pourrait atteindre 50 millions de demandes ensemble, le résultat peut être 20.000 demandes de services backend de loterie Tomcat, 480.000 demandes interceptés directement sur.

Nous pouvons être basé sur Redis pour atteindre cette loterie nationale partagée, il est très léger, il est adapté pour le système d'accès partagé de deux niveaux.

En fait, bien sûr, également possible, charge couche d'équilibrage peut surveiller l'état d'un client en fonction ZK nud znode avec ZooKeeper. Une fois la fin du tirage, les mises à jour des services de loterie ZK état, charge couche d'équilibrage sera perçue.

La figure ci-dessous montre le process mentionné ci-dessus:

5, le nombre de fils Tomcat optimisation

Le second est pour l'environnement de production Tomcat en ligne, il y a un besoin crucial d'ajuster le paramètre est bonne en fonction de leur propre situation, et qui est le nombre de threads de son travail.

Comme nous le savons tous, pour chaque demande est dans Tomcat, en fait, sera remis à un thread de travail séparé pour le traitement, le Tomcat le nombre de threads, détermine la capacité des demandes simultanées traitées.

Mais le nombre de threads qui ont besoin de passer par cette mesure de pression pour être jugée, parce que chaque thread traitera une demande, la nécessité de demande d'accès à des systèmes externes et des bases de données et autres, donc au lieu de paramètres pour chaque système peut être le même, pour leurs propres besoins la pression du système de mesure.

Mais à une valeur d'expérience, le nombre de threads que Tomcat est pas trop. Parce que trop de threads, le processeur de la machine virtuelle est commune ne pouvait transporter, mais provoquera la charge CPU de la machine est trop élevée, l'effondrement final.

En même temps, le nombre de threads de Tomcat ne devrait pas être trop petit, parce que si elle est de 100 fils de discussion, cela conduira à une sous-utilisation des ressources et des ressources CPU machine à fileter Tomcat.

Donc, en général, numéro de fil Tomcat entre 200 et 500 Il est possible, mais comment a besoin de beaucoup sa propre tension spécifique de mesure sur le réglage en permanence les paramètres, voir l'efficacité de la charge CPU spécifique et un thread d'exécution.

Dans la charge CPU est acceptable, ainsi qu'une demande d'exécution dans des circonstances normales les performances et d'améliorer certains du nombre de threads que possible.

Toutefois, si une valeur critique, trouver la charge de la machine est trop élevée, et le fil de traitement, le taux de demande a commencé à diminuer, ce qui indique que cette machine ne pouvait pas transporter autant de fils d'exécution simultanément traite la demande, et cette fois ne sera pas en mesure de continuer à augmenter le nombre de threads.

6, basé sur la logique métier de loterie mis en uvre Redis

Maintenant, la question à nouveau, bien que l'équilibrage de charge de niveau, par exemple, a mis 500000480000 sont dans l'interception de flux hors, mais peut-être encore 20000 flux dans le service de loterie

A ce stade, les services de loterie naturels est plus qu'une machine peut être déployée, comme en supposant qu'un Tomcat peut résister à 500 demande, 20000 concurrente est de 40 machines.

Si vous êtes une plate-forme cloud pour déployer le système, participer à des activités de location temporaire d'un certain nombre de machines sur elle, à la fin de l'événement la machine soit libéré immédiatement, maintenant plate-forme cloud est très pratique.

Mais il y a un problème, Votre base de données MySQL résista 20.000 demandes simultanées?

Si vous êtes basé sur MySQL pour mettre en uvre la logique métier de base de la loterie, les services de loterie 40 déploiement Tomcat des ajouts fréquents MySQL et les suppressions à l'enquête, celle-ci est difficile à des instances de MySQL d'anti-vécu.

Donc dans ce cas doivent remplacer le MySQL Redis, généralement ce scénario, la proposition est mise en uvre basée sur la logique métier de base Redis.

Redis Il était anti-20000 concurrentes autonomes chose très facile, donc ici, ils doivent faire une optimisation plus poussée. suit la figure:

7, cadeau émis liens pour limiter la coupure de courant de crête

Puis à nouveau le problème, en supposant qu'il ya 10000 demandes de service de loterie dans un tirage au sort dans 20.000 demandes, il va inévitablement conduire au service de loterie appel de service cadeau 10000 fois.

services Tomcat après le don est également supposé que l'optimisation peut être compliquée par anti-500, va également déployer 20 machine service cadeau?

En fait, ce n'est pas nécessaire, car après le tirage au sort peut faire un service cadeau en arrière-plan mis lentement versé aux gagnants du don, ne pas besoin de a soudainement volé 10.000 demandes traitées cadeaux logiques d'émission.

Voici donc entre les services de loterie et de cadeaux, l'introduction de middleware de messagerie, conduite Limitation de coupure .

En d'autres termes, d'envoyer des messages à MQ, puis le service de loterie gagnant suppose des services de cadeaux déployé deux Tomcat, relâchez lentement gagner, puis des messages de consommation de MQ lentement cadeau fini complet 1 sur elle.

Supposons que deux instances de service cadeau peut être fait pour 100 cadeaux distribués, puis 10000 cadeaux est retardé le paiement de 100 secondes est terminée Bale.

Que ce soit, après que vous dessinez, mais peut-être une minute ou deux, vous verrez une partie de leur propre logistique et la distribution de cadeaux émission de ces progrès.

Et le service cadeau peut avoir besoin de faire beaucoup dans une des opérations CRUD de base de données MySQL, telles que l'insertion gagnante enregistrement, puis offrir des cadeaux et ainsi de suite.

A cette époque, parce que le service de cadeaux sur deux instances de Tomcat, MySQL en lecture et écriture simultanée est donc pas trop élevé, le niveau de base de données peut également résister en direct.

L'ensemble du processus, comme illustré ci-dessous:

8, Résumé de conception du système d'architecture

En fait, pour les produits pointe, tombola, prenez une enveloppe rouge en termes de système de classe, de nombreuses idées de conception d'architecture sont similaires, l'idée de base est pour ce système instantané de débit ultra-élevé, dans la mesure du possible dans la couche d'équilibrage de charge mis 99% l'arrêt d'interception du trafic non valide

Puis, après 1% du trafic dans les services commerciaux de base, à ce moment, il peut être simultané ou par million et vous pouvez atteindre en fonction de la logique métier de base Redis, résisté aux milliers de concurrency.

Enfin, pour une marchandise de pic similaire expédié, tirages au sort livraison de marchandises, les transferts d'opération chronophage de fonds comme le rouge, peut être basée sur la limitation écrêtage MQ, il y a un service de base peut être lente exécution.

Robe jaune étrange - Édition Art Oriental House 2015 Xie Fuxian peint "vers le bas"
Précédent
Robe jaune étrange - Édition Art Oriental House Xie Fuxian 2015 peinture "Up"
Prochain
la plate-forme ordonnancement distribué antares
Cinq concept de village - Édition Art Oriental House 2014 peinture Wei Qing
Messagerie middleware au consommateur comment faire des échecs de traitement des messages? La réponse « out »!
pays Wuji - Édition Art Oriental House 2011 Dingding Fang peint
Hangzhou, un effondrement de la passerelle pour piétons provoquant unité d'exposition d'image du moniteur de voiture portant l'élément de blindage
« Les réductions d'impôt Frais d'abandon » stimuler l'industrie culturelle de passer à prospérer
Blanc-Désossé Démon - Édition Art Oriental House 2011 Sun puis peint
Pingdingshan - Édition Art Oriental House 2015 Wang Xuecheng peint "vers le bas"
Administrateur Zookeeper Zookeeper gérer le centre
Pingdingshan - Édition Art Oriental House 2015 Wang Xuecheng peint "sur."
Trois retour Jin Trois Royaumes 60 - Édition des Beaux-Arts de Shanghai Zhang Tao gens Maison, si Hu peint Bouddha
10 milliards de données ne sont pas l'expansion « double », comment ne pas affecter le service, la migration des données en douceur?