Skip to main content

Taobao a un grand nombre de données nationales en Chine. À l'heure actuelle, il existe plus de 3 milliards de magasins, des dossiers de navigation de base, de 10 milliards de produits en ligne, des dizaines de millions de transactions, de données de collecte et d'évaluation. Comment excaver la valeur commerciale réelle de ces données et aider Taobao, les marchands à mener des opérations de données des entreprises, aident les consommateurs à des décisions d'achat rationnelles, est la mission de la plate-forme de données de Taobao et du département de produits.


À cette fin, nous avons mené des recherches et du développement d'une série de produits de données, tels que les statistiques quantiques, les données Rubik et les index Taobao bien connus de tous. Malgré le niveau d'activité, le développement de produits de données n'est pas élevé; mais dans la définition de "massif", le calcul, le stockage et la récupération des produits de données augmentent soudainement. Cet article prendra le cube Data Rubik à titre d'exemple, vous présentera l'exploration de la technologie de technologie de données massive de données de Taobao.

Architecture de la technologie de données de données massive Taobao

Une caractéristique maximale de produits de données est une écriture en temps non réel, positive à cause de cela, nous pouvons penser que les données de l'ensemble du système est en lecture seule au cours d'une certaine période. Cela constitue une base très importante pour notre mise en cache design.


Fig. 1 Architecture technologique de données massive Taobao


Selon le flux de données, nous divisons les produits de données Taobao L'architecture technique est divisée. en cinq couches (comme illustré à la figure 1), qui sont des sources de données, des couches de calcul, des couches de stockage, des couches de requête et des couches de produits. Notre couche de données de données est située en haut de l'architecture, vous trouverez ici une base de données, telles que les utilisateurs, les magasins, les biens et les transactions, la navigation, la recherche et d'autres comportements. Cette série de données est la vitalité la plus primitive des produits de données.

Données générées en temps réel dans la couche de source de données, transmise à un cluster Hadoop avec 1 500 nœuds de la Datax, DBSYNC et TimeTeunnel de transfert de données Taobao, qui est transféré dans un cluster Hadoop avec 1 500 nœuds. Il s'agit de "échelle de nuage" et est les composants principaux de la couche de calcul. Sur l'échelle "Cloud", nous avons environ 40 000 emplois à 1,5 min de données brutes chaque jour, conformément aux exigences du produit. Ce processus de calcul est généralement effectué avant deux heures du matin. Par rapport aux données observées sur le produit avant, les résultats de calcul sont susceptibles d'être un résultat d'un état intermédiaire, qui résulte souvent d'un équilibre approprié entre la redondance des données et le calcul frontal.


Il convient de mentionner que certaines données sur l'efficacité de l'efficacité, telles que des statistiques pour les termes de recherche, nous espérons appuyer sur l'extrémité avant du produit de données dès que possible. Ce type de demande utilisera l'échelle "Cloud" pour calculer l'efficacité sera relativement faible, car nousFaites la plate-forme informatique en temps réel pour les données en continu, appelées «Galaxy». "Galaxy" est également un système distribué qui reçoit des messages en temps réel de Timetunnel, effectuez des calculs en temps réel en mémoire et rafraîchissez les résultats de calcul du périphérique de stockage NOSQL dans le périphérique de stockage NOSQL aussi court que possible pour les appels de produits frontaux.
Facile à comprendre, "L'échelle de nuages" ou "Galaxy" ne convient pas à fournir des services de demande de données en temps réel directement au produit. En effet, c'est parce que pour l'échelle de nuages, son positionnement ne fait que des calculs hors ligne et ne peut pas supporter une demande de performance et de concurrence plus élevées; et pour la "galaxie", bien que tout le code soit entre nos mains, mais l'intégration de l'intégrité de la réception de données, réelle -Te temps informatique, stockage et interrogation dans un système distribué, évitant ainsi la hiérarchie, en tombant éventuellement à l'architecture actuelle.

À cette fin, nous avons conçu une couche de stockage spéciale pour le produit frontal. Dans ce calque, nous avons une base de données relative à la base de données relationnelle de MySQL, basée sur la base de données NOSQL Storage basée sur la base de données NOSQL. Dans le texte suivant, je me concentrerai sur le principe de mise en œuvre de ces deux clusters. De plus, d'autres troisièmes modules partiels sont également inclus dans la catégorie de la couche de stockage.

L'augmentation du module hétérogène de la couche de stockage a un défi pour l'utilisation de produits frontaux. Pour ce faire, nous avons conçu une couche intermédiaire de données générale - planche - pour bloquer cet impact. Le planeur fournit une interface de mode reposante avec le protocole HTTP. Les produits de données peuvent obtenir les données qu'il souhaite via une URL unique.


