当前位置: 首页 > 后端技术 > PHP

亲爱的PHPer们,Serverless来的正是时候_0

时间:2023-03-29 23:45:18 PHP

前言PHP有着广泛的应用,尤其是在web程序的开发方面。根据维基百科的最新统计,2013年4月,PHP已安装在超过2.44亿个网站和210万台服务器上,根据W3Techs的一份报告,截至2021年9月,78.9%的网站使用PHP。所以PHP是世界排名第一的语言,至少在web开发领域不是闹着玩的。在技??术选型上,PHP主要使用LAMP(全称是Linux+apache+mysql+php)或者LNMP(全称是Linux+nginx+mysql+php)。这一成熟稳定的技术框架促进了PHPweb开发生态的繁荣和商业上的成功。传统的开发模式,需要开发者自己安装和维护各种软件的安装、维护和升级:如果你是企业用户,如果业务量变大或者为了生产环境的稳定性和可用性,不可避免地要使用loadbalancingOption:这时候php开发者或者线上运维同学比较关心的事情:每增加一台生产机需要重新安装相关软件,做同样的nginx配置和php-fpm配置,并且维护的安全更新每台生产机器。如果开发的应用需要新的扩展,可能需要手动增加和扩展每台机器。负载均衡器随着业务的变化而升级。如果下一个Worker机器挂了,怎么办?如何应对维度处理业务的波峰波谷才能提高资源利用率...如果你是项目组开发成员众多的企业用户,能不能每个开发都配置一台安装了NLP的Linux机器作为开发测试机(或多人共享一台机器)?如果你是独立软件开发商、外包公司或提供网站开发和托管的初创公司,而我的客户是一些中小企业的门户网站,如何提高我的后台利用率机器资源和更好地提供定制服务?如果你是学生或者准备学习PHP开发,而你本地只有一台Windows电脑,是否可以直接以近乎免费的方式获取LNP(Linux+Nginx+PHP)环境进行学习?……带着这些问题,我们来探讨一下Serverless是如何解决这些痛点的。PHP遇见Serverless什么是ServerlessServerless=Faas(Functionasaservice)+Baas(Backendasaservice),我们简单用两张图来快速理解相关概念:传统serverless模式图中的CDN和OSS是BaaS服务,FC它是一个具有自定义功能逻辑的FaaS平台。通过这样的对比,我们可以快速了解到FaaS的特点和优势:我们只需要专注于业务代码开发,编写相应的逻辑即可实现极致的弹性伸缩。无需管理服务器和按量付费,每次调用毫秒级计费...本文讨论的serverless主要是指FaaS,如下示意图,写几行代码保存到云厂商的FaaS平台,一个弹性高可用的WebAPI就完成了。PHP遇上ServerlessPHP作为开发组的大语言,各大云厂商的FaaS,如阿里云的FunctionCompute、AWS的Lambda(通过CustomRuntime间接支持)、腾讯的SCF等都推出了对PHP语言的支持,phper应该面对前端领域的Serverless技术创新实践,不放弃太多(感兴趣的可以看文末附录)。以阿里云函数计算为例,很多PHP开发者有很多有趣的做法:直接使用gd或者ImageMagick扩展实现灵活高可用的图片、水印等CPU密集型API直接使用ffmpeg+性能实例+异步有状态调用完成视频剪辑合成等音视频处理服务。广告平台嵌入HTTP触发器实现的功能,快速实现高可用的购买服务,直接基于框架(如ThinkPHP)实现WEBAPI。迁移到FaaS平台,再也不用担心宕机和运维问题了...虽然FaaS很好的解决了phper的以下问题:在新业务或者开发新的webAPI存量业务中,一些CPU密集型的或者弹性要求很高的API单独抽取到FaaS,但是传统的开发模式或者存量业务对开发者来说有一定的入门和改造成本。例如某FaaS厂商的PHPRuntime编程接口示例:functionhandler($event,$context){$eventObj=json_decode($event,$assoc=true);//doyourthings//....return$eventObj['key'];}但是能不能更进一步呢,开发者不需要按照FaaS厂商约定的功能去做portal可以一一实现API,但是能不能直接把跑在LAMP或LNMP上的传统项目转成FaaS?答案是肯定的,阿里云函数计算的CustomRuntime和直接基于HTTP协议的极简编程模型走在了所有云厂商的前列。函数计算在启动CustomRuntime执行环境时,会默认调用bootstrap文件(或者你创建函数时设置的Args参数)来启动你的自定义HTTPServer,然后这个HTTPServer会接管来自函数计算的所有请求system,也就是你所有的函数调用请求。函数计算自定义运行时执行环境的底层系统为Linux,内置nginx/1.10.3和php-fpm7.4。对于PHP应用,你可以直接使用它来部署一个wordpress项目。比如你只需要直接打包如下目录创建一个zip包,在函数计算平台创建一个函数:-bootstrap-nginx.conf-php-fpm.conf-php.ini-production-wordpress其中wordpress目录是对应的web工程,bootstrap是启动nginx和php-fpm脚本:...echo"startphp-fpm"php-fpm7.4-c/code/php.ini-production-y/code/php-fpm.confecho"startnginx"nginx-c/code/nginx.conf...bootstrap具体可以参考FC中的WordPress。因此,使用函数计算这种结合传统PHP开发的Serverless产品后,你不再需要考虑负载均衡、扩缩容、管理机器,不用担心宕机等??问题,只需要开发业务即可安心编码。从上图可以看出,开发者只需要开发自己的业务代码即可。唯一要考虑的是,函数计算的扩展不能太多太激进(比如在函数计算平台设置下可以直接弹出函数最大实例数就够了),而且是足以给下游的Mysql数据库造成太大的压力。当然,当从原来的传统phpweb应用完全迁移到serverless函数计算平台时,有些场景可能需要考虑数据持久化,因为函数计算是无状态的,数据持久化可以借助服务来保存,比如NAS和Redis完成。以NAS为例,流程图如下:以WordPress为例,后台系统或Session功能上传的图片需要持久化到磁盘。将web项目的文件上传目录或session目录设置为NAS盘上的某个目录。NAS盘可以持久化,甚至web项目也可以直接放在NAS盘上。此时函数计算纯粹是LNP执行环境。比如wordpress项目没有作为功能的一部分代码包已经提前上传到NAS盘。你只需要在nginx.conf中设置root就可以知道web项目了。比如上面的nginx.conf中,/mnt/auto表示挂载的NAS目录,mnt/auto/wordpress表示NAS上的web项目。此时,对于你来说,功能不再需要改动,你可能只需要开发新的业务代码,然后上传到NAS(或者直接用git直接在NAS上操作,实现版本web项目与gitCommit绑定,利用git实现代码快速升级和回滚)但是,从安全生产的角度,建议您的web工程变更与功能变更相关联。总结从上面的讨论和表述中,我们不难发现,PHP遇上Serverless是一件激动人心的事情,它给了phper更多的想象空间。serverless的理念也和PHP作为一种语言的理念是一致的:让开发者专注于自己的商业价值。PHP语言一直是Web领域生产力的最佳代表,而Serverless将使PHP如虎添翼。最后,我们一一回答前言中提出的问题:如果你是企业用户,业务量增加,或者为了生产环境的稳定性和可用性,你应该怎么做?如上所述,使用函数计算与传统PHP开发相结合后,你不再需要考虑负载均衡、伸缩、管理机器、担心宕机等??问题,你只需要安心开发业务代码即可小心。如果你是企业用户,项目组开发成员较多,能不能每次开发都配置一台安装了NLP的Linux机器作为开发测试机(或者多人共享的机器)?是的,每个开发者都可以在函数计算上创建自己的服务/函数。Service/function配置开发测试环境的VPC,实现对内网数据库等下游服务的安全访问。当一个函数被调用时,函数计算会拉取一个NLP执行环境来运行你分支上正在开发的PHP代码。每个执行环境相互隔离,按调用次数计费。无需预留机器,杜绝了机器成本的浪费,也可以方便压力测试等事宜。如果你是提供网站开发和托管的ISV,对于外包公司或者初创公司来说,我的客户是一些中小企业的门户网站。如何提高后端机器资源的利用率,更好的提供定制化服务?一般来说,很多企业门户网站的访问量并不大,但如果网站宕机,就会引起客户投诉。每个客户的网站以服务或功能区分,您自己的客户以功能名称或服务区分: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有兴趣,有意见、想法或者想吐槽,可以和大家交流。PHPFrameworkServerlessBestPracticesThinkPHPLaravelWordpressZ-BlogPHPSwoole更多:https://github.com/devsapp/start-web-frameworkReferencesServerlessArchitecturesBackendForFrontend(BFF)inServerless具体看Serverless对前端开发的影响未来当SSR遇上Serverless,轻松实现页面即时打开附录Serverless在前端领域发展如火如荼:BackendForFrontend(BFF)inServerless提高生产力前端开发者使用全栈提高开发效率减少前后端接口。沟通和联调时间,后端同学只需要做好原子接口的稳定性和可靠性,数据聚合直接由前端同学通过BFF实现。当SSR遇上Serverless,借助函数即服务(FaaS)能力,轻松实现页面即时打开,无需搭建传统的Node应用,一个功能可以变成一个服务,开发者可以更纯粹地专注于商业逻辑。FaaS以函数为单位和弹性机制,为SSR应用带来天然的隔离和动态修复能力,可以更好的避免页面之间的交叉污染,或者一些给应用带来致命伤害的边界异常场景。伤害。无需运维、按需执行、弹性伸缩等特性大大降低了SSR应用的开发者门槛。