Maison  >  Article  >  développement back-end  >  Modifications de la structure du site Web de Zhihu

Modifications de la structure du site Web de Zhihu

伊谢尔伦
伊谢尔伦original
2017-02-04 16:43:022578parcourir

Zhihu est une véritable communauté de questions et réponses en ligne avec une atmosphère communautaire conviviale et rationnelle qui relie les élites de tous horizons. Les utilisateurs partagent leurs connaissances professionnelles, leur expérience et leurs idées, fournissant en permanence des informations de haute qualité pour l'Internet chinois.

Peut-être que beaucoup de gens ne savent pas que Zhihu est la plus grande communauté UGC (contenu généré par les utilisateurs) sur l'Internet chinois après Baidu Tieba et Douban. Au cours des trois années écoulées depuis que Zhihu a démarré son activité, l'entreprise est partie de zéro et compte désormais plus de 100 serveurs. À l'heure actuelle, Zhihu compte plus de 11 millions d'utilisateurs enregistrés et plus de 80 millions de personnes l'utilisent chaque mois ; le site Web compte plus de 220 millions de PV chaque mois et près de 2 500 requêtes dynamiques par seconde.

Lors de la conférence ArchSummit Beijing 2014, le cofondateur et directeur technique de Zhihu, Li Shenshen, a présenté le premier partage technologique complet de Zhihu en plus de trois ans depuis sa création.

Sélection initiale de l'architecture

Lorsque nous avons réellement commencé à travailler sur le produit Zhihu en octobre 2010, il n'y avait initialement que deux ingénieurs, dont Li Shenshen ; au moment du lancement en décembre 2010, il y avait quatre ingénieurs ;

Le principal langage de développement de Zhihu est Python. Parce que Python est simple et puissant, il peut être adopté rapidement, l'efficacité du développement est élevée et la communauté est active, donc les membres de l'équipe l'apprécient également.

Zhihu utilise le framework Tornado. Parce qu'il prend en charge l'asynchrone, il est très adapté aux applications Comet en temps réel, est simple et léger et a de faibles coûts d'apprentissage. De plus, il dispose de cas matures de FriendFeed et du support communautaire de Facebook. Le produit de Zhihu a la particularité d'espérer établir une longue connexion avec le navigateur pour faciliter les flux push et les notifications en temps réel, Tornado est donc plus approprié.

Au départ, l'énergie de toute l'équipe était concentrée sur le développement des fonctions du produit, et dans d'autres aspects, ils ont essentiellement utilisé la méthode la plus simple pour gagner du temps et de l'argent. Bien sûr, cela a également causé quelques problèmes à un stade ultérieur.

L'idée initiale était d'utiliser l'hébergement cloud pour réduire les coûts. Le premier serveur de Zhihu était un hôte Linode doté de 512 Mo de mémoire. Cependant, après le lancement du site Web, la popularité de la version bêta fermée a dépassé les attentes et de nombreux utilisateurs ont signalé que le site Web était très lent. Les délais du réseau transfrontalier sont plus importants que prévu, d'autant plus que le réseau domestique est déséquilibré et que les conditions d'accès des utilisateurs à travers le pays ne sont pas les mêmes. Avec ce problème, associé à la nécessité d'enregistrer des noms de domaine à cette époque, Zhihu est revenu à l'ancienne voie consistant à acheter des machines et à trouver des salles informatiques.

Après avoir acheté la machine et trouvé une salle informatique, j'ai rencontré de nouveaux problèmes et le service était souvent en panne. A cette époque, la machine du prestataire avait toujours des problèmes de mémoire et était redémarrée à chaque instant. Enfin, il fut un temps où la machine tombait en panne et ne pouvait pas être restaurée. À ce moment-là, Zhihu rendait la haute disponibilité pour le Web et la base de données. L'entrepreneuriat est une telle situation, on ne sait jamais à quel genre de problèmes vous serez confronté en vous réveillant demain matin.

Modifications de la structure du site Web de Zhihu

Il s'agit du schéma d'architecture à ce stade, le Web et la base de données étant maître-esclave. Le service d'imagerie à cette époque était hébergé sur Youpaiyun. En plus du maître-esclave, une séparation en lecture et en écriture est également effectuée pour de meilleures performances. Afin de résoudre le problème de synchronisation, un serveur a été ajouté pour exécuter des scripts hors ligne afin d'éviter les retards de réponse aux services en ligne. De plus, afin d'améliorer le délai de débit de l'intranet, des équipements ont été remplacés, augmentant ainsi de 20 fois le débit de l'ensemble de l'intranet.

Au premier semestre 2011, Zhihu était déjà très dépendant de Redis. En plus de l'utilisation initiale des files d'attente et des recherches, le cache a également été utilisé plus tard. Le stockage sur une seule machine est devenu un goulot d'étranglement, le partitionnement a donc été introduit et la cohérence a été mise en œuvre.

L'équipe Zhihu est une équipe qui croit aux outils et estime que les outils peuvent améliorer l'efficacité. Les outils sont en réalité un processus. Il n’existe pas de soi-disant meilleur outil, seulement l’outil le plus approprié. Et cela change constamment tout au long du processus, à mesure que l’état entier change et que l’environnement change. Les outils développés ou utilisés par Zhihu incluent le profilage (demandes de suivi, analyse et réglage au niveau des fonctions), Werkzeug (un outil pour un débogage pratique), Puppet (gestion de la configuration) et Shipit (en ligne ou restauration en un clic), etc.

Système de journalisation

Zhihu était à l'origine un système sur invitation uniquement. Au cours du second semestre 2011, Zhihu a lancé l'enregistrement des applications. Les utilisateurs sans code d'invitation peuvent également demander à enregistrer Zhihu en remplissant certaines informations. Le nombre d'utilisateurs a atteint un nouveau niveau. À l'heure actuelle, certains comptes publient des publicités et les publicités doivent être supprimées. La nécessité d’un système de journalisation est à l’ordre du jour.

Ce système de journaux doit prendre en charge la collecte distribuée, le stockage centralisé, le temps réel, la possibilité d'abonnement et la simplicité. À cette époque, j'ai étudié certains systèmes open source, tels que Scribe, qui étaient généralement bons, mais ne prenaient pas en charge les abonnements. Kafka a été développé à Scala, mais l'équipe a moins d'accumulation dans Scala, elle est similaire et plus lourde. L'équipe de développement a donc choisi de développer elle-même un système de journalisation - Kids (Kids Is Data Stream). Comme son nom l'indique, Kids est utilisé pour regrouper divers flux de données.

Les enfants s’appuient sur les idées de Scribe. Kdis peut être configuré en tant qu'agent ou serveur sur chaque serveur. L'Agent accepte directement les messages de l'application. Après avoir collecté les messages, il peut appeler l'Agent suivant ou appeler directement le serveur central. Lors de l'abonnement aux journaux, il peut être obtenu depuis le serveur ou depuis certains agents du nœud central.

Modifications de la structure du site Web de Zhihu

Les détails spécifiques sont indiqués ci-dessous :

Modifications de la structure du site Web de Zhihu

Zhihu a également créé un gadget Web (Kids Explorer) basé sur Kids, qui prend en charge la visualisation en temps réel des journaux en ligne. Il est désormais devenu l'outil le plus important pour déboguer les problèmes en ligne.

Kids a été open source et mis sur Github.

Architecture événementielle

Il existe une caractéristique du produit Zhihu. Après avoir ajouté une réponse au plus tôt, les opérations ultérieures ne sont en fait que des notifications de mise à jour et des mises à jour. Cependant, avec l'augmentation de la fonction entière, il y a plus d'opérations telles que la mise à jour de l'index, le nombre de mises à jour, la révision du contenu, etc., et les opérations ultérieures sont diverses. Si nous suivons l’approche traditionnelle, la logique de maintenance deviendra de plus en plus vaste et la maintenabilité sera très mauvaise. Ce scénario est très adapté à l'approche événementielle, c'est pourquoi l'équipe de développement a ajusté l'ensemble de l'architecture et a construit une architecture événementielle.