Ce qui précède est une introduction générale des produits de données massives Taobao dans l'architecture technologique. Ensuite, je me concentrerai sur les caractéristiques de la conception du cube de Data Rubik.

Deuxièmement, la base de données relationnelle est toujours un roi

Base de données relationnelle (SGBDM) a été présentée depuis les années 1970, il a été largement utilisé dans la production industrielle. Après plus de 30 ans de croissance, un groupe de logiciels de base de données exceptionnels, tels que Oracle, MySQL, DB2, Sybase et SQL Server, etc.



Courbe de croissance des données dans MyFox

Bien que la relation soit liée à la base de données non relationnelle, la base de données soit désavantageuse dans la tolérance de la partition , mais en raison de sa forte capacité d'expression sémantique et de sa relation entre les données, il a toujours un rôle irremplaçable dans les produits de données.

Sélection de produits Taobao Sélection du produit MySQL's Myisam en tant que moteur de stockage de données sous-jacent. Sur cette base, afin de faire face à des données massives, nous avons conçu l'agent d'enquête du cluster distribué MySQL - MyFox, de sorte que la partition soit transparente à l'application frontale.

Fig. 3 Processus de requête de données MyFox

Les données de résultats statistiques stockées dans MyFox ont atteint 10 To le nombre total de données à partir des données totales sont plus plus de 95% de la quantité totale de données et augmente avec plus de 600 millions d'incréments par jour (comme indiqué à la figure 2). Ces données sont réparties uniformément de nous à 20 nœuds MySQL et lors de la requête, les données sont transparentes externes sur le MyFox (comme indiqué à la Fig. 3).






mérite d'être mentionnés, dans MyFox dans quelque 20 nœuds, pas tous les nœuds sont égaux". En général, les utilisateurs de produits de données ne concernent plus que les données "jours récentes", moins les données sont plus faciles à être froides. À cette fin, nous avons divisé les "nœuds à chaud" et les "nœuds à froid" dans ces 20 nœuds (illustrés à la figure 4) pour des considérations de coûts matérielles.
Comme son nom l'indique, "Hot Node" stocke le dernier et a une fréquence d'accès élevée. Pour cette partie des données, nous espérons fournir aux utilisateurs le plus rapidement possible la vitesse de requête possible, nous avons donc choisi
SAS

disque dur par minute, selon les deux machines, en unités d'un nœud du coût de stockage. des données est d'environ 4,5W / TB. Comparaison, "Données à froid" Nous avons sélectionné des disques durs SATA par minute et plus de données peuvent être stockées sur un seul disque et le coût de stockage est d'environ 1,6W / TB.


Un autre avantage de la séparation des données de chaleur à froid peut réduire efficacement le rapport de disque de mémoire. Comme on peut le voir à partir de la figure 4, seuls 24 Go de mémoire sont seulement 1,8 To (300 * 12 * 0.5 / 1024) et le disque de mémoire est d'environ 4: 300, ce qui est beaucoup plus bas que le serveur MySQL. Une valeur raisonnable. La conséquence du disque de mémoire est plus longue que trop basse, il y a un jour, même si toute la mémoire est utilisée pour enregistrer l'index des données - cette fois, un grand nombre de demandes de requête doivent lire des index du disque, l'efficacité est grande. Rabais.

Troisièmement, NOSQL est un complément utile de SQL


apparaît dans myfoxAprès cela, tout a l'air si parfait, le développeur ne réalise même pas l'existence de MyFox et une instruction SQL qui n'a pas à être modifiée répondra aux besoins. Cet état dure longtemps, jusqu'à un jour, nous avons rencontré la base de données relationnelle traditionnelle qui ne pouvait pas être résolue - le sélecteur de propriété complète (illustré à la figure 5).



Fig. 5 Sélecteur de propriétés complète

C'est un exemple très typique. Pour illustrer le problème, nous décrivons toujours l'idée de bases de données relationnelles. Pour ordinateurs portables, les critères de filtrage sélectionnés par l'utilisateur peuvent inclure la "taille du cahier", "Emplacement du cahier", "Capacité du disque dur", etc et peuvent être utilisés dans des conditions de filtration. Attribut, la distribution des valeurs d'attribut est extrêmement inégal. Sur la figure 5, nous pouvons voir que cette propriété de l'ordinateur portable dispose de 10 valeurs d'énumération et la valeur d'attribut «Bluetooth fonction» est une valeur booléenne et les données sont très médiocres.


