Comment résoudre le problème de la concurrence élevée et du trafic important ? L'article suivant partagera avec vous les idées et les solutions pour une concurrence élevée et un trafic Web important. J'espère qu'il vous sera utile !
Cours vidéo recommandés : " Solution de concurrence de données de niveau dix millions (théorie + pratique) "
Partagez quelques questions d'entretien à haute concurrence : 15 questions d'entretien PHP sur la haute concurrence (résumé)
QPS : Le nombre de requêtes ou de requêtes par seconde Dans le domaine Internet, il fait référence au nombre de requêtes correspondantes par seconde (requêtes http).
Pic QPS par seconde : (80% du total des PV)/(20% des secondes en 6 heures), 80% des visites sont concentrées dans 20% du temps
Nombre de connexions simultanées : traitées par le système simultanément Nombre de requêtes
Débit : Le nombre de requêtes traitées par unité de temps (généralement déterminé par le QPS et la concurrence).
Temps de réponse : Le temps qu'il faut entre la demande et la réponse. Par exemple, il faut 100 ms au système pour traiter une requête HTTP. Ces 100 ms correspondent au temps de réponse du système.
PV : Les pages vues sont les pages vues et les clics, le nombre de pages visitées par un visiteur dans les 24 heures.
UV : Visiteur unique (UniQue Visitor), c'est-à-dire que le même visiteur visite le site Web plusieurs fois au cours d'une certaine période de temps et n'est compté que comme 1 seul visiteur unique.
Bande passante : le calcul de la taille de la bande passante se concentre sur deux indicateurs : le trafic de pointe et la taille moyenne des pages.
Bande passante quotidienne du site Web = PV/temps statistique (converti en secondes par jour) * taille moyenne de la page (unité Ko) * 8.
Stress test : la concurrence maximale que le test peut supporter, le QPS maximum que le test peut supporter. Il convient de noter que la machine de test simultanée doit être séparée de la machine testée. N'effectuez pas de tests simultanés en ligne. serveur. Observez la machine sur laquelle se trouve le test ab, et le processeur, la mémoire, le réseau, etc. de la machine frontale de la machine testée n'ont pas dépassé 75 % de la limite maximale.
Concurrence
Vitesse de réponse
Tolérance aux pannes
Outils de test de performances couramment utilisés : ab, wrk, http_load, Web Bench, Siege, Apache JMeter.
Optimisation du trafic
Anti-leching des ressources Web pour empêcher les systèmes tiers de voler des images, des CSS, des js, etc. occupant le trafic du serveur et la bande passante du serveur
Optimisation du front-end
Réduisez les requêtes http : fusion d'images, fusion de js, fusion de css et compression Bien que le fichier puisse être plus volumineux, les requêtes seront réduites
Ajouter. requêtes asynchrones : obtenez des données via l'interface d'appel ajax réelle
Démarrez la navigation sur la mise en cache du serveur et la compression de fichiers (le module de compression nginx peut également être activé)
Accélération cdn : résolvez le problème de bande passante insuffisante, mettez les données en cache sur cdn nœuds, sélectionnez le nœud le plus proche lors de l'accès, réduisez la bande passante et accélérez l'accès
Établissez un serveur d'images indépendant : les images sont très conviviales. Vous pouvez séparer complètement le serveur d'images du serveur Web. construire un serveur d'images séparé. La configuration qui n'appartient pas au type informatique peut être ajustée de manière appropriée. Le serveur d'images peut également Cluster
Optimisation du côté serveur
Statisation de la page : page dynamique html statique, réduisant la pression de charge du serveur, pénétration de la staticisation des pages, la staticisation a un temps efficace
Traitement simultané du langage dynamique : traitement asynchrone, multi-thread, traitement asynchrone des files d'attente
Optimisation de la base de données :
Cache de base de données : memcache, cache redis
optimisation de l'index mysql, sous-base de données et table mysql, opération de partition mysql, séparation lecture-écriture de réplication maître-esclave mysql, équilibrage de charge mysql, veille chaude maître-esclave mysql
optimisation du serveur Web :
équilibrage de charge : vous pouvez utiliser le proxy inverse de Ningx pour utiliser l'équilibrage de charge, vous pouvez utiliser la distribution réseau. La quatrième couche de LV dans la couche implémente l'équilibrage de charge
équilibrage de responsabilité
Équilibrage de charge de quatrième couche : l'équilibrage de charge dit à quatre couches est basé sur l'équilibrage de charge IP + port
Équilibrage de charge à sept couches : l'équilibrage de charge dit à sept couches L'équilibrage de charge des couches est un équilibrage de charge basé sur les informations (URL)
Mise en œuvre de l'équilibrage de charge à sept couches :
L'équilibrage de la dette basé sur les informations de la couche d'application telles que les URL Le proxy de Ningx est une fonction très puissante. -Équilibrage de charge en couches. Il possède des fonctions puissantes, d'excellentes performances, un fonctionnement stable, une configuration simple et flexible et peut éliminer automatiquement les serveurs principaux qui ne fonctionnent pas correctement. Les fichiers de téléchargement peuvent être téléchargés en mode asynchrone. attribuer des pondérations et la méthode d'attribution est flexible.
Stratégie d'équilibrage de charge nginx
IP Hash (intégré)
Interrogation pondérée (intégrée)
Stratégie équitable (extension)
Hash universel (extension)
Hash cohérent (extension)
1. Stratégie de hachage IP
Une autre stratégie d'équilibrage de charge intégrée à nginx, le processus est. très similaire au sondage, sauf que l'algorithme et les stratégies spécifiques ont quelques changements. L'algorithme de hachage IP est un algorithme de sondage déguisé
2 Stratégie de sondage pondéré
Allouez d'abord les requêtes aux machines de poids élevé, jusqu'au poids du. La machine tombe à une valeur inférieure à celle des autres machines, la demande sera distribuée à la prochaine machine de poids élevé. Lorsque toutes les machines back-end seront en panne, nginx effacera immédiatement les indicateurs de toutes les machines à l'état initial pour éviter de tout provoquer. les machines doivent être dans un état d'attente
3. Stratégie équitable
Jugez la situation de charge en fonction du temps de réponse du serveur back-end et sélectionnez la machine avec la charge la plus légère pour le déchargement
Hash universel, cohérent Cohérent stratégie de hachage, le hachage général est relativement simple, vous pouvez utiliser les variables intégrées de nginx comme clés pour le hachage, le hachage cohérent utilise un anneau de hachage cohérent intégré, prend en charge memcache
implémentation de l'équilibrage de charge à quatre couches
à travers messages L'adresse cible et le port dans , associés à la méthode de sélection du serveur définie par le périphérique d'équilibrage de charge, déterminent le serveur interne final sélectionné
termes associés à lvs :
DS : serveur directeur du serveur cible, c'est-à-dire équilibreur de charge
RS : serveur réel Real Server, c'est-à-dire serveur back-end
VIP : adresse IP directement face aux utilisateurs, généralement une adresse IP publique
DIP : adresse IP du serveur Director principalement utilisée pour l'hôte interne communication
RIP : IP du serveur réel Adresse IP du serveur réel backend
CIP : IP du client
lvs trois méthodes d'équilibrage de charge :
NAT : Modifiez l'adresse IP cible en adresse IP de le backend RealServer
DR : modifiez l'adresse MAC cible en l'adresse mac du back-end RealServer
TUNNEL : rarement utilisé, souvent utilisé pour la reprise après sinistre hors site
Avantages et inconvénients des quatre et sept- équilibrage de charge des couches
La quatrième couche peut supporter plus de poids que sept couches La quantité de concurrence, en utilisant de petits
Sept couches de grands sites peuvent obtenir un contrôle d'équilibrage de charge plus complexe, tel que l'URL, la séparation basée sur la session, dynamique et statique , etc.
La septième couche peut prendre beaucoup de temps CPU et la quantité de concurrence transportée
Qu'est-ce que CDN ?
Node : Il peut être compris comme un miroir du vrai serveur.
Le nom complet est Content Delivery Network, qui est un réseau de distribution de contenu qui tente d'éviter les goulots d'étranglement et les liens sur Internet susceptibles d'affecter la vitesse et la stabilité de la transmission des données, rendant la transmission du contenu plus rapide et plus stable.
Une couche de réseau virtuel intelligent basée sur l'Internet existant formée en plaçant des serveurs de nœuds sur tout le réseau.
Le système cdn peut rediriger la demande de l'utilisateur vers le nœud de service le plus proche de l'utilisateur en temps réel sur la base d'informations complètes telles que le trafic réseau, les connexions à chaque nœud, les conditions de charge, la distance par rapport à l'utilisateur et le temps de réponse.
Quels sont les avantages du cdn ?
1. L'accélération du cache local améliore la vitesse d'accès aux sites d'entreprise (en particulier les sites avec un grand nombre d'images et de pages statiques)
2. Service Qualité d'accès
3. Les utilisateurs d'accès à distance sélectionnent intelligemment et automatiquement les serveurs de cache en fonction de la technologie d'équilibrage de charge DNS
4. Générez automatiquement un serveur de cache miroir (miroir) distant pour le serveur et lisez les données du cache. serveur lorsque les utilisateurs distants accèdent, réduisez la bande passante de l'accès à distance, partagez le trafic réseau, réduisez la charge du serveur Web du site Web et d'autres fonctions.
5. Des nœuds CDN largement distribués et des mécanismes de redondance intelligents entre les nœuds peuvent empêcher efficacement les intrusions de pirates informatiques
Quel est le principe de fonctionnement du CDN ?
Accès traditionnel : l'utilisateur saisit un nom de domaine dans le navigateur pour lancer une demande, résout le nom de domaine pour obtenir l'adresse IP du serveur, trouve le serveur correspondant en fonction de l'adresse IP, et le serveur répond et renvoie des données.
Utilisez cdn pour accéder : l'utilisateur lance une requête, une analyse DNS intelligente (détermine la situation géographique et le type de réseau d'accès en fonction de l'adresse IP, sélectionne le serveur avec le chemin le plus court et la charge la plus légère), obtient l'adresse IP du serveur de cache et renvoie le contenu à l'utilisateur (s'il est mis en cache), lance une requête vers le site d'origine, accède aux résultats à l'utilisateur et stocke les résultats dans le serveur de cache.
Quels sont les scénarios applicables pour le cdn ?
Distribution accélérée d'un grand nombre de ressources statiques dans un site ou une application, comme les css, js, images et html
Comment implémenter le cdn ?
BAT et autres services CDN
Utilisez l'équilibrage de charge à 4 couches de LVS
Vous pouvez utiliser nginx, vernis, squid, apache trafficServer pour l'équilibrage de charge et le cache à sept couches. Utilisez squid comme serveur. proxy inverse ou nginx comme proxy inverse
L'indépendance est-elle nécessaire ?
1. Partagez la charge d'E/S du serveur Web, séparez le service d'image consommateur de ressources et améliorez les performances et la stabilité du serveur
2. mettre en place des services d'imagerie Solution de mise en cache ciblée, réduisant les coûts de bande passante et améliorant la vitesse d'accès
Pourquoi utiliser un nom de domaine indépendant ?
Raison : Le nombre de connexions simultanées du navigateur sous le même nom de domaine est limité. Dépasser la limite de connexion du navigateur n'est pas bon pour la mise en cache en raison des cookies. La plupart des caches Web mettent uniquement en cache les requêtes sans cookies, ce qui entraîne toutes les requêtes d'image. n'a pas réussi à accéder au cache
Quel est le problème après l'indépendance ? Comment télécharger et synchroniser des images pourquoi être statique , implémentation statique.
Dans un système multiprogrammation , les processus s'exécutent en alternance sur le processeur et les états continuent de changer.
Prêt : Lorsqu'un processus a obtenu toutes les ressources sauf le processeur et peut s'exécuter une fois qu'il a obtenu le processeur, on dit qu'il est dans un état prêt. L'état prêt peut être mis en file d'attente selon plusieurs priorités. Par exemple, lorsqu'un processus entre dans l'état prêt en raison de l'expiration de la tranche de temps, il est placé dans une file d'attente de faible priorité ; lorsqu'un processus entre dans l'état prêt en raison de l'achèvement d'une opération d'E/S, il est placé dans une file d'attente de faible priorité ; file d'attente hautement prioritaire.
Blocage : également appelé état d'attente ou de veille, un processus attend qu'un certain événement se produise (comme demander des E/S et attendre que les E/S soient terminées, etc.) et s'arrête temporairement à ce moment-là. temps, même si le processeur est affecté au processus. Il ne peut pas non plus s'exécuter, on dit donc que le processus est bloqué.
Qu'est-ce qu'un fil de discussion
En raison des demandes simultanées des utilisateurs, il n'est évidemment pas possible de créer un processus pour chaque demande, en termes de surcharge des ressources système ou d'efficacité dans la réponse aux demandes des utilisateurs. Par conséquent, le concept de threads dans le système d’exploitation a été introduit.
Un thread est une entité dans le processus et constitue l'unité de base qui est planifiée et allouée indépendamment par le système. Le thread lui-même ne possède pas de ressources système et ne possède que certaines ressources essentielles au fonctionnement, mais il peut être partagé avec. autres threads appartenant au même processus. Toutes les ressources appartenant au processus.
Un thread est un flux de contrôle séquentiel unique dans un programme. Unité d'exécution relativement indépendante et planifiable au sein d'un processus. Il s'agit de l'unité de base permettant au système de planifier et d'attribuer indépendamment les processeurs. Elle fait référence à l'unité de planification d'un programme en cours d'exécution.
État prêt : le thread a toutes les conditions pour s'exécuter, peut logiquement s'exécuter et attend le processeur. Statut d'exécution : Le thread occupant le processeur est en cours d'exécution.
État bloquant : le thread attend un événement (comme un sémaphore) et est logiquement inexécutable.
Qu'est-ce qu'une coroutine ? Une coroutine est un thread léger en mode utilisateur, et la planification de la coroutine est entièrement contrôlée par l'utilisateur. Les coroutines ont leur propre contexte de registre et leur propre pile. Lorsque le calendrier de coordination change, le contexte de registre et la pile sont enregistrés à d'autres endroits. Lors du retour en arrière, le contexte de registre et la pile précédemment enregistrés sont restaurés. L'exploitation directe de la pile n'a fondamentalement aucune surcharge de commutation de noyau et les variables globales sont accessibles sans. verrouillage , donc le changement de contexte est très rapide.
Quelle est la différence entre un thread et un processus ?
3. Le thread est l'unité de base de la planification du processeur, mais le processus ne l'est pas
4. Les deux peuvent être exécutés simultanément
5. La sortie de la séquence et du programme, mais le thread ne peut pas être exécuté indépendamment et doit dépendre de l'application, et l'application fournit un contrôle d'exécution de plusieurs threads.
Quelle est la différence entre les threads et les coroutines ?
1. Un thread peut avoir plusieurs coroutines, et un processus peut également avoir plusieurs coroutines seul
2 Les threads et les processus sont tous des mécanismes synchrones, tandis que les coroutines sont asynchrones
3 , L'association. peut conserver l'état du dernier appel. Chaque fois que le processus rentre, cela équivaut à entrer dans l'état du dernier appel. Qu'est-ce que le multi-processus ?
Si deux processus ou plus peuvent s'exécuter simultanément dans le même système informatique, cela signifie qu'un processus supplémentaire sera ouvert et une ressource supplémentaire sera allouée, et la communication inter-processus sera gênante Qu'est-ce que le multi-threading ?
Les threads divisent un processus en plusieurs tranches, chaque tranche peut être un processus indépendant. La différence avec le multi-processus est que seules les ressources d'un processus sont utilisées et les threads peuvent communiquer Parmi plusieurs concepts, la différence. entre?
Processus unique, thread unique : une personne mangeant à une table
Modèle de blocage synchrone
Processus multiples : les premiers programmes côté serveur ont résolu le problème des E/S simultanées via plusieurs processus et plusieurs threads. Une requête crée un processus, puis l'enfant. le processus entre La boucle interagit avec la connexion client de manière synchrone, en envoyant et en recevant des données de traitement. Étapes
Créez un socket
Une fois le sous-thread/thread créé avec succès, il entre dans la boucle while, bloquant l'appel recv, attendant que le client envoie des données au serveur
Lorsque la connexion client est fermée, le processus/thread enfant se termine et détruit toutes les ressources. Le processus/thread principal recyclera ce processus/thread enfant.
Ce modèle s'appuie fortement sur le nombre de processus pour résoudre les problèmes de concurrence.
Le démarrage d'un grand nombre de processus entraînera une consommation supplémentaire de planification de processus
Modèle asynchrone non bloquant
De nos jours, divers programmes de serveur IO asynchrone à haute concurrence sont implémentés sur la base d'epollLe multiplexage IO asynchrone non bloquant Le programme utilise le modèle classique de Reactor, comme son nom l'indique, signifie réacteur. Il ne gère pas lui-même l'envoi et la réception de données. Vous pouvez uniquement surveiller les modifications d’événements d’un handle de socket.
Reacteur Modèle:- add:添加一个socket到reactor - set:修改socket对应的事件,如可读可写 - del:从reactor中移除 - callback:事件发生后回掉指定的函数
nginx: réacteur multithread
swoole: réacteur multithread + travailleur multi-processus
php pratique de programmation concurrente7.日志处理 应用场景:解决大量日志的传输 日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志。
8.消息通讯 聊天室
9.常见消息队列产品 kafka,ActiveMQ,ZeroMQ,RabbitMQ,Redis等 php的异步 消息队列
10.接口的并发请求 curl_multi_init
1.什么是数据库缓存
mysql等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对mysql产生的增删,改,查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生。
极大的解决数据库服务器的压力
提高应用数据的响应速度
常见的缓存形式:内存缓存和文件缓存
2.为什么要使用数据库缓存
缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程序地降低对数据库服务器的访问压力。
用户请求-》数据查询-》连接数据库服务器并查询数据-》将数据缓存起来(html,内存,json,序列化数据)-》显示给客户端
缓存方式的选择
缓存场景的选择
缓存数据的实时性
缓存数据的稳定性
3.使用mysql查询缓存
启用mysql查询缓存
极大的降低cpu使用率
query_cache_type查询缓存类型,有0,1,2三个取值。0则不适用查询缓存。1表示始终使用查询缓存,2表示按需使用查询缓存。
query_cahce_type=1 select SQL_NO_CACHE * from my_table where condition; query_cache_type=2 select SQL_CACHE * from my_table where condition; query_cache_size
默认情况下query_cache_size为0,表示为查询缓存预留的内存为0,则无法使用查询缓存 SET GLOBAL query_cache_size = 134217728; 查询缓存可以看作是SQL文本和查询结果的映射 第二次查询的SQL和第一次查询的SQL完全相同,则会使用缓 SHOW STATUS LIKE ‘Qcache_hits’查看命中次数 表的结构和数据发生改变时,查询缓存中的数据不再有效
情理缓存:
FLUSH QUERY CACHE;//清理查询缓存内存碎片
RESET QUERY CACHE;//从查询缓存中移出所有查询
FLUSH TABLES;//关闭所有打开的表,同时该操作将会清空查询缓存中的内容
4.使用Memcache缓存
对于大型站点,如果没有中间缓存层,当流量打入数据库层时,即便有之前的几层为我们挡住一部分流量,但是在大并发的情况下,还是会有大量请求涌入数据库层,这样对于数据库服务器的压力冲击很大,响应速度也会下降,因此添加中间缓存层很有必要。
memcache是一套分布式的高速缓存系统,由liveJournal的BrandFitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。 memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像,视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存,然后从内存中读取,从而大大提高读取速度。
工作流程:先检查客户端的请求数据是否在memcache中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcache中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中。
通用缓存机制:用查询的方法名+参数作为查询时的key,value对中的key值
5.使用Redis缓存
与memcache的区别:
性能相差不大
redis在2.0版本后增加了自己的VM特性,突破物理内存的限制,memcache可以修改最大可用内存,采用LRU算法
redis依赖客户端来实现分布式读写
memcache本身没有数据冗余机制
redis支持(快照,aof)依赖快照进行持久化aof增强了可靠性的同时,对性能有所影响
redis用户数据量较小的高性能操作和运算上
memcache用于在动态系统中减少数据库负载,提升性能;适合做缓存提高性能。
可用于存储其他数据:session,session_set_save_handler
Optimisation du type de données de la table de données : int, smallint., bigint, enum, ip storage utilise la conversion et le stockage de type int ip2long
Plus il y a d'index, mieux c'est , créez l'index approprié sur le champ approprié
Conformez-vous au principe de préfixe de l'index
comme le problème de% de requête
optimisation de l'analyse de table complète
ou utilisation de l'index conditionnel
caractère Le problème de l'échec de l'index de type chaîne
Optimiser l'accès aux données dans le processus d'interrogation des données, utiliser la limite, essayer de ne pas utiliser *, transformer le complexe en requêtes simples et fractionnées, décomposer les requêtes associées*
Optimiser des types spécifiques de instructions de requête, Optimiser le nombre (), optimiser les instructions de requête associées, optimiser les sous-requêtes, optimiser le groupe par et distinct, optimiser la limite et l'union
Optimisation du moteur de stockage : essayez d'utiliser innodb
Optimisation de la structure de la table de base de données : partition fonctionnement (pour l'utilisateur transparent) de la partition, de la sous-base de données et de la sous-table (séparation horizontale, division verticale comme table secondaire)
Optimisation de l'architecture du serveur de base de données : réplication maître-esclave, séparation lecture-écriture, veille chaude double maître , équilibrage de charge (lvs pour atteindre l'équilibrage de charge, le middleware de base de données MyCat implémente l'équilibrage de charge)