Maison  >  Article  >  Discussion approfondie sur les solutions et solutions pour l'accès « à haute concurrence et à trafic important »

Discussion approfondie sur les solutions et solutions pour l'accès « à haute concurrence et à trafic important »

青灯夜游
青灯夜游avant
2022-05-11 14:18:184557parcourir

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é)

Concepts liés à l'architecture web à haute concurrence


  • 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.

Solution globale pour le Web à forte concurrence et à trafic important


  • 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 charge du serveur Web


é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

cdn Accelerate


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

Établir un serveur d'images indépendant


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.

  • Traitement simultané des langages dynamiques

  • Qu'est-ce qu'un processus
  • Un processus (Process) est un programme dans l'ordinateur qui exécute une activité en cours sur une certaine collection de données et est utilisé par le système pour l'allocation des ressources et la planification L'unité de base est la base de la structure du système d'exploitation

Un processus est un "programme en cours d'exécution"

Modèle à trois états de l'état d'un processus


Dans un système multiprogrammation , les processus s'exécutent en alternance sur le processeur et les états continuent de changer.

En cours d'exécution : Lorsqu'un processus est en cours d'exécution sur le processeur, on dit qu'il est dans un état d'exécution. Le nombre de processus dans cet état est inférieur ou égal au nombre de processeurs. Pour un système monoprocesseur, il n'y a qu'un seul processus en cours d'exécution. Lorsqu'aucun autre processus ne peut être exécuté (par exemple, tous les processus sont bloqués), le processus inactif du système est généralement exécuté automatiquement.


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, parfois appelé processus léger, est la plus petite unité du flux d'exécution d'un programme.
  • 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 peut créer et annuler un autre thread, et plusieurs threads du même processus peuvent s'exécuter simultanément.
  • 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.

  • Trois états de threads

É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 ?

  • 1. Un thread est une unité d'exécution au sein d'un processus. Il y a au moins un thread dans un processus, et le processus a son propre espace d'adressage indépendant.
  • 2. Le processus est l'unité d'allocation et de propriété des ressources. Les threads d'un même processus partagent les ressources du 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

    Processus unique multi-thread : plusieurs personnes mangeant à une table
  • thread unique multi-processus : plusieurs personnes chacune à Manger de la nourriture sur votre propre 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

    Entrez dans la boucle while, bloquez l'opération d'acceptation du processus, attendez que la connexion client entre dans le processus principal et créez un processus enfant via fork sous le multi- modèle de processus.
  • Vous pouvez créer des sous-threads en mode multi-thread
  • 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

  • Après avoir reçu les données, le programme serveur les traite puis les utilise, envoie une réponse au client

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 concurrente

1.php extension swoole, parallèle, réseau haute performance Le moteur de communication est écrit en langage C pur et fournit un serveur multithread asynchrone en langage PHP, un client réseau tcp/udp asynchrone, mysql asynchrone, redis asynchrone, pool de connexions à la base de données, AsyncTask, file d'attente de messages, minuterie en millisecondes, Lecture et écriture de fichiers asynchrones, requête DNS asynchrone.


  • 2. En plus de la prise en charge des E/S asynchrones, swoole a conçu plusieurs structures de données simultanées et mécanismes de communication IPC pour le mode multi-processus PHP, ce qui peut grandement simplifier le travail de programmation simultanée multithread


  • 3.swoole2 .0 prend en charge les coroutines similaires au langage Go et peut utiliser du code entièrement synchrone pour implémenter des programmes asynchrones
  • 4. File d'attente des messages
  • 5. Découplage d'application
  • Description du scénario : une fois que l'utilisateur a placé un. commande, la commande Le système doit informer le système d'inventaire.
  • Si le système d'inventaire n'est pas accessible, la réduction de commande échouera, entraînant un échec de commande
  • Le système de commande est découplé du système d'inventaire
  • File d'attente de référence
  • Une fois que l'utilisateur a placé un commande, le système de commande est terminé. Traitement de la persistance, écriture du message dans la file d'attente des messages et renvoi du succès de la commande de l'utilisateur
  • Informations sur la commande d'abonnement, en utilisant la méthode pull/push pour obtenir les informations de commande, le système d'inventaire effectue des opérations d'inventaire sur la base des informations de commande
  • 6. Scénarios d'application de réduction des pics de trafic : activités de vente flash, le trafic augmente instantanément et le serveur est soumis à une forte pression. Une fois que l'utilisateur a lancé une demande, le serveur la reçoit et l'écrit sur le serveur. file d'attente des messages en premier. Si la longueur de la file d'attente des messages dépasse la valeur maximale, une erreur sera signalée directement ou l'utilisateur sera invité à contrôler le volume des requêtes et à atténuer le trafic élevé
  • 7.日志处理 应用场景:解决大量日志的传输 日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志。

  • 8.消息通讯 聊天室

  • 9.常见消息队列产品 kafka,ActiveMQ,ZeroMQ,RabbitMQ,Redis等 php的异步 消息队列

  • 10.接口的并发请求 curl_multi_init

mysql缓存层的优化


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 de la couche de données MySQL


  • 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)

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer