Maison > Questions et réponses > le corps du texte
PHP中文网2017-04-18 09:41:50
Tout d'abord, vous devez comprendre pourquoi le système utilise la distribution.
Avec le développement d'Internet, de nombreux goulots d'étranglement en matière de performances des projets traditionnels à projet unique sont devenus de plus en plus importants. Les goulots d'étranglement en matière de performances peuvent avoir plusieurs aspects.
1. Couche de service d'application : à mesure que le nombre d'utilisateurs augmente, le degré de concurrence augmente et un seul projet ne peut pas résister au goulot d'étranglement des performances causé par des requêtes simultanées aussi importantes.
2. La couche de base de données sous-jacente : Avec le développement des affaires, la pression sur la base de données augmente, entraînant des goulots d'étranglement en termes de performances.
Concernant les deux points ci-dessus, je pense qu'ils peuvent être résolus sous deux aspects.
Couche de service d'application :
Il existe plusieurs solutions pour la couche de service d'application :
Cluster de système d'application :
Le cluster de système d'application le plus simple est un cluster de serveurs, tel qu'un cluster Tomcat. Lors de l'application de clusters système, le problème le plus important est le partage de session. Le partage de session peut être résolu via des plug-ins de serveur. L'autre peut également être implémenté via un middleware tel que Redis.
Partage basé sur les services :
Le fractionnement basé sur les services est une méthode très populaire à l'heure actuelle. Désormais, tout le monde parle de microservices. En divisant les projets traditionnels en services, les services peuvent être découplés indépendamment et les services individuels peuvent être étendus horizontalement. Le problème classique rencontré dans le fractionnement des services est le problème des transactions distribuées. Actuellement, il existe plusieurs solutions de transactions distribuées couramment utilisées : cohérence éventuelle des messages, transaction de compensation TCC et notification au mieux. Pour plus de détails, vous pouvez vous référer à ce blog solution de transactions distribuées
La couche de base de données sous-jacente :
Si la pression sur les performances du système apparaît dans la base de données, nous pouvons la résoudre avec des solutions telles que la séparation en lecture-écriture, la base de données et le partitionnement des tables, etc. Comme je n'ai pas suffisamment d'expérience dans ce domaine, vous pouvez vous référer à d'autres documents.
Middleware de partitionnement de base de données Mycat et de partitionnement de table
Cluster de séparation lecture-écriture MySQL haute disponibilité
PHP中文网2017-04-18 09:41:50
Merci pour l'invitation. Je ne suis pas un maître et j'estime que la question posée par l'interrogateur est trop grande et difficile à répondre.
Cependant, à ma connaissance, les entretiens techniques sont généralement progressifs, et l'intervieweur teste la profondeur du dispositif technique du candidat, donc en théorie, plus on parle d'un sujet, plus il est représentatif vous êtes du candidat. Plus la capacité est grande. De nombreux problèmes de traitement à haute concurrence et distribués sont en fait des problèmes empiriques, car les situations de traitement à haute concurrence de différents scénarios commerciaux et de différentes quantités de données sont complètement différentes, et il n'existe pas de solution complètement universelle. .
Ainsi, lors de l'entretien, il est très important de comprendre le scénario commercial décrit par l'intervieweur. C'est également une information clé pour analyser les goulots d'étranglement des performances. Selon le principe du baril, il doit y avoir un goulot d'étranglement à un certain point clé.
Pour donner un exemple simple, À mesure que l'entreprise se développe, un cluster de serveurs directement connecté à la base de données rencontre un goulot d'étranglement en termes de performances. Comment le résoudre ?
À ce stade, vous devez d'abord analyser où se situe le goulot d'étranglement des performances. Tout d'abord, déterminer si la conception de la base de données elle-même est raisonnable, si l'index joue un rôle, analyser le plan d'exécution SQL et si la base de données peut l'être. divisez horizontalement ou verticalement.
Il est également nécessaire d'analyser si une base de données distribuée de séparation lecture-écriture peut être utilisée, ce qui entraînera des problèmes tels que la manière d'effectuer la synchronisation des données, la distribution des données, etc.
Une fois la couche de base de données analysée, elle peut également être analysée au niveau de la couche d'application. Généralement, la mise en cache est utilisée pour améliorer les performances des requêtes, ce qui implique des problèmes de taux de réussite du cache, des problèmes de mise à jour du cache, des problèmes de hachage multi-nœuds mis en cache, etc.
En général, vous devez comprendre le scénario commercial, puis essayer de trouver une solution à un problème spécifique. Par exemple, Sina Weibo utilise-t-il le mode push ou le mode pull ? S'il s'agit d'un mode push, un grand V avec des dizaines de millions de fans publie-t-il une publication Weibo à des dizaines de millions de personnes ? S'il s'agit du mode pull, y aura-t-il des problèmes de performances à chaque fois qu'une personne suit trop d'utilisateurs ?
伊谢尔伦2017-04-18 09:41:50
Il existe de nombreux types de distribution. Par exemple, si vous divisez votre projet en plusieurs modules, chaque module dispose d'un jvm pour effectuer le travail global via des appels rpc. Par exemple, un seul serveur Redis ne peut pas le supporter. de nombreuses simultanéités. Ou si vous n'avez pas autant de mémoire pour la mise en cache, vous pouvez créer un cluster Redis, qui est également distribué. Pour un autre exemple, si votre base de données à elle seule ne peut pas répondre à votre volume de données ou à votre simultanéité actuelle, vous pouvez alors diviser la concurrence. base de données dans des tables et implémenter des transactions via JTA Distribution, ainsi que la synchronisation des journaux, l'équilibrage de charge, l'ajout de HDFS pour stocker la sauvegarde des données, le stockage des journaux et l'ajout d'eslaticsearch pour analyser et rechercher les journaux peuvent tous être discutés.
PHP中文网2017-04-18 09:41:50
Quand quelqu'un pose une question générale, si celui qui répond suit la question générale, il échouera... Il est recommandé d'être logique en répondant.
Si c'était moi, je ferais deux choses :
1. Trouver un projet que j'ai déjà réalisé, discuter des goulots d'étranglement avec lui, puis introduire des connaissances théoriques, et enfin donner une solution. Cette approche vous permet de parler facilement de vous-même et il est préférable d'avoir une certaine interaction avec l'intervieweur. Faites attention aux questions de l'intervieweur pendant la conversation et vérifiez clairement ce que l'intervieweur demande
2. La deuxième approche consiste à montrer les cartes en premier et à faire ressortir les problèmes distribués les plus classiques, comme la charge de trafic. Garanties commerciales. . . . Donnez ensuite un scénario commercial pour le problème.