坦白说,今天其实在看 deno 的资料,一直有考虑换语言了,或是 js,或是 lua
回归正题,这个高并发方案是基于 Serverless,参考 Laravel Vapor 的思路:
利用 Serverless 开启一个 php-cgi 服务,再将函数接收到的请求数据,转发给 php-cgi 去处理,拿到响应数据后再返回给浏览器,这样就可以在 Serverless 继续以传统 PHP WEB 的方式来开发,无需做多余的适配。
项目地址在: https://gitee.com/haimadongli001/scf_php_cgi_proxy
用这个方案,目前很多 PHP 项目(要兼容 PHP 7.2 )可以无缝切换到 Serverless 服务上运行,轻松扛高并发。
当然,代码质量导致的系统缓慢和数据库链接数限制问题,就需要开发者自己“加钱”处理。
其他吐槽:
用了 PHP 好几年了,抄过 MVC 框架,写过 CMF 系统(自用不开源,上百项目使用过),玩过 PHP GUI 扩展( https://gitee.com/haimadongli001/php-iup )。其实编程能力到了一定程度后,语言的依赖性是非常小的,影响我们更换语言的阻力主要在自身积累和语言生态。
接下来先努力尝试在前端中切换到 lua (基于 https://fengari.io/ ),成功后就轮到后端来切换。
就这么定了,提前说再见,PHP!
1
blless 2020-09-04 01:30:40 +08:00 via Android
老实说,想不到动态语言在工程实践中有什么保障性可言。除非项目都是一个人写,不然动态语言自由度实在是太可怕了。就觉得没有啥特殊需求,后端干嘛非得死磕一些动态语言呢?
|
2
eslizn 2020-09-04 01:33:30 +08:00
serverless 也是靠堆机器
正途高性能方案有 reactphp/polarphp |
4
HiCode OP |
5
HiCode OP @eslizn 你也可以在 serverless 里面开启 reactphp/polarphp,所有的扛高并发最终都是“靠堆机器”——谁也不例外。
|
6
eslizn 2020-09-04 01:46:46 +08:00
@HiCode “谁也不例外”这个结论不清楚你怎么得到的,反正我的经验是在海量服务的环境下,单机提升 10 倍以上带来的人力成本远低于机器成本。
|
7
ysc3839 2020-09-04 02:27:11 +08:00 via Android
但支持 PHP 的 Serverless 平台很少吧?搞不好会被锁死在某个平台上。还是选择大多数平台都支持的 Node.js 更为保险。
|
8
HiCode OP @eslizn 唉,自己看 Serverless 的技术实现,你想强调性能的话,你也可以基于 Serverless 去启动 reactphp/polarphp 服务,你可以把 Serverless 当成是自动扩容系统。先去熟悉后再说。
然后,看看这个数据 https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune&l=zik073-f 哪怕是 swoole,也只有原生 PHP 2.97 倍的性能优势,除非你选用一个特别慢的 PHP 框架,不然达不到 10 倍差距的。 懒得回了。 |
9
HiCode OP @ysc3839 唉,这个项目是一个代理层,代理层,代理层。
没要求你按特定方式去写 PHP 代码,按传统 web 开发方式去开发你的系统即可,这个代理层本身会解决 Serverless 环境问题。 所以不存在锁死在某个平台上的问题,哪天你想换其他平台了,阿里的函数计算本身有提供类似的代理层,亚马逊的平台可以参考 Laravel Vapor,你的业务系统代码依然可以拿到其他平台上去运行。 |
10
HiCode OP 在 PHP 技术圈最尴尬的事情就是,你说一个技术实现,一个开发思路的时候,总有很多人喜欢在不了解基础背景知识的情况下,来参与讨论。不是不欢迎这种讨论,只是是觉得很尴尬。
|
12
HiCode OP @ysc3839 你去看 Laravel Vapor 的实现,亚马逊的平台是不提供 PHP 环境的。然后 Laravel Vapor 把 PHP 的可执行文件打包上传,再通过 node 或 python 去启动上传的 PHP 可执行文件。
Serverless 简单点可以理解为,提供了一个自动扩容的 linux 环境。 |
13
ysc3839 2020-09-04 03:43:30 +08:00 via Android
@HiCode 多谢指教!从理论上来讲确实有可能可以实现,不过关键在于平台是否允许执行可执行文件吧?这个还不好保证。
刚刚搜索了一下 "Laravel Vapor" on "firebase",似乎并没有成功案例,实际使用中可能还是受 Laravel Vapor 所支持的平台限制的。 |
14
HiCode OP @ysc3839 你可以按这个思路去试一下在 Google Cloud Functions 上实现一个代理层。不排除谷歌真的你说的禁止执行可执行文件。
|
15
eslizn 2020-09-04 10:46:32 +08:00
@HiCode 你先看清楚你这个 2.97 倍性能是基于什么逻辑做的比较,我说的这些解决方案都是通过非阻塞 io 带来的高性能,在我实践过程中至少带来了 10 倍吞吐量的提升。serverless 也不是银弹,同样有它自己的缺点
|
16
HiCode OP @eslizn 行行行,你喜欢就好,你要是真的有点击项目链接进去看,就知道我这个项目针对的是什么场景,项目文档里已经很明确说明适用场景了。不看就来评论的,我也懒得回了,你自己喜欢就好,继续吧!
|
17
agdhole 2020-09-09 19:32:57 +08:00 1
@ysc3839 #13 serverless 的 php 实现可以参考: https://github.com/juicyfx/vercel-php
|