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

PHP 本身不就是最佳的 serverless 实践吗?

  •  3
     
  •   wuhaoworld · 2021-03-13 23:14:13 +08:00 · 5431 次点击
    这是一个创建于 1351 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PHP 最常用的 FPM 模式,一个 http 请求一个进程处理,请求完成后进程自动销毁,即使代码质量不高,有内存泄露也没关系,反正执行完成后就立即销毁了。

    每个进程之间是独立的,互不干扰也不耦合,访问量大的话就多部署机器,负载均衡打到不同机器上,横向扩展非常容易。

    如果用 PHP 自带的 cookie/session 管理容易出问题,因为一个用户可能被路由到不同机器上,那改用 radis 集群统一管理 session 就好了,唯一要解决的就是数据库负载的问题,这就不是 PHP 的问题了,也是其他语言需要解决的。

    所以 PHP 应用本身就很容易做到「无状态」、「弹性伸缩」的,当然还需要自己手动运维,但我作为新手,部署过多个 PHP 网站 /API 等应用,部署完成后服务器在那放着基本上一年都不会出问题,只要不访问量突然增,基本上是做到「免运维」了,主要还是因为即使代码中有 bug 或内存泄露,请求完成后自动被重置了,错误不会被积累。

    综上,PHP 本身不就是最佳的 serverless 实践吗?各大云厂商都在搞自己的 serverless 平台,看来看去,还是 PHP 原生的机制最好用

    第 1 条附言  ·  2021-03-14 11:08:55 +08:00

    补充一下,serverless 宣称的优点:「无状态」、「弹性伸缩」、「无需运维」等优点,在 PHP 身上已经实现的很好了,或者说很低的成本就能解决掉

    同时加上不同平台的 serverless 服务无法兼容的缺陷(亚马逊的无法迁移到阿里云,阿里云的serverless 无法迁移到腾讯云),PHP 的优势就显得很明显了

    33 条回复    2021-06-16 07:07:13 +08:00
    oott123
        1
    oott123  
       2021-03-13 23:17:24 +08:00 via Android
    PHP 甚至是“函数计算”——每个文件就是一个函数。
    murmur
        2
    murmur  
       2021-03-13 23:17:44 +08:00   ❤️ 7
    你还没懂 serverless 是什么啊,serverless 的终极目标是让你放弃开发去买云服务,这跟语言是没关的

    自己开发,自己建平台,你给我逼急了老子卷着数据库和 docker 就走人

    换成 serverless,平台是别人的,服务是别人的,你只有业务,换其他云服务商,适配死你
    abersheeran
        3
    abersheeran  
       2021-03-13 23:24:03 +08:00 via Android
    巧了,我昨晚还发 QQ 空间说这个。可惜 php 生不逢时,现在没多少人用了。
    FaceBug
        4
    FaceBug  
       2021-03-13 23:25:02 +08:00
    @murmur

    serverless = PHP+虚拟主机

    哈哈哈哈
    back0893
        5
    back0893  
       2021-03-13 23:26:24 +08:00
    好像也没毛病
    miao666
        6
    miao666  
       2021-03-13 23:30:24 +08:00
    那么问题来了,PHP 是不是世界上最好的语言?😜
    AxEqaq
        7
    AxEqaq  
       2021-03-13 23:35:48 +08:00
    groovy 有话要说
    flashrick
        8
    flashrick  
       2021-03-13 23:38:34 +08:00
    小时候作为一名县城居民,来省会看到高层住宅觉得很高大上
    现在才知道它是为了提高土地利用率这个目的的手段
    huluhulu
        9
    huluhulu  
       2021-03-13 23:50:00 +08:00 via iPhone
    php 是世界上最好的语言,真的
    westoy
        10
    westoy  
       2021-03-13 23:50:49 +08:00   ❤️ 1
    做 serverless 平台还需要一整套完善的中间件机制, 拿 php 做 PaaS 也蛮多的啊, 国内的 SAE,php 亲爹 Zend 的 phpcloud, 不都跪了么?

    而且 php 那个是伪热更新, 文件级的修改对于项目来说是非原子性, 比如一次改三十个文件, 前几个文件修改后正好有个请求同时触发了 include 部分旧文件+新文件,erlang 那边的 OTP 的热重启模块机制对于请求来说只会是访问到全部旧的或者全部新的。 只是 PHP 一开始作为模板语言并不容易触发问题, 后来随着项目越来越大,apc 、eaccelerator 、opcache 的引入导致文件级修改也容易产生一点问题, 实际还是要以项目为颗粒重新 graceful 重启的, 比起其他语言方案其实并没有太大优势。phpcloud 当初涉及修改, 也是整个项目重启加载最新版本的。
    young1lin
        11
    young1lin  
       2021-03-13 23:52:09 +08:00   ❤️ 1
    那改用 radis 集群统一管理 session 就好了

    radis 是什么?是 redis 吗?
    litel
        12
    litel  
       2021-03-13 23:52:48 +08:00   ❤️ 1
    牛头不对马嘴,serverless 只的是省去环境配置。
    你说的这些,nodejs 能做,python 也能做。脚本语言都能做。但是小功能一般直接用这些语言写了放 serverless,不需要配环境而已。
    0ZXYDDu796nVCFxq
        13
    0ZXYDDu796nVCFxq  
       2021-03-14 00:05:47 +08:00
    看得出,楼主只写过 web,哈哈哈
    no1xsyzy
        14
    no1xsyzy  
       2021-03-14 01:55:57 +08:00
    PHP 早前就有托管空间……

    但是, #2 说得很对,serverless 不止是 OPless,更是包括整个生态的绑定。
    据说 Parler 就是吃了生态绑定的亏(是不是 serverless 另说,太依赖 AWS 生态了)
    dzdh
        15
    dzdh  
       2021-03-14 02:04:20 +08:00
    是不是 serverless 决定于你写不写、开不开发后端代码和相关业务。

    你参与了后端:不是 serverless
    你没参与后端,整个项目、公司、业务所有地方都没有跟后端神马数据库、服务器、带宽、安全有定点关系,全是用的三方服务(如 leancloud ),恭喜你,你是 serverless 了。
    dzdh
        16
    dzdh  
       2021-03-14 02:04:56 +08:00
    @dzdh learncloud
    qiayue
        17
    qiayue  
       2021-03-14 06:29:20 +08:00
    @dzdh #16 你在 #15 写的是对的
    https://www.leancloud.cn/
    love
        18
    love  
       2021-03-14 08:47:15 +08:00 via Android
    果然是老中医在山顶吗, 古代的 web 服务都是无状态的,一个请求过来拉一个新进程,当时叫 CGI 。也是跨语言的。
    xuanbg
        19
    xuanbg  
       2021-03-14 09:13:35 +08:00
    serverless 是云服务商把服务藏起来不给你看见。你这用 PHP,服务都露出来了,哪里 serverless 了?
    sun019
        20
    sun019  
       2021-03-14 10:10:14 +08:00
    建个站,或者一个小应用( APP 、小程序),用 php 是最简单。
    开发简单,运维简单。
    wuhaoworld
        21
    wuhaoworld  
    OP
       2021-03-14 11:02:29 +08:00
    @young1lin 抱歉拼错了,是 redis
    lewinlan
        22
    lewinlan  
       2021-03-14 11:08:42 +08:00 via Android
    啊这,一个请求一个进程,这还自豪了?
    firefox12
        23
    firefox12  
       2021-03-14 11:33:13 +08:00
    本质上没啥区别,SAE GEC 已经证明 纯的 PAAS 是没前途的,因为要纯的把业务切开,还做不到,现在的互联网架构,业务组件 还没办法做到这么纯的 PAAS 。

    现在的 PAAS 包括 K8S 都是不纯的 Iaas 的改进, 而 Serverless 更加是个改进而已。PHP 的确可以算 Serverless 的一种表现,它用完销毁,不保存上下文,可以水平扩展。但是 这种用完销毁的模式 不是远古状态吗?现在不是都不销毁了吗? 为了性能, 它活成了 自己最讨厌的样子。
    westoy
        24
    westoy  
       2021-03-14 12:28:27 +08:00
    「无状态」 =》 大量依托中间件, 所有语言都能做到这种

    「弹性伸缩」 = 》 这个要看架构的, 哪有脱离业务的弹性伸缩, 这和语言有什么关系?

    「无需运维」 =》
    我还是再强调一下, php 并不是热更新的, 见#10
    以前 php 还没火的时候
    前端跑个 haproxy, 有钱的上个 F5
    php 环境在 /app
    每次修改生成一个 /app-$version 的目录
    然后修改 /app 的软链接, 再重启 apache 、spawn-fcgi 之类的东西
    基本是部署的共识
    如果你觉得这套自动化流程叫「无需运维」, 那所有语言都行

    如果你指的还是在线热修改 php 文件
    那么这么说吧,Zend 官方搞的 phpcloud 在你推送修改后, 几秒内访问出现的都是一个提示应用正在重启的页面, 都不敢用这个特性
    你敢在一个有流量的生产环境这么玩儿, 我愿称你一声壮士

    「容易迁移」 =》
    serverless 的核心是中间件啊, 各家云服务商又不会约好了用同一套标准的
    如果你指的是底层 db 、cache 的 api, 那所有语言都可以啊
    abersheeran
        25
    abersheeran  
       2021-03-14 12:34:47 +08:00 via Android
    @westoy 是的。这个热更新我也在 Py 上重现过,发现一次更新的原子性很难保证。
    rekulas
        26
    rekulas  
       2021-03-14 14:44:16 +08:00
    现阶段的 serverless 用的还不够省心,不够灵活,适配麻烦,也许只是一个过渡方案,说不定几年后有更优解。。
    例如 。。developmentless 😹😹😹😹
    charlie21
        27
    charlie21  
       2021-03-14 16:49:46 +08:00
    在 PaaS ( platform as a service ) 的基础之上 进一步缩水 才有的 serverless 。若你对服务器有完全的控制权,那么 是吧 你就是在用服务器 至于你怎么大材小用都无法改变你对服务器有完全的控制权的事实,服务器对你是可见的 则这就不是 serverless 。

    应用端细节在第五层,服务器控制权在大概第三层的位置吧,第五层如何不会影响第三层如何 因为它们不在同一层上,第三层也对第五层是不可见的,因为中间甚至隔着第四层。

    无服务器计算 (serverless) 和平台即服务 (PaaS) 有何不同
    https://www.cloudflare.com/zh-cn/learning/serverless/glossary/serverless-vs-paas

    lz 词汇量有问题
    leeg810312
        28
    leeg810312  
       2021-03-14 17:46:57 +08:00 via Android   ❤️ 1
    lz 都没有搞懂 serverless 的正确定义就在下结论。一个平台,从开发者角度基础设施是透明的,才是 serverless,你说的只是 stateless
    zhao372716335
        29
    zhao372716335  
       2021-03-14 19:45:14 +08:00
    姐是老中医。。
    lihongming
        30
    lihongming  
       2021-03-15 01:52:21 +08:00 via iPhone
    说个最基本的吧——AWS 的 Serverless 可不只是 Lambda,它的数据库也是 Serverless 的,楼主这 PHP 就不行了吧?
    enki0423
        31
    enki0423  
       2021-03-15 10:18:34 +08:00
    主要是钱的问题,serverless 能让云服务商单位时间的服务费收的更高,同时服务的用户更多,还能让你觉得自己最终付的钱更少。
    dzdh
        32
    dzdh  
       2021-03-16 10:00:42 +08:00
    @qiayue :doge:
    dsnake1984
        33
    dsnake1984  
       2021-06-16 07:07:13 +08:00
    thinkphp 热更新 搞死了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1254 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.