Dans le cas où l'état du filtre sélectionné par l'utilisateur, il existe deux façons de résoudre le problème de tous les problèmes d'attribut: l'une est épuisée toutes les conditions de filtration possibles, pré-pré-"calculer, dépôt La base de données pour la requête; l'autre est de stocker des données brutes et que l'enregistrement correspondant est sélectionné en fonction de l'état du filtre en fonction de la condition de filtrage, dans la requête de l'utilisateur. De toute évidence, en raison de la combinaison d'alignement des conditions de filtration, le premier programme n'est pas souhaitable en réalité; dans la deuxième solution, où sont les données originales stockées? Si vous utilisez toujours une base de données relationnelle, comment avez-vous l'intention de créer un index pour cette table?

Cette série de problèmes provient de l'idée de "créer un service de stockage personnalisé, du champ de champ et de fournir un service de requête", qui est Prométhée (illustrée à la figure 6).

La structure de stockage de la bal de bal



On peut voir la figure 6, nous avons été sélectionnés comme le sous-jacent moteur de stockage du bal de bal. La raison de choisir HBASE est principalement parce qu'elle est construite sur HDFS et possède une bonne interface de programmation pour MapReduce. Bien que le bal soit un général, résolvant un cadre de service à problèmes courants, mais ici, nous avons toujours un choix de propriété à part entière comme exemple pour expliquer le principe de travail du bal de promo. Les données d'origine Voici les informations de transaction sur Taobao par jour, dans le cluster HBASE, nous stockons comme clé de ligne avec des paires de propriétés (combinaisons d'attributs et de valeurs d'attributs). Et la clé de ligne correspond à la valeur, nous avons conçu deux colonnes-FAMILY, I.E le champ d'index de l'ID de transaction et le champ de données de détail de transaction d'origine. Dans le magasin, nous laissons constamment chaque élément de chaque champ, qui consiste à trouver rapidement l'enregistrement correspondant rapidement à travers le décalage, évitez les algorithmes de recherche complexes et un grand nombre de demandes de lecture aléatoires pour le disque..

Fig. 7 Processus de requête



La fig. 7 est un exemple typique décrit le principe de fonctionnement lors de la requête services, limités à l'espace, qui n'est pas décrit en détail. Il convient de mentionner que le calcul du bal n'est pas limité à la somme des opérations de somme, et les calculs communs du sens statistique sont pris en charge. En termes de calcul sur site, nous avons élargi HBASE. Les données renvoyées par PROM sont la solution optimale locale qui a été "calculs locaux". La solution optimale globale finale n'est que l'une des meilleures solutions locales retournées par chaque nœud. Simple sommaire. De toute évidence, cette idée de conception consiste à utiliser pleinement la puissance de calcul parallèle de chaque nœud et à éviter un grand nombre de détails sur la transmission du réseau.

4 fournit une solution pour le stockage de données et les requêtes sous-jacentes, mais le problème est que les différents modules de stockage hétérogènes ont apporté de grands défis à l'utilisation de produits frontaux. De plus, les données requises pour une demande pour le produit avant extrémité sont souvent impossibles à obtenir uniquement d'un module.
Par exemple, nous devons voir les marchandises qui sont utilisées hier dans les données Rubik, obtenez d'abord les données de MyFox à une liste de vente à chaud, mais le "produit" ici n'est qu'un identifiant, pas de correspondance articles correspondant à l'ID, aux images et autres données. À ce stade, nous devons obtenir ces données de l'interface fournies par Taobao MainStay, puis correspond à la liste de vente à chaud et enfin présent à l'utilisateur.

Fig. 8 Architecture de la technologie du planeur


Les lecteurs expérimentés peuvent penser, en substance, il s'agit de l'opération de jointure entre l'hétérogène "Table" dans un sens large. Alors, qui est responsable de cette chose? Il est facile de penser qu'une couche intermédiaire est ajoutée entre la couche de stockage et le produit avant, responsable des données de données et union entre les différentes "tables" hétérogènes et isole le produit frontal et le stockage backend, fournissant un Service de requête de données unifié.. Cette couche intermédiaire est planeur (illustrée à la figure 8).


Cinq, le cache est un ingénierie systématique

Outre l'effet de l'isolation de l'intégration des données entre l'extrémité avant et arrière et la "table" hétérogène, une autre façon d'être alléguée dans le planeur est la gestion de cache. Ce qui précède a mentionné que, dans une période donnée, nous pensons que les données du produit de données sont en lecture seule, ce qui est l'utilisation de la mise en cache pour améliorer les performances théoriques.

