V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HiCode
V2EX  ›  PHP

看到 swoole 又出黑料,忍不住分享一个 PHP 高并发方案

  •  
  •   HiCode · 2020-09-04 01:13:18 +08:00 · 2970 次点击
    这是一个创建于 1573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    坦白说,今天其实在看 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!

    blless
        1
    blless  
       2020-09-04 01:30:40 +08:00 via Android
    老实说,想不到动态语言在工程实践中有什么保障性可言。除非项目都是一个人写,不然动态语言自由度实在是太可怕了。就觉得没有啥特殊需求,后端干嘛非得死磕一些动态语言呢?
    eslizn
        2
    eslizn  
       2020-09-04 01:33:30 +08:00
    serverless 也是靠堆机器
    正途高性能方案有 reactphp/polarphp
    eslizn
        3
    eslizn  
       2020-09-04 01:34:37 +08:00
    @blless 有很多短平快接口逻辑,及大多数适用 serverless 的场景都适合用动态语言
    HiCode
        4
    HiCode  
    OP
       2020-09-04 01:38:12 +08:00
    @blless

    对于技术人员来说,追求工程化无可厚非,而现实就是,大部分项目还没大到愿意为了工程化而降低效率。

    这个世界很多事情都是草台班子搞出来的,接受这一点就理解为什么“动态语言会一直有市场”。
    HiCode
        5
    HiCode  
    OP
       2020-09-04 01:39:28 +08:00
    @eslizn 你也可以在 serverless 里面开启 reactphp/polarphp,所有的扛高并发最终都是“靠堆机器”——谁也不例外。
    eslizn
        6
    eslizn  
       2020-09-04 01:46:46 +08:00
    @HiCode “谁也不例外”这个结论不清楚你怎么得到的,反正我的经验是在海量服务的环境下,单机提升 10 倍以上带来的人力成本远低于机器成本。
    ysc3839
        7
    ysc3839  
       2020-09-04 02:27:11 +08:00 via Android
    但支持 PHP 的 Serverless 平台很少吧?搞不好会被锁死在某个平台上。还是选择大多数平台都支持的 Node.js 更为保险。
    HiCode
        8
    HiCode  
    OP
       2020-09-04 03:13:47 +08:00
    @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 倍差距的。

    懒得回了。
    HiCode
        9
    HiCode  
    OP
       2020-09-04 03:21:23 +08:00
    @ysc3839 唉,这个项目是一个代理层,代理层,代理层。

    没要求你按特定方式去写 PHP 代码,按传统 web 开发方式去开发你的系统即可,这个代理层本身会解决 Serverless 环境问题。

    所以不存在锁死在某个平台上的问题,哪天你想换其他平台了,阿里的函数计算本身有提供类似的代理层,亚马逊的平台可以参考 Laravel Vapor,你的业务系统代码依然可以拿到其他平台上去运行。
    HiCode
        10
    HiCode  
    OP
       2020-09-04 03:23:25 +08:00
    在 PHP 技术圈最尴尬的事情就是,你说一个技术实现,一个开发思路的时候,总有很多人喜欢在不了解基础背景知识的情况下,来参与讨论。不是不欢迎这种讨论,只是是觉得很尴尬。
    ysc3839
        11
    ysc3839  
       2020-09-04 03:24:08 +08:00 via Android
    @HiCode 没明白你的意思,Serverless 平台不提供 PHP 环境怎么运行呢?
    HiCode
        12
    HiCode  
    OP
       2020-09-04 03:29:22 +08:00
    @ysc3839 你去看 Laravel Vapor 的实现,亚马逊的平台是不提供 PHP 环境的。然后 Laravel Vapor 把 PHP 的可执行文件打包上传,再通过 node 或 python 去启动上传的 PHP 可执行文件。

    Serverless 简单点可以理解为,提供了一个自动扩容的 linux 环境。
    ysc3839
        13
    ysc3839  
       2020-09-04 03:43:30 +08:00 via Android
    @HiCode 多谢指教!从理论上来讲确实有可能可以实现,不过关键在于平台是否允许执行可执行文件吧?这个还不好保证。
    刚刚搜索了一下 "Laravel Vapor" on "firebase",似乎并没有成功案例,实际使用中可能还是受 Laravel Vapor 所支持的平台限制的。
    HiCode
        14
    HiCode  
    OP
       2020-09-04 04:16:39 +08:00
    @ysc3839 你可以按这个思路去试一下在 Google Cloud Functions 上实现一个代理层。不排除谷歌真的你说的禁止执行可执行文件。
    eslizn
        15
    eslizn  
       2020-09-04 10:46:32 +08:00
    @HiCode 你先看清楚你这个 2.97 倍性能是基于什么逻辑做的比较,我说的这些解决方案都是通过非阻塞 io 带来的高性能,在我实践过程中至少带来了 10 倍吞吐量的提升。serverless 也不是银弹,同样有它自己的缺点
    HiCode
        16
    HiCode  
    OP
       2020-09-04 13:10:32 +08:00
    @eslizn 行行行,你喜欢就好,你要是真的有点击项目链接进去看,就知道我这个项目针对的是什么场景,项目文档里已经很明确说明适用场景了。不看就来评论的,我也懒得回了,你自己喜欢就好,继续吧!
    agdhole
        17
    agdhole  
       2020-09-09 19:32:57 +08:00   ❤️ 1
    @ysc3839 #13 serverless 的 php 实现可以参考: https://github.com/juicyfx/vercel-php
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3472 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:39 · PVG 12:39 · LAX 20:39 · JFK 23:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.