La première chose nécessaire à ce stade est une file d'attente de messages, qui devrait être capable d'obtenir une variété d'événements et avoir des exigences élevées en matière de cohérence. En réponse à cette demande, Zhihu a développé un petit outil appelé Sink. Une fois le message reçu, il l'enregistre et le conserve localement, puis le distribue. Si cette machine raccroche, elle peut être entièrement restaurée au redémarrage pour garantir que les messages ne seront pas perdus. Ensuite, il place le message dans la file d'attente des tâches via le framework de développement Miller. Sink ressemble plus à un service d'abonnement aux messages en série, mais les tâches doivent être traitées en parallèle, donc Beanstalkd est pratique et gère l'intégralité du cycle des tâches. L'architecture est la suivante :

Modifications de la structure du site Web de Zhihu

Par exemple, si un utilisateur répond à une question maintenant, le système écrira d'abord la question dans MySQL, insèrera le message dans Sink, puis renverra la question à l'utilisateur. Sink envoie la tâche à Beanstalkd via Miller, et le travailleur peut trouver la tâche et la traiter par lui-même.

Lors de sa première mise en ligne, il y avait 10 messages par seconde, puis 70 tâches étaient générées. Il y a désormais 100 événements par seconde et 1 500 tâches générées, qui sont prises en charge par l'architecture actuelle basée sur les événements.

Optimisation du rendu des pages

Zhihu a enregistré des millions de PV chaque jour en 2013. Le rendu des pages nécessite en fait beaucoup de calculs. De plus, comme il nécessite l'obtention de données, il nécessite également beaucoup d'E/S. À cette époque, l'équipe de développement a composé la page et mis à niveau le mécanisme d'acquisition de données. Zhihu obtient les données de manière hiérarchique de haut en bas en fonction de la structure de l'ensemble de l'arborescence des composants de la page. Lorsque les données de la couche supérieure ont été obtenues, il n'est pas nécessaire de descendre jusqu'aux données de la couche inférieure. Il existe essentiellement plusieurs acquisitions de données pour plusieurs couches. .

En combinant cette idée, Zhihu a créé un cadre de développement de rendu de modèles - ZhihuNode.

Après une série d'améliorations, les performances de la page ont été grandement améliorées. La page de questions a été réduite de 500 ms à 150 ms et la page de flux a été réduite de 1 s à 600 ms.

Architecture orientée services (SOA)

À mesure que les fonctions de Zhihu deviennent de plus en plus complexes, l'ensemble du système devient de plus en plus grand. Comment Zhihu met-il en œuvre la servitisation ?

Tout d'abord, un framework RPC de base est nécessaire. Le framework RPC a également connu plusieurs versions d'évolution.

La première version était Wish, un modèle qui définissait strictement la sérialisation. La couche transport utilise STP, qui est un protocole de transport très simple écrit par moi-même et fonctionnant sur TCP. C'était plutôt bien au début car je n'écrivais qu'un ou deux services au début. Cependant, à mesure que le nombre de services augmente, certains problèmes commencent à surgir. Premièrement, ProtocolBuffer générera des codes de description, qui sont très longs et semblent laids lorsqu'ils sont placés dans l'ensemble de la bibliothèque. De plus, la définition stricte rend son utilisation peu pratique. A cette époque, un ingénieur a développé un nouveau framework RPC-Snow. Il utilise du JSON simple pour la sérialisation des données. Cependant, le problème avec une définition de données floue est que, par exemple, si un service doit être mis à niveau ou si la structure des données doit être réécrite, il est difficile de savoir quels services sont utilisés et de les avertir, et des erreurs se produisent souvent. Un troisième framework RPC a donc été publié. Les ingénieurs qui ont écrit le framework RPC espéraient combiner les caractéristiques des deux frameworks précédents, d'abord pour garder Snow simple, et ensuite pour exiger un protocole de sérialisation relativement strict. Cette version présente Apache Avro. Dans le même temps, un mécanisme spécial a été ajouté pour rendre la couche de transport et la couche de protocole de sérialisation enfichables. JSON ou Avro peuvent être utilisés, et la couche de transport peut utiliser le protocole STP ou binaire.

Ensuite, en mettant en place un enregistrement et une découverte de service, il vous suffit de définir le nom du service pour trouver sur quelle machine le service est installé. Dans le même temps, Zhihu dispose également des outils de réglage correspondants et a développé son propre système de traçage basé sur Zipkin.

Selon la relation d'appel, les services de Zhihu sont divisés en trois couches : la couche d'agrégation, la couche de contenu et la couche de base. Il peut être divisé en trois catégories selon les attributs : services de données, services logiques et services de canal. Les services de données consistent principalement à stocker des types de données spéciaux, tels que les services d'images. Les services logiques sont des opérations plus gourmandes en CPU et en calculs, telles que la définition et l'analyse des formats de réponse, etc. La particularité du service canal est qu'il n'y a pas de stockage, mais plutôt un transfert, comme le Sink.

Modifications de la structure du site Web de Zhihu

Il s'agit de l'architecture globale après l'introduction de la servitisation.

Modifications de la structure du site Web de Zhihu

Produits et services

Il y a environ quatre zones fonctionnelles sur la page d'accueil de Zhihu. Sur le côté gauche, il y a « Dernières nouvelles », qui représentent environ 70 % de la page d'accueil. Elle affiche principalement les dernières questions et réponses des personnes suivies par l'utilisateur. Dans cette section, en plus de consulter les dernières questions et réponses, les utilisateurs peuvent également

Vous pouvez participer aux problèmes qui vous intéressent via des fonctions telles que « Paramètres », « Suivre les problèmes », « Ajouter des commentaires », « Partager », « Merci » et « Favoris ». Par exemple, en utilisant la fonction « Paramètres », les utilisateurs peuvent choisir de bloquer des sujets. Sous le problème qui préoccupe l'utilisateur que vous suivez, vous pouvez également attirer l'attention sur le problème, ajouter des commentaires, etc.

Dans la section supérieure droite de la page d'accueil, vous trouverez des informations relatives à la gestion du comportement des utilisateurs sur Zhihu.com. Il y a « Mes brouillons », « Mes collections », « Toutes les questions », « Questions que je suis » et « Questions qui m'ont été invitées ». Au milieu du côté droit se trouve la fonction d'invitation hors réseau - "Inviter des amis à rejoindre Zhihu". Dans cette section, les utilisateurs peuvent inviter leurs amis à rejoindre la communauté Zhihu par e-mail et Sina Weibo. Dans la partie centrale et inférieure du côté droit se trouvent des sujets qui préoccupent ou intéressent les utilisateurs ou des sections qui sont recommandées aux utilisateurs. En termes de sujets et de recommandations d'utilisateurs, les opérateurs de Zhihu peuvent, d'une part, résumer les informations sur des sujets auxquels les utilisateurs prêtent attention, et d'autre part, obtenir des recommandations et des résumés assez précis grâce à l'enregistrement et aux statistiques des données pertinentes sur le comportement des utilisateurs sur le réseau Zhihu. Dans le même temps, il convient particulièrement de mentionner que dans la section « Topic Square » en bas à droite, Zhihu.com présente toutes les balises de classification de sujets, offrant aux utilisateurs un bon moyen d'obtenir des informations en plus de la recherche et de la navigation.

La page du sujet Zhihu peut être divisée en deux sections, comme le montre la figure 2, l'une est « Mises à jour du sujet » et l'autre est « Sujets fréquemment visités ». Sur la gauche se trouvent les informations « mises à jour du sujet », qui occupent environ 70 % de la page. Dans cette section, les utilisateurs peuvent cliquer pour afficher les questions (présentées par ordre chronologique) sous les sujets qui les préoccupent, et ils peuvent également « corriger » et « ne plus suivre » les sujets qui les préoccupent.

Dans le coin inférieur droit se trouve la section « Sujets fréquemment visités ». Dans cette page, les utilisateurs peuvent connaître les informations spécifiques au sujet qui les préoccupe, telles que les sous-thèmes, le nombre d'abonnés et la dynamique.

La page de notification Zhihu peut être divisée en quatre présentations, comme le montre la figure 3. "Toutes les notifications" sur la gauche contiennent des informations sur les questions auxquelles les utilisateurs prêtent attention et les réponses des autres utilisateurs (présentées par ordre chronologique). Sur le côté droit, le résumé des données sur le comportement des utilisateurs, « inviter des amis à rejoindre Zhihu », les sections de sujets et de recommandations de sujets, etc. sont les mêmes que l'introduction de la page d'accueil, je n'entrerai donc pas dans les détails ici.

La page d'accueil personnelle de Zhihu est grossièrement divisée en cinq sections : « Informations personnelles », « Réponses personnelles », « Page d'accueil personnelle », « Rechercher des questions et réponses des utilisateurs », « Abonnés et informations suivies » et « Sujets suivants ». Les détails sont présentés dans la figure 4.

Dans la section "Profil", les utilisateurs peuvent cliquer sur "Afficher les détails" pour afficher les "Réalisations personnelles" de l'utilisateur (y compris le nombre de "J'aime", "Merci", "Collections" et "Partages"), "Expérience professionnelle", " informations résidentielles", "expérience éducative" et "compétences". Si vous êtes un utilisateur de Zhihu, vous pouvez compléter les cinq aspects d'informations ci-dessus en cliquant sur « Modifier mon profil ».

En bas à gauche se trouve la section « Réponses personnelles », qui contient des informations sur les réponses des utilisateurs aux questions pertinentes (classées par ordre décroissant selon le nombre d'approbations ou du récent au lointain par ordre de temps de réponse). Les deux sections ci-dessus « Informations personnelles » et « Réponses personnelles » peuvent représenter 70 % de l'ensemble du poste.

En haut à droite se trouve la page « Page d'accueil personnelle », qui est un résumé des derniers développements de Zhihu, des questions, des réponses, des collections et des informations de journal soulevées par les utilisateurs.

Au milieu à droite se trouve un champ de recherche. Les utilisateurs peuvent interroger des questions et des réponses spécifiques via ce champ de recherche.

Dans la partie centrale et inférieure du côté droit, se trouvent les abonnés personnels ou les informations suivies et le sujet de l'utilisateur. Les utilisateurs peuvent cliquer sur les icônes pertinentes pour se connecter à des sections spécifiques en un seul clic.

Page de questions Zhihu - est la page la plus importante de Zhihu. Ici, les utilisateurs peuvent comprendre, modifier et répondre à des questions et informations spécifiques,

Cette page Zhihu peut être grossièrement divisée en six parties selon ses fonctions, à savoir « réponses aux questions », « fonction suivante », « fonction d'invitation », « liens de questions connexes », « fonction de partage » et « statut des questions ».

Sur le côté gauche se trouve la section « Questions et réponses », qui représente environ 70 % de cette section. Dans cette section, les utilisateurs peuvent modifier, commenter, signaler et gérer les votes sur des questions connexes. Les utilisateurs peuvent modifier les questions, les étiquettes de questions et les suppléments de questions qu'ils jugent inappropriés. Dans le même temps, les utilisateurs peuvent également commenter ou signaler s’ils trouvent quelque chose d’inapproprié ou qui les intéresse. En termes de réponse aux questions, les utilisateurs peuvent répondre aux questions de la manière qui leur convient

Opération de tri des lignes (Zhihu propose trois méthodes de présentation du contenu : tri par vote, tri par heure et affichage par utilisateurs abonnés).

De plus, il convient de mentionner qu’il y a deux triangles sur le côté gauche de chaque réponse, représentant l’approbation et la désapprobation, un au-dessus et un en dessous, comme le montre la figure 6. Les utilisateurs peuvent personnaliser leurs réponses aux questions en fonction de leurs propres connaissances, compréhension ou intérêts.

Sur le côté droit de cette section, de haut en bas se trouve la fonction « Suivre ». Dans cette section fonctionnelle, les utilisateurs peuvent prêter attention aux problèmes, ce qui ressemble un peu à la fonction de suivi de Sina Weibo. La différence est que le suivi de Zhihu se concentre principalement sur des problèmes spécifiques, tandis que Sina Weibo se concentre principalement sur des utilisateurs spécifiques.

Plus bas sur le côté droit se trouve la section « Inviter d'autres personnes à répondre à des questions ». C'est la même chose que les fonctions introduites précédemment dans les sections « Page d'accueil de Zhihu » et « Notification de Zhihu », je n'entrerai donc pas dans les détails ici.

Plus bas, diverses questions sont liées au problème. C'est également une méthode recommandée par la plupart des systèmes de sites Web. Bien que cette méthode de recommandation soit relativement mature en termes de technologie et d’expérience, son effet n’est pas sans critique. En termes de liens de questions liés aux questions, Zhihu cible principalement les caractéristiques de questions spécifiques et fait des recommandations automatiques via des algorithmes correspondants. Il n'obtient pas d'effets de recommandation personnalisés pour les passe-temps des différents utilisateurs (c'est aussi la tendance de développement future d'Internet, et). les plateformes de commerce électronique accordent davantage d’attention à cette technologie).

Plus bas, on trouve la fonction de partage de questions. Les utilisateurs peuvent partager des questions sur Zhihu en dehors du site via « Weibo » et « e-mail » et au sein du site via des « messages privés sur le site ».

En bas à droite se trouve l'état du problème. Sur cette page, les utilisateurs peuvent connaître l'heure à laquelle l'activité récente de la question s'est produite, le nombre de fois où elle a été consultée, le nombre de followers sur des sujets connexes et le nombre de personnes qui suivent la question.

Expérience utilisateur

1. Pour être précis, Zhihu ressemble plus à un forum : les utilisateurs mènent des discussions pertinentes autour d'un sujet d'intérêt et vous pouvez suivre des personnes qui ont les mêmes intérêts que vous. Pour les explications conceptuelles, l'encyclopédie en ligne couvre presque toutes vos questions ; mais l'intégration de pensées divergentes est une caractéristique majeure de Zhihu. Zhihu encourage la discussion pendant le processus de questions-réponses afin d'élargir la divergence des questions. Encouragez les réponses non spécifiques et encouragez la référencement wiki des réponses.

2. C'est plus exclusif que le forum. Chaque utilisateur enregistré sur Zhihu a un PR (Person Rank). Chaque opération que vous effectuez affectera directement votre valeur personnelle de PR. Lors de la réponse, les réponses sont triées par nombre de votes d'approbation. Si le nombre de votes d'approbation est le même, elles sont triées par valeur PR personnelle et les réponses considérées comme invalides sont masquées. Cela filtre dans une certaine mesure une bonne partie du spam.

3. Zhihu a un jour insisté sur un système d'invitation strict, d'une part pour garantir l'authenticité des identités quasi réelles des utilisateurs, et d'autre part pour éviter de générer trop d'informations de spam. Les noms quasi réels peuvent permettre aux utilisateurs de poser plus facilement des questions ciblées aux personnes qui vous intéressent. Il s'agit d'une chronique très intéressante dans le "Solo Group" avorté de Han Han, "Everyone Asks Everyone", en d'autres termes, c'est le vrai -version vie Zhihu. Dans le même temps, le système d'invitation strict de Zhihu a également donné à Zhihu une forte atmosphère de rigueur, représentée par Keso, qui peut convaincre les gens sans rien dire.

Depuis mars 2013, Zhihu a ouvert les inscriptions au public.

4. Relation SNS basée sur le crédit. Peut-être simplement grâce à une intégration de SNS et de questions-réponses, Renren domestique devrait pouvoir se développer plus rapidement, mais comme mentionné ci-dessus, le système d'invitation strict exclut une quantité considérable d'informations invalides si Renren lance également des questions-réponses sociales, il intégrera inévitablement votre original ; des amis, et ces amis ne peuvent évidemment pas être uniquement des personnes intéressées par vos préoccupations. Cela annule également presque la possibilité pour toute grande société Internet de participer à des questions et réponses de type Quora.

Étant donné que les grandes sociétés Internet ont généralement un large public, les questions et réponses de type Quora ne sont pas simplement basées sur la popularité, mais sur le rapport valeur/information (informations sur la valeur/quantité totale d'informations), qui correspond à la quantité d'informations d'élite générées. .

Cependant, Thousand Oaks a lancé Jingwei.com de manière discrète. En tant que SNS vertical, il a rassemblé un nombre considérable de professionnels. Si Thousand Oaks l'utilise comme point de rencontre pour intégrer des questions et réponses de type Quora, il en a encore un nombre considérable. potentiel.

5. Par rapport à Quora, Zhihu utilise le bleu comme ton. Par rapport à Quora, les fonctions de Zhihu doivent encore être améliorées, comme le meilleur sujet sous un certain sujet.


Déclaration:
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