La concurrence élevée (High Concurrency) fait généralement référence à la garantie que le système peut traiter de nombreuses demandes en parallèle en même temps grâce à la conception.
D'une manière générale, le moyen efficace de résoudre le problème de la concurrence WEB élevée est d'utiliser un multicouche linéairement évolutif architecture distribuée , La structure de mon projet de production est comme ça, permettez-moi de la présenter ici.
Serveur Web (Nginx) : (Apprentissage recommandé : Tutoriel vidéo PHP)
Cette couche peut être facilement distribuée et déployée, combinée à l'intelligence DNS La résolution peut facilement éviter les points de défaillance uniques et accélérer l'accès régional. Il est facile d'obtenir un équilibrage de charge lorsqu'il est combiné avec LVS.
Cette couche est principalement responsable du traitement des requêtes statiques et de la transmission des requêtes PHP vers le nœud de traitement PHP de la deuxième couche. Quant à l'adresse de la ressource statique (http://misc.xxxx.com), elle peut l'être. déployé séparément, ou Utiliser directement les services de stockage cloud commerciaux (Qiniu est bon en Chine et Amazon S3 à l'étranger)
Nœud de traitement PHP :
Un nœud est en fait un système qui écoute un port spécifique Les requêtes de processus et de serveur Web sont distribuées via l'équilibreur de charge (j'utilise l'équilibreur de charge d'AWS), ce qui est très facile à réaliser en matière de distribution et d'équilibrage de charge.
J'utilise toujours php-fpm fourni avec PHP. En fait, les performances de hhvm de Facebook sont très puissantes, mais il ne peut pas réussir à 100 % le test unitaire de mon projet. hhvm mûrit
Cache :
utilise memcached La fonction de cette couche est principalement de réduire les E/S de la base de données et d'accélérer l'accès aux données chaudes. le programme, donc je n'entrerai pas dans les détails. Mais pour parler simplement, il y a deux façons. La première consiste à ajouter un traitement de cache au niveau global du programme. Cette méthode a un faible couplage de code, mais le taux de réussite effectif ne l'est pas. élevé.Certains projets peuvent ne pas convenir.L'autre consiste à ajouter un cache à un programme spécifique.Ajout d'un traitement de cache au point d'accès aux données.Cette méthode a un degré élevé de couplage de programme, mais le taux de réussite du cache est très élevé. , et il n'y a presque pas de caches invalides. C'est ce que j'utilise.
Base de données :
L'échelle de données de mon projet actuel n'est pas grande et je n'utilise qu'une seule base de données pour le moment, mais la logique du programme est prête pour le linéaire extension de la base de données.
En fait, l'expansion de la couche de base de données est un cliché. La méthode courante consiste à créer des sous-bases de données et des sous-tables. Cela doit jeter les bases dans le code initial. Une autre méthode plus fluide consiste à utiliser un middleware. , tels que 360's Atlas, Alibaba Baba's cobar, Taobao's TDDL, les middlewares peuvent être étendus sans modifications importantes du code, mais les scénarios d'utilisation spécifiques sont encore limités et les projets spécifiques doivent être examinés individuellement.
Autres :
Selon différents projets, l'architecture peut également utiliser de manière sélective les files d'attente. J'utilise actuellement beanstalkd, et Redis est également un bon choix. Les environnements d'utilisation courants des files d'attente sont l'envoi d'e-mails et le push de messages sur site. Cependant, dans certains scénarios, il peut également être utilisé comme tampon pour la base de données principale. C'est également un bon choix pour gérer une concurrence importante ou un trafic soudain. 🎜>
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!