Sur la figure 8, nous voyons qu'il existe une cache à deux couches dans le planeur, qui est basée sur le cache de second niveau et l'intégration de chaque "table" hétérogène (DataSource), basée sur la demande indépendante.. En outre, il peut y avoir son propre mécanisme de mise en cache à l'intérieur de chaque "table" hétérogène. Les lecteurs soigneux doivent faire attention à la conception de la cache de myfox à la figure 3. Nous n'avons pas choisi le résultat final du résumé calculé au cache, mais un cache pour chaque tranche, son objectif est d'augmenter le taux de frappe du cache, et Réduire la redondance des données.

Le plus gros problème avec un grand nombre de cache est des problèmes de cohérence des données. Comment s'assurer que la variation des données sous-jacentes est reflétée dans l'utilisateur final aussi court que possible? Il s'agit d'un ingénierie systématique, en particulier pour plus d'un système plus grand.



Fig. 9 Système de contrôle de cache

Fig. 9 Nous présentons les idées de conception du cache de Data Rubik. Dans la demande de l'utilisateur, il doit s'agir d'une "commande" avec le contrôle du cache, qui inclut la chaîne de requête dans l'URL et les informations "Si-Non-correspondeur" dans l'en-tête HTTP. De plus, cette commande de contrôle de cache "commande" passera définitivement par la couche et passera finalement au module "Table" hétérogène stocké par la couche inférieure. Chaque "table" hétérogène, à l'exception des données respectives, le temps d'expiration de la cache de données correspondant (TTL) est renvoyé et la durée d'expiration de la sortie finale du planeur est la valeur minimale de chaque heure d'expiration hétérogène "Table". Cette heure d'expiration doit également être transmise à partir de la couche de mémoire sous-jacente, de revenir éventuellement au navigateur de l'utilisateur via l'en-tête HTTP.
Un autre problème que le système de cache doit envisager est de mettre en cache un effet avalanche au moment de l'échec. La pénétration du cache fait référence aux données qui n'existaient pas. Puisque le cache est passif lorsque le cache n'est pas touché, et s'il est pris en compte, si les données ne sont pas détectées à partir de la couche de stockage, elle n'écrira pas le cache, ce qui ne fera pas Ces données existantes. Chaque requête est à la couche de stockage pour interroger, perdre la signification du cache.

Il existe de nombreuses façons de résoudre efficacement le problème de la pénétration de la mise en cache. Le plus courant est d'utiliser le filtre de buron, ainsi que de toutes les données de données possibles à une assez grande taille suffisante.Bitmap, une certaine donnée qui doit être interceptée par ce bitmap, évitant ainsi la pression de la requête sur le système de stockage sous-jacent. Dans les données Rubik, nous utilisons une voie plus simple et impolie. Si les données renvoyées par une requête sont vides (si les données n'existent pas, ni la défaillance du système), nous cachsions toujours ce résultat vide, mais son temps d'expiration qu'il sera court, jusqu'à 50 minutes.

L'impact de l'avalanche dans le cache a échoué était terrible pour le système sous-jacent. Malheureusement, ce problème n'est actuellement pas une solution parfaite. La plupart des concepteurs de systèmes envisagent d'utiliser la serrure ou la file d'attente pour assurer un seul filetage (processus) écrit à la mise en cache, évitant ainsi un grand nombre de demandes concomitantes au système de stockage final lorsqu'ils échouent. Dans les données Rubik, le mécanisme d'expiration du cache que nous avons conçu est théoriquement de distribuer uniformément le temps de défaillance des données de chaque client sur la chronologie dans une certaine mesure, afin d'éviter que le cache échoue simultanément.




est basé sur les caractéristiques architecturales décrites ici et les données sont désormais en mesure de fournir la compression 80TB. Espace de stockage de données Le planeur de couche intermédiaire de données prend en charge 40 millions de demandes de requête par jour et le délai de réponse moyen est de 28 millisecondes (données du 1er juin), suffisamment pour répondre aux besoins de croissance des entreprises dans la prochaine période de temps.

Malgré cela, il reste encore beaucoup d'endroits imparfaits dans l'ensemble du système. Un exemple typique est un protocole HTTP qui utilise un mode de connexion court entre chaque hiérarchie pour communiquer. De telles stratégies conduisent directement à des connexions TCP très élevées dans la période de pointe du débit. Ainsi, une bonne architecture peut également réduire dans une large mesure le coût du développement et de la maintenance, mais il doit constamment changer avec la quantité de données et de débits. Je crois qu'après quelques années, l'architecture technique des produits de données Taobao sera certainement regarder.

Sujets

Catégories