PHP 部分改造为 go 与全部改造为 go 是否会提升性能?

2023-06-30 15:57:07 +08:00
 dandankele
由于 php-fpm 是以进程为单位提供服务的,大量 php-fpm 进程运行并接收客户端请求,当 php-fpm 极其依赖缓存、数据库等外部服务时,php-fpm 与外部服务之间的网络连接交互也会多,导致网络 IO 频繁,进而导致 php-fpm 进程间的频繁切换问题。这种情况经常在监控上显示为进程的墙钟时间比较大,cpu 消耗时间比较小。

所以在考虑如果用 go 改造的话,使用 go 去连接缓存、数据库等外部服务,php-fpm 充当纯前端 SSR 从 go 那里获取数据渲染页面。那么,在服务器资源配置不变的情况下,请求量与之前不变的情况下,应用性能是否会有所提高?这里主要指 RT 响应时间是否会缩短?

但是我觉得假设改造前是 100 个 fpm 进程,改造后还是 100 个 fpm 进程,并且还要增加一个 go 进程,100 个 fpm 依然要与 go 连接,依然会在 100 个 fpm 进程之间切换进程,所以在资源配置不变的情况下,RT 响应时间应该也不会变化太大吧?
难道需要 go 把 php-fpm 全部替代了?
9789 次点击
所在节点    Go 编程语言
103 条回复
japeth
2023-06-30 17:51:05 +08:00
@dandankele 相同配置下 qps 升了
dw2693734d
2023-06-30 17:52:53 +08:00
go 写业务我觉得还行啊
leonshaw
2023-06-30 17:53:06 +08:00
@dandankele
要确认进程等待时间是在等待 IO 还是等待调度(大致看一下 CPU 利用率和 load ,做 profiling )。考虑把一些同步阻塞的 IO 异步化。
Bazingal
2023-06-30 17:53:28 +08:00
@japeth 说不定用 php 重写一遍 qps 也升了
huangwei8ku
2023-06-30 17:54:12 +08:00
golang 发展到如今,其实在微服务领域已经有一些不错的方案了,字节也好,bilibili 也好。都有开源的项目。我局的吧,如果你要用 golang 来重构,心里上要接受一些不同,甚至是认知上的改变,比如我很多同事,以前搞 java 的,喜欢了封装继承多态那套东西,用了 golang 水土不服了很长一段时间。但是,当你能驾驭 golang 这批烈马之后,你会发现,以前你看不上的 2 核 4G 的 ESC 原来也可以这么顺眼。还有就是,当我们进入了 golang 的世界后。你写微服务方式大概率都会改变。
japeth
2023-06-30 18:00:08 +08:00
@Bazingal 你可以试试哈哈哈哈哈
zhangtest
2023-06-30 18:06:30 +08:00
我们公司项目日活百万+,目前用的 php 绰绰有余,一些业务 PHP 不好搞用的 GO ,比如某个时间点要推送几十万营销消息,go 协程速度才能满足需求。
adoal
2023-06-30 18:11:23 +08:00
“从 A 语言换为 B 语言导致性能提升 XYZ 倍”这种事一般不是因为换语言本身,而是换语言这个大动作不可能以对旧版系统慢慢重构的方式进行,那么本质上就是重写一遍,那么就要重新架构,重新思考,“终于特喵的有机会偿还技术债了” ^_^
coderxy
2023-06-30 18:28:57 +08:00
用 go 写业务挺爽的, 就是你原来是 php ,迁移到 go 强类型,数据库等各个方面很可能有字段类型不一致的坑。
p1gd0g
2023-06-30 18:30:10 +08:00
这不就是我司吗,从 php 逐渐迁移到 go ,机器数量少了 90%(当然一部分原因是旧 php 代码写的太烂)
yanue
2023-06-30 18:42:01 +08:00
go 写业务主要是 orm 不顺畅, 其他很爽的
mooniitt
2023-06-30 18:49:56 +08:00
F 墙( base64 ) aHR0cHM6Ly9jaG5yb3V0ZS5jb20vYXV0aC9yZWdpc3Rlcj9jb2RlPUZUSzZJRQ==
OMGZui
2023-06-30 18:59:53 +08:00
业务还是 php 吧,一些要求高性能的点可以切到 go
happy321
2023-06-30 19:34:09 +08:00
@yanue 请问这个 orm 不顺畅 具体是哪些问题啊?
vmlinz
2023-06-30 19:44:32 +08:00
试试 roadrunner ?
vmlinz
2023-06-30 19:47:48 +08:00
jiangshanmeta
2023-06-30 20:00:58 +08:00
增加性能我不确定
但是能增加就业
happy321
2023-06-30 20:04:28 +08:00
PHP 哪有你说的这么高级,有进程切换都笑哭了。。应该就是你的 io 慢吧? 下面是网上找的:
1 、nginx 和 php-fpm 都是多进程,一个进程只有一个线程;
2 、nginx 一个线程是非阻塞/io 多路复用/epoll 模型,将请求分发后无需等待,仅监听回调结果
3 、php-fpm 一个线程是阻塞模型,必须等待该客户端请求 php 服务端返回数据,下一个 nginx 发过来的请求才能被受理
vmlinz
2023-06-30 20:04:39 +08:00
https://habr.com/en/articles/646397/

nginx php-fpm
nginx unit
Laravel octane(roadrunner, swoole)
Huelse
2023-06-30 20:27:04 +08:00
说实话不如加机器,除非重构

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/953035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX