Maison  >  Article  >  développement back-end  >  PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

藏色散人
藏色散人original
2022-01-18 14:13:244208parcourir

Avant-propos

PHP a une large gamme d'applications, notamment dans le développement de programmes Web. Selon les dernières statistiques de Wikipédia d'avril 2013, PHP a été installé sur plus de 244 millions de sites Web et 210 sur 10 000 serveurs, et selon. Selon le rapport W3Techs, en septembre 2021, 78,9 % des sites Web utilisent PHP. PHP est donc le langage numéro un au monde, du moins dans le domaine du développement web, ce qui n’est pas une blague.

En termes de sélection technologique, PHP utilise principalement LAMP (le nom complet est Linux + apache + mysql + php) ou LNMP (le nom complet est Linux + nginx + mysql + php). Ce framework technique mature et stable favorise le web PHP. Développer la prospérité écologique et la réussite commerciale.

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

Dans le modèle de développement traditionnel, les développeurs eux-mêmes doivent installer, maintenir et mettre à niveau divers logiciels :

  • Si vous êtes un utilisateur d'entreprise, si le volume d'affaires augmente ou pour l'environnement de production Stabilité et disponibilité, utiliser l'équilibrage de charge est une option inévitable :

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

À l'heure actuelle, les développeurs PHP ou les étudiants en exploitation et maintenance en ligne se préoccupent de plus de choses :

  • Chaque augmentation de la production Les machines doivent réinstaller le logiciel correspondant, faire la même configuration nginx et configuration php-fpm, et maintenir les mises à jour de sécurité pour chaque machine de production

  • Si l'application développée nécessite une nouvelle extension, il peut être nécessaire d'humaniser chaque machine Pour ajouter des extensions

  • L'équilibreur de charge est mis à niveau à mesure que l'entreprise évolue, et la machine Worker suivante raccroche. Comment gérer l'exploitation et la maintenance

  • Comment gérer les pics et les creux de l'entreprise pour améliorer l'utilisation des ressources

  • ...

  • Si vous êtes un utilisateur d'entreprise avec un grand nombre de membres de développement dans l'équipe de projet, n'est-il pas nécessaire de configurer une machine Linux NLP installée pour chaque développement en tant que machine de développement et de test (ou partagée par plusieurs personnes) une machine ) ?

  • Si vous êtes un ISV, une société d'externalisation ou une startup qui assure le développement et l'hébergement de sites Web, mes clients sont tous des portails de petites et moyennes entreprises. Comment puis-je améliorer l'utilisation de mes ressources machine back-end et fournir de meilleurs services. personnalisation ? Servir ?

  • Si vous êtes étudiant ou vous préparez à apprendre le développement PHP et que vous disposez uniquement d'un ordinateur Windows localement, pouvez-vous obtenir directement l'environnement LNP (Linux+Nginx+PHP) pour apprendre presque gratuitement ?

  • ...

Avec ces questions, explorons comment Serverless résout ces problèmes.

PHP rencontre le sans serveur

Qu'est-ce que le sans serveur ?

Serverless = Faas (Function as a service) + Baas (Backend as a service), on peut rapidement comprendre les concepts associés à travers deux schémas :

  • Modèle traditionnel

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

  • Serverless Modèle

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

Le CDN et l'OSS sur la photo sont des services BaaS, et FC est la plate-forme FaaS avec une logique de fonction personnalisée. Grâce à cette comparaison, nous pouvons rapidement obtenir les fonctionnalités et les avantages du FaaS :

  • Seulement. focus sur le business Pour le développement du code, écrivez simplement la logique correspondante

  • Mise à l'échelle extrêmement élastique, pas besoin de gérer le serveur

  • Payez au fur et à mesure, chaque appel est facturé par millisecondes

  • ...

Comme indiqué plus loin dans cet article, Serverless fait principalement référence à FaaS. Comme le montre le diagramme ci-dessous, après que quelques lignes de code ont été écrites et enregistrées sur la plate-forme FaaS du fournisseur de cloud, une API Web flexible et hautement disponible est complétée.

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

PHP rencontre Serverless

PHP est un langage très important pour la communauté de développement FaaS des principaux fournisseurs de cloud, tels que Function Compute d'Alibaba, Lambda d'AWS (indirectement pris en charge via Custom Runtime), SCF de Tencent, etc. été lancé Outre son support du langage PHP, phper ne devrait pas céder à la pratique innovante de la technologie Serverless dans le domaine du front-end (voir l'annexe à la fin de cet article si vous êtes intéressé). En prenant Alibaba Cloud Function Computing comme exemple, de nombreux développeurs PHP ont de nombreuses pratiques intéressantes :

  • Utilisez directement l'extension gd ou ImageMagick pour obtenir des images élastiques et hautement disponibles, des filigranes et d'autres API gourmandes en CPU

  • Directement utilisez ffmpeg + instance de performance + appel avec état asynchrone pour compléter les services de traitement audio et vidéo tels que le montage et la synthèse vidéo

  • Utilisez les fonctions implémentées par les déclencheurs HTTP pour enterrer le point dans la plate-forme publicitaire afin d'obtenir rapidement une activité d'achat à haute disponibilité

  • Migrez directement l'API WEB qui était auparavant implémentée sur la base de frameworks (tels que ThinkPHP) vers la plateforme FaaS, et n'avez plus à vous soucier des temps d'arrêt et des problèmes d'exploitation et de maintenance

  • ...

Bien que FaaS résout très bien PHPer Les problèmes suivants :

  • Nouvelle activité ou développement d'une nouvelle API Web

  • Dans l'entreprise existante, certaines API gourmandes en CPU ou nécessitant une grande élasticité doivent être extraites séparément et basées sur FaaS

Mais le modèle de développement traditionnel ou les entreprises existantes nécessitent un certain coût pour que les développeurs démarrent et se transforment. Par exemple, l'exemple d'interface de programmation PHP Runtime d'un certain fournisseur Faas :

function handler($event, $context) {
     $eventObj = json_decode($event, $assoc = true);
    // do your thhings
     // ....
     return $eventObj['key'];
}

Mais pouvons-nous aller plus loin ? devez suivre les entrées de fonctions convenues par le fournisseur FaaS pour implémenter chaque entrée de fonction API, mais les projets traditionnellement exécutés sur LAMP ou LNMP peuvent-ils être directement transformés en FaaS ?

La réponse est oui

Le Custom Runtime d'Alibaba Cloud Function Computing et son modèle de programmation minimaliste basé directement sur le protocole HTTP sont à la pointe de tous les fournisseurs de cloud.

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

Lorsque Function Compute démarre l'environnement d'exécution du Custom Runtime, il appellera le fichier d'amorçage par défaut (ou le paramètre Args que vous avez défini lors de la création de la fonction) pour démarrer votre serveur HTTP personnalisé. Ensuite, ce serveur HTTP prend en charge tout le reste. fonctions du système Function Compute, c’est-à-dire toutes vos demandes d’appel de fonction.

Le système sous-jacent de l'environnement d'exécution d'exécution Function Compute Custom est Linux, et il intègre nginx/1.10.3 et php-fpm7.4. Pour les applications PHP, vous pouvez l'utiliser directement

Déployez un projet wordpress. à titre d'exemple, il suffit de conditionner simplement le répertoire suivant dans un package zip et de créer une fonction sur la plateforme informatique de fonctions :

- bootstrap
- nginx.conf
- php-fpm.conf
- php.ini-production
- wordpress

Le répertoire wordpress est le projet Web correspondant, et bootstrap est le script pour démarrer nginx et php-fpm :

...
echo "start php-fpm"
php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.conf
echo "start nginx"
nginx -c /code/nginx.conf
...

bootstrap Les détails peuvent être trouvés Référez-vous à WordPress dans FC

Ainsi, après avoir utilisé Function Compute, un produit sans serveur, et l'avoir combiné avec le développement PHP traditionnel, vous n'avez plus à penser à l'équilibrage de charge, à l'expansion ou à la contraction, à la gestion des machines. , ou des temps d'arrêt. Les choses attendent, il vous suffit de développer le code métier en toute sérénité.

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

Comme le montre l'image ci-dessus : les développeurs n'ont qu'à développer leur propre code métier. La seule chose à considérer est que l'expansion de Function Compute ne doit pas être trop ou trop drastique (comme par exemple). en le définissant directement sur la plate-forme Function Compute, définissez simplement le nombre maximum d'instances où cette fonction peut apparaître) et exercez une pression excessive sur votre propre base de données Mysql en aval.

Bien sûr, lors de la migration complète de l'application Web PHP traditionnelle d'origine vers une plate-forme informatique de fonctions sans serveur, certains scénarios peuvent devoir prendre en compte des problèmes de persistance des données, car l'informatique des fonctions est sans état et la persistance des données peut être enregistrée à l'aide de NAS, Redis et d'autres services sont complétés. En prenant NAS comme exemple, l'organigramme est le suivant :

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

En prenant WordPress comme exemple, les images téléchargées par le système d'arrière-plan ou la fonction Session doivent être conservées. sur le disque.

  • Définissez le répertoire de téléchargement de fichiers ou le répertoire de session du projet Web sur un répertoire sur le disque NAS, et le disque NAS sera conservé

  • Vous pouvez même placer le projet Web directement sur le disque NAS. temps, le calcul de la fonction est un environnement d'exécution purement LNP

PHP rencontre Serverless pour vous aider à résoudre ces problèmes !

比如将 wordpress 工程不作为函数的代码包的一部分, 而已提前上传到 NAS 盘, 只需要设置好 nginx.conf 中的 root 能知道 web 工程即可, 如上面的 nginx.conf, /mnt/auto 表示挂载的 NAS 目录,mnt/auto/wordpress 则表示在 NAS 上的 web 工程。

此时对您来说, 函数再也不用变了, 您可能只是需要开发新的业务代码, 然后上传到 NAS 上即可(或者直接使用 git 直接在 NAS 操作,实现 web 工程的版本和 git 上的 commit 绑定, 使用 git 实现代码的快速升级和混滚)

但是从安全生产的角度来说, 还是建议您 web 工程变更最好和函数的变更相关联

小结

从上面的讨论和陈述中, 我们不难发现, PHP 遇见 Serverless 是一件令人兴奋的事情, 让 phper 有了更大的想象空间。 Serverless 的理念和 PHP 这个语言出现的理念也是一致的: 即让开发者最大精力集中在自己的业务价值。 PHP 语言一直是 web 领域最好的生产力代表, 而 Serverless 将会让 PHP 如虎添翼。

我们最后来一一解答下前言中提出的问题:

如果您是一个企业用户, 业务体量变大或者为了生产环境的稳定和可用性, 如何做?

   如上面陈述, 使用函数计算和传统的 PHP 开发相结合后, 您再也不用考虑负载均衡的事情, 不用考虑扩缩容的事情, 不用管理机器、担心宕机的事情等等, 只需要安安心心把业务代码开发好即可。

 

如果您是项目组开发成员比较多的企业用户,能不能不需要给每个开发配置一个安装的 NLP 的 Linux 机器作为开发测试机器(或者多人共享一个机器)?

   是的, 每个开发者在函数计算上创建一个自己的 Service/函数即可, Service/函数配置开发测试环境的 VPC,实现内网安全访问数据库等其他下游服务。 函数调用的时候, 函数计算会拉一个 NLP 的执行环境来运行您分支上正在开发的 PHP 代码。

  • 每个执行环境是相互隔离的

  • 按调用次数计费, 不需要预留机器, 免除了机器成本上的浪费

  • 也可以很方便进行压测等各种事宜

如果您是一个提供网站开发和托管的 ISV 、外包公司或者创业公司, 我的客户都是一些中小企业的门户网站, 我怎么提高我后端机器资源利用率以及更好提供定制化服务?

   通常来说, 很多企业门户网站访问量不大, 但是网站挂掉了会引起客户投诉。每个客户的网站通过service 或者函数区分, 通过函数名或者service去区分您自己的客户: i. 管理方便  ii. 做定制化方便  iii. 做不同vip等级服务方便。 举个例子, 您可以快速通过某个函数的调用指标情况, 可以看出哪个客户的网站访问量大,可以做出客户画像以及制定不同的收费和 vip 服务级别。

如果您是一个学生或者准备学习 PHP 开发,本地只有 Windows 电脑, 能不能直接近乎免费的方式获取 LNP(Linux+Nginx+PHP)  的环境用来学习呢?

   是的, 只要将如下的文件和文件夹打包成 zip 包去函数计算控制台创建函数即可

- bootstrap
- nginx.conf
- php-fpm.conf
- php.ini-production
- myweb
  | - hello.php

这里构建了一个钉钉群: 31897696,  如果您对 PHP 落地 Serverless 感兴趣,您有观点、想法或者想吐槽的, 可以和大家一起交流。

本文作者:罗松(西流)

阿里云函数计算技术专家

负责阿里云函数计算产品功能开发(runtime 开发、事件源集成以及企业级 Serverless 解决方案落地等),目前专注在 Serverless 开发者工具链的建设,是云原生 Serverless Dev Tools 研发负责人,主导了 S/fc 等组件的开发工作,关注 Serverless 最新技术动态以及企业级解决方案的落地,致力于推动 Serverless 在开发者群体的流行。

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn