Le framework de microservice PHP est "Micro Service Framework For PHP". Il s'agit d'un framework de service de coroutine PHP moderne développé indépendamment par l'équipe du serveur communautaire Camera360 basé sur Swoole. Il est appelé msf ou php-msf. cadre d'application d'entreprise et a résisté au test Camera360 de haute concurrence et de trafic important pour des centaines de millions d'utilisateurs. php-msf est dirigé par l'équipe du serveur Camera360 et sera continuellement mis à jour et maintenu. Nous espérons également que d'autres développeurs d'applications Swoole exceptionnels nous rejoindront. L'idée principale de conception de php-msf est d'utiliser des moyens techniques innovants de coroutine, d'asynchrone et de parallélisme pour améliorer la capacité de débit du système sur une seule machine et réduire les coûts globaux du serveur.
Manuel du framework (Gitbook) : Manuel de développement PHP-MSF
Document API (Rawgit) : document de classe
Exemple de projet DEMO : PHP-MSF DEMO
Aidez à améliorer la documentation : https://github.com/pinguo/php-msf-docs, veuillez soumettre un PR.
Groupe PHP-MSF#1 (QQ) : 614054288
$ > php -r " copy('https://raw.githubusercontent.com/pinguo/php-msf-docker/master/installer.php', 'installer.php');include('installer.php'); " && source ~ /.bashrc
installer.php
vérifiera l'environnement d'exécution, créera automatiquement un modèle de projet basé sur votre configuration personnalisée, installera les dépendances avec composer et démarrera le service. Si cdn.rawgit.com
est inaccessible, vous pouvez directement cloner ou télécharger php-msf-docker, extraire installer.php
, puis exécuter directement php installer.php
Si tout se passe bien, à la fin de l'exécution, vous verrez le résultat suivant :
[2017-09-06 16:08:34] Run composer install success
[2017-09-06 16:08:34] Congratulations, all are installed successfully !
[2017-09-06 16:08:34] You can, visit http://127.0.0.1:8990/Welcome for test
_______ ____
________ / /_ ____ ____ ___ _____/ __/
___/ __ / __ / __ _ _____/ __ ` __ / ___/ /_
__/ /_/ / / / / /_/ /_____/ / / / / (__ ) __/
_/ .___/_/ /_/ .___/ /_/ /_/ /_/____/_/
/_/ /_/ Camera360 Open Source TM
[2017-09-06 16:08:34] Swoole Version: 1.9.18
[2017-09-06 16:08:34] PHP Version: 7.1.8
[2017-09-06 16:08:34] Application ENV: docker
[2017-09-06 16:08:34] Listen Addr: 0.0.0.0
[2017-09-06 16:08:34] Listen Port: 8990
Test d'accès :
$ > curl http://127.0.0.1:8990/Welcome
hello world !
Faites attention au port S'il ne s'agit pas de 8990, vous devez le modifier puis accéder au test.
├── app // PHP业务代码
│ ├── AppServer.php // 应用server类,可根据需求自定义
│ ├── Controllers // 控制器类目录
│ ├── Lib // 特殊逻辑处理类目录
│ ├── Models // Model类目录
│ ├── Route // 特殊路由规则类目录
│ ├── Tasks // Task类目录
│ └── Views // 视图文件目录
├── build.sh // 构建脚本(拉取docker镜像,启动容器)
├── checkstyle.sh // 代码检查脚本
├── composer.json // composer包依赖配置文件
├── config // 配置目录
├── server.php // server启动脚本
├── console.php // 命令行脚本
├── test // 单元测试目录
Ce qui précède est une structure d'application standard basée sur php-msf. Le programme d'installation en un clic installer.php générera automatiquement un répertoire. Les utilisateurs peuvent créer des répertoires personnalisés en fonction de leurs besoins. être chargé automatiquement.
mode débogage
$ > ./server.php start
Mode démon
$ > ./server.php start -d
Arrêter le service
$ > ./server.php stop
Redémarrer le service
$ > ./server.php restart
Nous avons créé une image Docker pour permettre aux utilisateurs de Docker d'installer rapidement l'environnement et d'exécuter le projet PHP-MSF DEMO. De plus, si vous souhaitez prévisualiser l'effet de la modification du code dans l'environnement de développement en temps réel, il est recommandé d'utiliser Docker pour la version de bureau Mac/Windows.
Si vous mettez à niveau Docker, il migrera automatiquement les images et les conteneurs d'origine. Veuillez attendre patiemment et assurez-vous de ne pas arrêter le processus Docker à mi-chemin, sinon il sera difficile de migrer à nouveau.
Registre Docker (Alibaba Cloud) :
docker pull registry.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-internal.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull registry-vpc.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest
docker pull pinguoops/php-msf-docker
Nous nous concentrons sur la construction d'un cadre de microservices purement asynchrone stable et performant basé sur HTTP, comme pile technologique alternative à nginx+php-fpm pour réaliser les microservices de l'architecture et le serveur Tcp/WebSocket sera pris en charge en tant que plug-in ; , ou comme autre projet open source indépendant.
Pour les petites équipes ou les systèmes d'entreprise, nous recommandons d'utiliser la pile technologique traditionnelle nginx+php-fpm. Il n'y a pas de goulot d'étranglement en termes de coût et de performances, et il n'est pas nécessaire d'introduire une nouvelle pile technologique.
Pour les équipes de grande et moyenne taille ou les systèmes d'entreprise qui se trouvent à une étape importante de la gouvernance des services ou de l'évolution orientée services, php-msf est l'une des options.
Pour les grands clusters d'applications PHP, si vous souhaitez réduire considérablement les coûts de serveur et améliorer les performances du service, php-msf est l'une des options.
Pour les services d'agrégation, tels que les pages d'accueil de grands sites Web, si vous souhaitez intégrer des données via un contenu d'agrégation côté serveur, php-msf est l'une des options.
La méthode d'installation recommandée consiste à ajouter la dépendance pinguo/php-msf
en éditant le projet composer.json
{
"require" : {
"pinguo/php-msf" : " >=3.0.0 "
},
"minimum-stability" : " dev "
}
"minimum-stability": "dev"
doit être ajoutée car le composant de journal dépend de "monolog/monolog": "2.0.x-dev"
, et monolog/monolog
n'a pas de package de version 2.0, mais nous avons déjà fait dans l'environnement de production. Vérifier sa stabilité.
php-msf a résisté au trafic élevé et à la concurrence élevée du service communautaire Camera360, et sa stabilité a été entièrement vérifiée. La stabilité est la question la plus importante à laquelle nous consacrons beaucoup de temps et d'énergie à résoudre, et c'est le principe le plus important des trois principes.
La capacité de traitement d'une seule machine pour les activités à forte intensité d'IO est multipliée par 5 à 10. Il s'agit de données réelles obtenues dans l'environnement de production. Par exemple, un service d'agrégation de la communauté Camera360 nécessite 40 serveurs pour supporter le trafic pendant les pics de trafic. Après reconstruction avec php-msf Seuls 4 serveurs avec la même configuration sont nécessaires pour supporter tout le trafic.
En raison du modèle de processus complexe de Swoole, qui est divisé en blocage synchrone et non-blocage asynchrone, lors de l'exécution de la même logique de code, la méthode d'appel et la transmission des paramètres peuvent être incohérentes, ce qui augmente directement le coût d'apprentissage afin de protéger les faibles. différences de niveau, nous avons fait beaucoup de travail, et la seule différence entre l'implémentation et le framework MVC traditionnel est l'ajout du mot-clé "yield". Nous faisons référence à certaines pratiques de code du framework Yii2 et nous espérons passer de manière transparente du développement Yii2.
Les trois principes ci-dessus constituent la base du vote ou de la fusion du code lorsque nous implémentons de nouvelles fonctionnalités et fonctions. Tout PR affectant ces principes sera également rejeté.
À l'heure actuelle, il existe plusieurs projets open source PHP dans la communauté qui prennent en charge les coroutines. La plupart d'entre eux utilisent Generator+Yield pour les implémenter. Cependant, des différences subtiles dans l'implémentation entraîneront des performances très différentes. Nous devons réaliser que les coroutines peuvent exécuter une logique asynchrone. dans une méthode d'écriture de code synchrone, donc coroutine. Les performances du planificateur doivent être suffisamment élevées.Les performances de planification de coroutine de php-msf sont de 80% de la méthode de rappel asynchrone native, c'est-à-dire qu'une certaine API utilisant la méthode d'écriture de rappel asynchrone native a un QPS de 10 000. le planificateur de coroutine php-msf Le QPS de planification est de 8000.
À l'heure actuelle, php-msf en est encore à ses balbutiements. Nous avons consacré beaucoup de temps et d'énergie à résoudre les problèmes de stabilité, de hautes performances et de mémoire, car nous pensons que la « pierre angulaire » est la garantie la plus fondamentale d'un « gratte-ciel ». bâtiment." Seulement si la fondation est solide, ce n'est qu'ainsi que le "bâtiment" peut être construit "plus haut". La version 3.0 est la version initiale de notre open source et une étape importante pour nous. Ensuite, nous nous concentrerons sur le peaufinage du cadre de microservices distribués.
De plus, comme il est basé sur le processus résident PHP et analyse directement les requêtes HTTP ou TCP, il s'agit du support de service le plus important. Sur cette base, nous pouvons réaliser de nombreuses idées que nous n'osions pas réaliser auparavant. il y a beaucoup de place pour l'imagination.
php-msf a été initialement développé sur la base de SwooleDistributed-1.7.x, et dans cette version open source, le pool de connexions utilise principalement l'implémentation SD. Étant donné que le positionnement de nos frameworks, les scénarios commerciaux qu'ils résolvent, les exigences de stabilité et les styles de codage sont tous très différents, nous avons décidé de développer indépendamment des frameworks de microservices. Chaque framework a ses propres caractéristiques et avantages. Choisissez celui qui convient à votre entreprise et à votre activité. Le framework est le plus important, et je tiens à remercier White Cat pour cela. De plus, lors du développement du framework php-msf et des applications de l'environnement de production, j'ai rencontré de nombreux problèmes sous-jacents, mais ils ont tous été résolus un par un. La chose la plus importante qui puisse résoudre ces problèmes est le projet open source Swoole. Je voudrais exprimer ma profonde gratitude au fondateur Han Tianfeng-Rango pour son ferme soutien.
Licence publique générale GNU, version 2, voir https://www.gnu.org/licenses/gpl-2.0.html