Ctrip le comportement des utilisateurs dans les systèmes en temps réel pratique

le comportement des utilisateurs Ctrip en service en temps réel comme un service de base, maintenant largement utilisé dans de nombreux scénarios, comme vous devinez comme (Ctrip système recommandé), la publicité dynamique, portraits des utilisateurs, l'historique de navigation, et ainsi de suite.

Aimez-vous deviner, par exemple, vous pouvez également vous proposer des options pour des applications potentielles dans l'utilisateur, d'améliorer l'efficacité des transactions. Est-ce un besoin de voyage complet, les utilisateurs ont souvent besoin de plus d'un produit. En tant que guichet unique plate-forme de services de Voyage, des lignes croisées recommandées d'affaires, en particulier la recommandation en temps réel, pour répondre aux besoins réels des utilisateurs, fournissant ainsi ouvrir les données de comportement des utilisateurs en amont entre les différents secteurs d'activité sont très nécessaires.

Il y a des problèmes, y compris le comportement Ctrip utilisateur à temps réel d'origine du système: 1) la couverture incomplète des données; 2) il n'y a pas de format de sortie de données uniforme pour de nombreux consommateurs pour améliorer les coûts d'accès; 3) log module de traitement est un service web, plus difficile à supporter une variété de stratégies de traitement des données et obtenir une extension facile à faire face à la demande de pointe du trafic.

Mais ces dernières années, la croissance rapide du marché du tourisme, ce qui augmente la quantité de données, et continuera à croître rapidement. Il y a un nombre croissant de besoins, système en temps réel, la stabilité a également mis en avant des exigences plus élevées. Dans l'ensemble, la demande actuelle sur le système de temps réel / disponibilité / performances / évolutivité très forte demande.

Tout d'abord, l'architecture

Dans ce contexte, nous avons modifié la structure selon les systèmes suivants:

Figure 1: l'utilisateur en temps réel voir le comportement de la logique du système

Selon la nouvelle architecture, il y a deux flux de données, sont traitées et les flux de sortie.

Dans le flux de processus, les journaux de comportement seront téléchargées à partir du client (App / ligne / H5) sur le côté service du Service Collector. Collector service envoyer un message à une file d'attente distribuée. module de traitement de données est complétée par le cadre du calcul flux, les données sont lues à partir de la file d'attente distribuée, les données d'écriture après que la couche de traitement, une grappe de bases de données et cache distribué.

Le flux de sortie est relativement simple, arrière-plan de service Web extraire des données de la couche de données, et la sortie à l'appelant, certains appels de service internes, un tel système de recommandation, mais aussi une sortie à l'avant, comme l'historique de navigation. la mise en uvre du système Java + applications + Kafka + Tempête Redis + Mysql + Tomcat + pile de technologie Spring.

  • Java: Java est actuellement au sein de l'entreprise de l'atmosphère relativement forte, et Java est plus mature gros composants de données
  • Kafka / Storm: la file d'attente de messages Kafka comme une application distribuée a été relativement mature, cadre de calculs de flux tempête a atterri dans l'entreprise, et il y a un meilleur environnement de soutien exploitation et la maintenance.
  • Redis: HA, SortedSet et l'expiration des fonctionnalités telles que Redis est préférable de satisfaire aux exigences du système.
  • MySQL: deux indicateurs comme base pour la stabilité du système et la performance du système est la principale option contraste de NoSQL, tels HBase et ElasticSearch, MySQL ont de meilleures performances dans les deux milliards de niveau de données, et est conçu pour avoir une bonne le niveau d'évolutivité.

Le système est en cours de traitement quantité de données par jour d'environ 20 millions, à partir du moment de la ligne de données disponibles à environ 300 millisecondes. Service de suivi d'environ 80 millions de demandes par jour, avec un délai moyen d'environ 6 millisecondes. Les éléments suivants du temps réel / disponibilité / performances / déployer plusieurs dimensions pour illustrer la conception du système.

En second lieu, en temps réel

En tant que système en temps réel, les performances en temps réel est le principal indicateur. système en ligne fait face à une variété de circonstances inhabituelles. Par exemple, les situations suivantes:

  • pic de trafic Bursty, la façon de traiter;
  • défaillance du module ou de défaut, comment faire en sorte que le processus de nouvelle tentative de données d'échec tout en assurant les nouvelles données;
  • Les questions environnementales ou bug provoque l'arriéré de données, la rapidité de la digestion;
  • bug du programme, le besoin de retraiter les anciennes données, la façon de traiter rapidement avec en même temps veiller à ce que les nouvelles données;
  • Système de l'examen de la conception initiale de la situation ci-dessus.

    La première est une tempête pour résoudre le problème du pic de trafic éclaté. tempête présente les caractéristiques suivantes:

    Figure 2: Caractéristiques de tempête

    Comme une trame de calcul du débit et la trame antérieure des données de grandes traitement par lots clairement distingué. cadre de lot est terminé pour effectuer une tâche à la fin de la course, et le cadre de traitement de flux a continué à courir, en théorie, n'a jamais cessé, et la granularité de traitement est le niveau de message, tant que la capacité de calcul suffisante du système, nous pouvons garantir à chaque message peut être le premier un temps pour être trouvée et traitée.

    Les systèmes actuels, le châssis de processus d'assaut, le message peut être traité millisecondes après l'entrée kafka. En outre, la tempête avec une forte capacité à l'échelle sur. Tant que le nombre de paramètres à modifier par travailleur arrière-plan, et la topologie de redémarrage (nom de la tâche de tempête), vous pouvez étendre la puissance de calcul immédiatement, facile à traiter avec un pic de trafic inattendu.

    tempête manipulation du message prend en charge une variété de stratégie d'assurance de données, au moins une fois, au plus une fois, une seule fois. le comportement des utilisateurs en temps réel, la première est de veiller à ce que les données sont peu perdu que possible, en plus de soutien, y compris nouvelle tentative et de déclassement d'une variété de données stratégie de traitement, et ne peut pas tirer profit d'exactement une fois, mais réduira les performances, car le support des transactions, l'utilisateur si en temps réel au moins une fois un comportement politique du système utilisé. Les messages peuvent réémettre cette stratégie, les outils du programme de la puissance de traitement et d'autres supports.

    tempête la libération de relativement simple, téléchargez le package de mise à jour et redémarrez le pot pour compléter la tâche une fois libéré, il n'y a malheureusement pas de support pour la version multi-niveaux de gris publié.

    Figure 3: Architecture Storm

    Dans certains cas, vous devez recommencer le traitement des données, telles que le temps de sortie de connexion de base de données, ou non connecté. Délai de connexion dépassé pourrait bientôt être en mesure de récupération de nouvelle tentative, mais ne peut pas se connecter prennent généralement plus de temps à attendre pour le programme de traitement réseau de récupération ou base de données ne peut pas toujours attendre que cette situation, sinon il causera la latence des données. le comportement des utilisateurs en temps réel de la conception du système utilise une double file d'attente pour résoudre ce problème.

    Figure 4: Conception file d'attente bis

    Les producteurs effectueront des écrits enregistrement Queue1 (principalement pour maintenir la fraîcheur des données), la consommation des travailleurs de nouvelles données de Queue1. Si l'apparition des données anormales, les données anormales est écrit Queue2, travailleur (tenu des données anormales primaire).

    Un tel travailleur de la consommation Queue1 n'affectera pas les progrès des données anormales peuvent conserver les données de consommation fraîches. RetryWorker écoute Queue2, les données de consommation anormale, si la fonction d'une certaine stratégie de traitement n'a pas été couronnée de succès, (comme illustré ci-dessous) ou d'attente pour les données re-exception est écrit Queue2.

    Figure 5: la stratégie de nouvelle tentative de compensation

    De plus, lorsque le carnet de données se produit, vous pouvez ajuster le curseur à la consommation des travailleurs, la consommation re-démarrage des données les plus récentes, afin d'assurer que les dernières données sont traitées. La section centrale de données non traitées est démarré backupWorker, spécifier le début et la fin curseur, après un intervalle spécifié de données de consommation finis, backupWorker s'arrêtera automatiquement. (Voir ci-dessous)

    Figure 6: Digestion arriéré de données

    En troisième lieu, la disponibilité de

    En tant que service de base, les exigences de disponibilité est beaucoup plus élevé que le service moyen, parce que les services dépendants en aval plus d'une fois l'échec se produit, il peut provoquer une cascade affecter beaucoup d'affaires. Projet de la conception fait un accord avec les questions suivantes, système de garantie la disponibilité:

  • Le système a un seul point?
  • extension / maintenance DB / échec, comment faire?
  • entretien Redis / patch de mise à niveau, comment faire?
  • Service en cas lié à la façon de récupérer rapidement? Comment minimiser l'impact sur les applications en aval?
  • La première est de faire un niveau du système de cluster pile complète. kafka et tempête elle-même est mature relativement opération de cluster de support et d'entretien; le traitement de supports de service Web et la réalisation de regroupement par l'équilibrage de charge; Redis et DB respecter Ctrip a un support déploiement de veille, l'utilisation du procédé en cas de défaillance hôte, la sauvegarde automatiquement de prendre en charge le service, pas un seul point par le système de support de cluster pile complète.

    disponibilité plus dégradé par le système de traitement pour protéger l'ensemble du système dans un module partiel ne sont pas disponibles. Vérifiez les données normales du traitement des flux :( ci-dessous)

    Figure 7: Données flux normal

    Dans l'état normal du système, de lire les données de Storm kafka et sont écrits dans le mysql Redis. Service Redis de la traction (le temps pris de la db moins de compensation), la sortie au client. DB dégradé cas, le flux de données change également (voir ci-dessous)

    . Figure 8: dégradation du système -DB

    Lorsque MySQL indisponible, db dégradé par interrupteur d'ouverture, Tempête Redis normalement écrite, mais pas l'écriture de données MySQL. Les données peuvent être saisies reids utilisent le service de requête, fourni au client. De plus TEMPETE écrire des données à une kafka la file d'attente de nouvelle tentative, après mysql service normal, db dégradé en fermant l'interrupteur, le consommateur de données sera d'assaut la file d'attente de nouvelles tentatives de données d'écriture dans le mysql. Redis et les données mysql seront incohérentes lors de la révision à la baisse, mais le système sera de retour à la normale par la nouvelle tentative finale de garantir la cohérence des données. Procédé de dégradation Redis est similaire (voir ci-dessous)

    Figure 9: déclassement -Redis

    La seule différence est que les capacités de service d'un peu dépassent de loin mysql. Ainsi, lorsque le système Redis débit downgrade est en panne. Ensuite, nous surveillerons db pression, si la pression trouvé mysql, arrêtera temporairement l'écriture des données, ce qui réduit le mysql de pression, assurant ainsi des services de renseignements stables.

    Afin de réduire l'impact sur l'état de défaut en aval, supporte les requêtes en mode de soufflage assemblage de Netflix Hystrix (voir ci-dessous).

    Figure 10: Circuit Breaker Motif

    Dans ce mode, lors d'une défaillance de la demande de service est supérieure à une valeur de seuil dans un délai donné, le fusible va ouvrir le commutateur. Dans le cas où le commutateur est activé, la réponse de défaillance du service de retour direct à la demande ultérieure, la demande ne sera pas laisser passer le module de service, afin d'éviter une nouvelle augmentation de la pression provoquée par le serveur d'avalanche, il ne sera pas glisser sur les temps de réponse de l'appelant.

    Commence à compter après que l'interrupteur est ouvert, après le délai d'attente entrera dans un état de entrouvertes, dans cet état sera autorisé par une demande d'entrer dans le module de traitement de service, si le commutateur de retour normal est fermé, sinon le commutateur reste ouvert jusqu'à ce que le délai d'attente suivant. service normal sera en mesure de reprendre ses activités après cette demande.

    De plus, afin d'éviter l'impact sur les appels de service appelant unique illégal, le service prend en charge également de limiter les dimensions multiples, y compris l'appelant AppId / ip limite et services limitant, comme la limitation de l'interface.

    Quatrièmement, la performance et prolongée

    En raison de la croissance rapide de l'industrie Voyage en ligne au cours des dernières années, en tant que leader de l'industrie en plein essor Ctrip aussi, et par conséquent la quantité de trafic de données a augmenté de façon spectaculaire. Les entreprises ont besoin des services est 10 fois l'expansion de la capacité peut être prise en charge, en partie la plus difficile de la couche de données étendue, comme liée à la migration des données sur les stocks.

    En temps réel système de couches de données de comportement des utilisateurs comprend Redis et Mysql, Redis à obtenir un hashage cohérent, quand il suffit d'ajouter la machine d'expansion, et les données pour la nouvelle partition allouée à la compensation peut être lu.

    Mysql, nous avons fait un niveau de segmentation comme une extension de la préparation, tranche le nombre d'options à considérer pour le n-ième puissance de 2, ce qui a des avantages évidents lorsque l'expansion. Parce que la base de données Cheng MySQL est maintenant largement utilisé d'une manière principale, lorsque la machine d'expansion peut être directement préparé dans une deuxième station de nivellement (groupe) hôte. En supposant que les points originaux des deux bibliothèques, d0 et d1, sont placés sur le serveur s0, machine de préparation s0 s1 tout. L'expansion ne nécessite que les étapes suivantes:

  • Assurez-vous s0 - >  s1 synchrone en douceur, sans retard significatif
  • s0 autorisations en lecture et écriture temporairement fermé
  • Confirmer s1 s0 mise à jour a été entièrement synchronisé
  • s1 l'accès en lecture-écriture
  • d1 est commuté de s0 s1 à dns
  • s0 un accès en lecture-écriture
  • Le processus de migration en utilisant les caractéristiques de distribution de réplication MySQL, en évitant le processus de synchronisation manuelle fastidieuse et sujette aux erreurs, ce qui réduit considérablement le temps et le coût de la migration. L'ensemble du processus peut être fait en quelques minutes, fonction de liaison dégradée DB, l'exception de transfert de quelques secondes est généré.

    dans une certaine mesure, l'exploitation plus faible et la charge de l'entretien, l'ensemble du processus relativement simple, peut également réduire la possibilité de causer exploitation excessive tragédie similaire de style gitlab ce.

    V. déploiement

    le déploiement de la tempête a été mentionné précédemment est assez facile, il suffit de télécharger le redémarrage pour terminer le déploiement. Depuis le redémarrage du programme après la perte de déploiement de leur contexte, peuvent être traitées par l'enregistrement de la position du curseur avant de trouver Kafka, le processus de restauration.

    En outre, il y a des cas peuvent avoir besoin d'exécuter plusieurs versions, telles que le comportement des versions multiples temporairement record, auquel cas nous allons ajouter une backupJob, la version historique d'exécution dans backupJob.

    Il avait joué « comme Yi Chuan » instrument élégant, vêtu d'un costume à carreaux et jouer sous les vêtements portés disparus, avec les cheveux courts de longueur d'épaule très belle
    Précédent
    Savoir Zhejiang | M. Li Lu Weiding fois apparu auto Shanghai exposition musée de voitures de luxe, en fait ......
    Prochain
    Coulée Nazha vraie fille pull robe bracelet retour aux États-Unis 17 ans, mais des amis ridicule: le visage est trop grand
    Serie A Review: La Qiao bouleversé négative Chievo, Bologne, Turin triomphe Spahr
    Les hommes ne pleurent pas plus d'une seconde avant de sauter la seconde suivante: me tirer!
    [Sec] Lot à l'échelle: comment former le réseau de neurones plus rapide profondeur
    Demi-pension: Feng Sui Weijie fait frais menaces dépanneuse, 0-0 partie Chongqing
    Officiel: la vague de quart de finale de la Ligue des Champions monde Meixineiqie a été élu meilleur buts
    18 ans, a été champion « My Hero », porter des vestes courtes avec un pantalon slim, ressemble adolescent exquis
    Apprentissage en profondeur combat portail (a): Comme algorithme Prisma pour générer le même style de portrait Van Gogh
    Chen Turin trop pour les jaunes, un pantalon de pièce d'oreille en bois aussi les cheveux légèrement bouclés, elle dit âgé de 18 ans sont trop nombreux
    Français: Montpellier Nîmes Jiangong Marseille, Nice a perdu à Caen
    Yamy peigne gros rouge à lèvres de la tête arrière peint champ de gaz noir, super, accrocheur Qiuku bleu avec des sandales
    Essayez et d'explorer le texte du jeu de travail d'extraction de mots-clés