Sous Linux, la concurrence élevée est une situation de « rencontre d'un grand nombre de demandes d'opération dans un court laps de temps » rencontrée lors du fonctionnement du système. Elle se produit principalement lorsque le système Web reçoit un grand nombre de demandes d'accès concentré ; de cette situation conduira à Le système effectue un grand nombre d'opérations pendant cette période, telles que des demandes de ressources, des opérations de base de données, etc.
L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.
Un concept de haute concurrence
1.1 Concept de haute concurrence
La haute concurrence (High Concurrency) est l'un des facteurs qui doivent être pris en compte dans la conception de l'architecture d'un système distribué Internet. assurer le système grâce à la conception Capable de traiter de nombreuses demandes en parallèle en même temps .
La concurrence élevée (High Concurrency) est une situation dans laquelle "un grand nombre de demandes d'opération sont rencontrées dans un court laps de temps" lors du fonctionnement du système. Cela se produit principalement lorsque le système Web reçoit un grand nombre de demandes d'accès centralisées (par exemple). exemple : 12306 Situation de récupération de billets ; événement Tmall Double Eleven). L'apparition de cette situation amènera le système à effectuer un grand nombre d'opérations pendant cette période, telles que des demandes de ressources, des opérations de base de données, etc.
1.2 Indicateurs liés à la concurrence élevée
Temps de réponse (Temps de réponse)Le temps nécessaire au système pour répondre aux demandes. Par exemple, il faut 200 ms au système pour traiter une requête HTTP. Ces 200 ms sont le temps de réponse du système-
DébitLe nombre de requêtes traitées par unité de temps-
Requête par seconde QPS (Query Per Second) Nombre de demandes de réponse par seconde. Dans le domaine Internet, la différence entre cet indicateur et le débit n'est pas si évidente-
Nombre d'utilisateurs simultanés (User Concurrence)Le nombre d'utilisateurs qui utilisent le système fonctionne normalement en même temps. Par exemple, dans un système de messagerie instantanée, le nombre d'utilisateurs en ligne simultanés représente dans une certaine mesure le nombre d'utilisateurs simultanés du système. En termes de paramètres -
Mécanisme de distribution d'événements IO
2. Améliorer la capacité de concurrence du système
-
2.1 Expansion verticale
-
Améliorer les capacités de traitement d'une seule machine
Améliorer les performances matérielles d'une seule machine, par exemple : augmenter C PU Le nombre de cœurs est comme 32 cœurs, passer à un meilleure carte réseau comme 10G, mise à niveau vers un meilleur disque dur comme SSD, augmentez la capacité du disque dur comme 2T, augmentez la mémoire système comme 128G
pour améliorer les performances de l'architecture à machine unique, par exemple : utilisez le cache pour réduire les E/S fois, utilisez le mode asynchrone pour augmenter le débit d'un service unique, utilisez des structures de données sans verrouillage pour réduire le temps de réponse
2.2 Expansion horizontale
- L'augmentation du nombre de serveurs peut augmenter linéairement les performances du système
- 2.3 Architecture en couches Internet commune
(1) Couche client : l'appelant typique est un navigateur ou une application mobile APP
(2) Couche de proxy inverse : entrée du système, proxy inverse(3) Couche d'application de site : implémente le noyau logique d'application et renvoie HTML ou json(4) Couche de service : si la servitisation est implémentée, il y aura cette couche
(5) Couche de cache de données : le cache accélère l'accès au stockage- (6 ) Couche de base de données : Stockage de données solidifié par base de données
2.4 Architecture d'expansion horizontale
Extension horizontale de la couche proxy inverse
Lorsque nginx devient un goulot d'étranglement, augmentez simplement le nombre de serveurs et ajoutez nginx Pour le déploiement du service, ajoutez un L'IP du réseau externe peut étendre les performances de la couche proxy inverse et atteindre une concurrence élevée théoriquement infinie
Obtenu grâce au « sondage DNS » : le serveur DNS configure plusieurs configurations pour un nom de domaine. Chaque fois qu'une demande de résolution DNS est effectuée pour accéder au serveur DNS, ces IP seront interrogées et renvoyées. L'expansion horizontale de la couche site est réalisée via "nginx". En modifiant nginx.conf, plusieurs backends Web peuvent être configurés
Lorsque le backend Web devient un goulot d'étranglement, augmentez simplement le nombre de serveurs, ajoutez un nouveau déploiement de service Web et configurez un nouveau backend Web dans la configuration nginx. Il peut étendre les performances de la couche site et atteindre une concurrence élevée théoriquement infinie. L'expansion horizontale de la couche de service est obtenue via le "pool de connexions de service". Lorsque le serveur RPC de la couche de service en aval est utilisé, le pool de connexions dans le client RPC. établira plusieurs connexions avec le service en aval. Lorsque le service devient un goulot d'étranglement, il suffit d'augmenter le nombre de serveurs, d'ajouter de nouveaux déploiements de services et d'en établir de nouveaux au niveau des connexions de service en aval pour augmenter les performances de la couche de service et obtenir des résultats. Concurrence théoriquement infiniment élevée. Expansion horizontale de la couche de données. La couche de données (cache, base de données) implique l'expansion horizontale des données et le stockage d'origine. Les données (cache, base de données) sur un serveur sont divisées horizontalement sur différents serveurs pour étendre le système. performance. Stockage d'une certaine gamme de données La bibliothèque user0 stocke même les données UID
La bibliothèque user1, stocke les données UID impaires
Trois serveurs Linux uniques améliorent la concurrence
Limitation du nombre maximum de fichiers ouverts dans un seul processus (le nombre maximum par défaut de fichiers ouverts dans un seul processus est de 1024)ulimit –n 65535
Copier après la connexion
3.2 Paramètres TCP du noyau
État TIME_WAIT Une fois la connexion TCP déconnectée, elle restera dans l'état TIME_WAIT pendant un une certaine période de temps avant la libération du port. Lorsqu'il y a trop de requêtes simultanées, un grand nombre de connexions dans l'état TIME_WAIT seront générées. Si elles ne peuvent pas être déconnectées à temps, une grande quantité de ressources de port et de ressources de serveur sera occupée-
#查看TIME_WAIT状态连接
netstat -n | grep tcp | grep TIME_WAIT |wc -l
Copier après la connexion
# vim /etc/sysctl.conf
net.ipv4.tcp_syncookies= 1 #表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse= 1 #表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle= 1 #表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭;
net.ipv4.tcp_fin_timeout= 30 #修改系統默认的TIMEOUT 时间。
Copier après la connexion
Recommandations associées : " - Tutoriel vidéo Linux
"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!