A estrutura de microsserviço PHP é "Micro Service Framework For PHP". É uma estrutura moderna de serviço de rotina PHP desenvolvida de forma independente pela equipe de servidores da comunidade Camera360 baseada em Swoole. É conhecida como msf ou php-msf. estrutura de aplicativos corporativos e resistiu ao teste Camera360 de alta simultaneidade e grande tráfego para centenas de milhões de usuários. php-msf é liderado pela equipe do servidor Camera360 e será continuamente atualizado e mantido. Também esperamos que mais desenvolvedores de aplicativos Swoole de destaque se juntem. A ideia central do design do php-msf é usar meios técnicos inovadores de corrotina, assíncrono e paralelismo para melhorar a capacidade de rendimento de uma única máquina do sistema e reduzir os custos gerais do servidor.
Manual de estrutura (Gitbook): Manual de desenvolvimento PHP-MSF
Documento API (Rawgit): documento de classe
Exemplo de projeto DEMO: PHP-MSF DEMO
Ajude a melhorar a documentação: https://github.com/pinguo/php-msf-docs, envie um PR.
Grupo 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
verificará o ambiente em execução, criará automaticamente um modelo de projeto baseado em sua configuração personalizada, instalará dependências com o compositor e iniciará o serviço. Se cdn.rawgit.com
estiver inacessível, você pode clonar ou baixar diretamente o php-msf-docker, extrair installer.php
e executar php installer.php
diretamente
Se tudo correr bem, ao final da execução você verá a seguinte saída:
[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
Teste de acesso:
$ > curl http://127.0.0.1:8990/Welcome
hello world !
Preste atenção na porta se não for 8990, é preciso modificá-la e depois acessar o teste.
├── 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 // 单元测试目录
O acima é uma estrutura de aplicativo padrão baseada em php-msf. O programa de instalação com um clique installer.php irá gerar automaticamente um diretório. Os usuários podem criar alguns diretórios personalizados de acordo com suas necessidades. ser carregado automaticamente.
modo de depuração
$ > ./server.php start
Modo daemon
$ > ./server.php start -d
Interromper serviço
$ > ./server.php stop
Reiniciar serviço
$ > ./server.php restart
Criamos uma imagem Docker para facilitar aos usuários do Docker a instalação rápida do ambiente e a execução do projeto PHP-MSF DEMO. Além disso, se você deseja visualizar o efeito da modificação do código no ambiente de desenvolvimento em tempo real, é recomendável usar a versão desktop do Docker para Mac/Windows.
Se você atualizar o Docker, ele migrará automaticamente as imagens e contêineres originais. Aguarde pacientemente e certifique-se de não encerrar o processo do Docker no meio do caminho, caso contrário, será difícil migrar novamente.
Registro 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
Nós nos concentramos na construção de uma estrutura de microsserviços puramente assíncrona estável e de alto desempenho baseada em HTTP, como uma pilha de tecnologia alternativa ao nginx+php-fpm para realizar os microsserviços da arquitetura e o servidor Tcp/WebSocket será suportado como um plug-in; , ou como outro projeto independente de código aberto.
Para pequenas equipes ou sistemas empresariais, recomendamos o uso da pilha de tecnologia tradicional nginx+php-fpm. Não há gargalos em termos de custo e desempenho e não há necessidade de introduzir uma nova pilha de tecnologia.
Para equipes de grande e médio porte ou sistemas empresariais que estão em um estágio importante de governança de serviços ou de evolução orientada a serviços, o php-msf é uma das opções.
Para grandes clusters de aplicativos PHP, se você deseja economizar significativamente nos custos do servidor e melhorar o desempenho do serviço, o php-msf é uma das opções.
Para serviços de agregação, como páginas iniciais de grandes sites, se você deseja integrar dados por meio de conteúdo de agregação do lado do servidor, php-msf é uma das opções.
O método de instalação recomendado é adicionar a dependência pinguo/php-msf
editando o projeto composer.json
{
"require" : {
"pinguo/php-msf" : " >=3.0.0 "
},
"minimum-stability" : " dev "
}
"minimum-stability": "dev"
deve ser adicionada porque o componente de log depende de "monolog/monolog": "2.0.x-dev"
e monolog/monolog
não possui um pacote de versão 2.0, mas temos já fiz isso no ambiente de produção Verifique sua estabilidade.
php-msf resistiu ao alto tráfego e alta simultaneidade do serviço comunitário Camera360, e sua estabilidade foi totalmente verificada. A estabilidade é a questão mais importante para a qual gastamos muito tempo e energia e é o princípio mais importante dos três princípios.
A capacidade de processamento de uma única máquina de negócios com uso intensivo de IO é aumentada de 5 a 10 vezes. Esses são dados reais obtidos no ambiente de produção. Por exemplo, um serviço de agregação na comunidade Camera360 requer 40 servidores para suportar o tráfego durante o pico de tráfego. Após reconstrução com php-msf São necessários apenas 4 servidores com a mesma configuração para suportar todo o tráfego.
Devido ao complexo modelo de processo do Swoole, que é dividido em bloqueio síncrono e não bloqueio assíncrono, ao executar a mesma lógica de código, o método de chamada e a passagem de parâmetros podem ser inconsistentes, o que aumenta diretamente o custo de aprendizado para proteger o baixo. diferenças de nível, muito trabalho foi feito, e a única diferença entre a implementação e a estrutura MVC tradicional é a adição da palavra-chave "yield". Referimo-nos a algumas práticas de código do framework Yii2 e esperamos mudar perfeitamente do desenvolvimento do Yii2.
Os três princípios acima são a base para votação ou fusão de código quando implementamos novos recursos e funções. Qualquer PR que afete esses princípios também será rejeitado.
Atualmente, existem vários projetos PHP de código aberto na comunidade que suportam corrotinas. A maioria deles usa Generator+Yield para implementá-los. No entanto, diferenças sutis na implementação levarão a um desempenho muito diferente. em um método de escrita de código síncrono, então corrotina. O desempenho do agendador deve ser alto o suficiente. O desempenho de agendamento da co-rotina do php-msf é 80% do método de retorno de chamada assíncrono nativo. Ou seja, uma determinada API que usa o método de gravação de retorno de chamada assíncrono nativo tem um QPS de 10.000. o agendador de rotina php-msf O QPS de agendamento é 8000.
Atualmente, o php-msf ainda está em sua infância. Gastamos muito tempo e energia resolvendo problemas de estabilidade, alto desempenho e memória, porque acreditamos que a "pedra angular" é a garantia mais básica para um "arranha-céu". edifício." Somente se a fundação for sólida, Somente desta forma o "edifício" pode ser construído "mais alto". A versão 3.0 é a versão inicial do nosso código aberto e um passo importante para nós. A seguir, nosso foco será no aprimoramento da estrutura de microsserviços distribuídos.
Além disso, por ser baseado no processo residente do PHP e analisar diretamente as solicitações HTTP ou TCP, este é o suporte mais importante para o serviço. Com base nisso, podemos fazer muitas ideias que não ousávamos realizar antes. há muito espaço para a imaginação.
php-msf foi originalmente desenvolvido com base em SwooleDistributed-1.7.x, e nesta versão de código aberto, o pool de conexão usa principalmente implementação SD. Como o posicionamento de nossas estruturas, os cenários de negócios que elas resolvem, os requisitos de estabilidade e os estilos de codificação são muito diferentes, decidimos desenvolver estruturas de microsserviços de forma independente. Cada estrutura tem suas próprias características e vantagens. O framework é o mais importante, e gostaria de agradecer ao White Cat por isso. Além disso, durante o desenvolvimento do framework php-msf e dos aplicativos do ambiente de produção, encontrei muitos problemas subjacentes, mas todos foram resolvidos um por um. 1. A coisa mais importante que pode resolver esses problemas é o projeto de código aberto Swoole. Gostaria de expressar minha profunda gratidão ao fundador Han Tianfeng-Rango por seu forte apoio.
Licença Pública Geral GNU, versão 2, consulte https://www.gnu.org/licenses/gpl-2.0.html