大并发下 PHP +Laravel 的部署架构应该是怎样的?

2019-05-13 11:23:26 +08:00
 HaroldChen

背景:

  1. 公司的开发语言是 PHP, 大部分业务是 php7+laravel5, 小部分是 php5+laravel4。
  2. 电商类,日常 tcp 并发连接在 1.5W 左右,赶上活动,tcp 连接数短时间会达到 10W+。现在是靠机器去堆,但高峰期还是会看到 php-fpm 经常 cpu 100%,且 php-fpm 的端口健康检测失败。已排除数据库层面的问题。xhprof 之类的代码分析目前暂时没精力去看,以后会关注。
  3. 目前正在进行服务化,已经拆出的服务数量在 10 个左右。

目前部署的架构是每个服务都购买单独的服务器(访问量最大的一个业务,用了 20 台左右的服务器支撑),每台服务器上面部署 Openresty + php-fpm,代码也在每台服务器发布。

现在其实每台服务器的冗余比较严重,非高峰期的负载不需要这么多服务器。所以考虑换一种方式,前端负载均衡(阿里云 SLB ) -> Openresty 集群(每台上都有所有业务域名的配置文件) -> php-fpm 集群 ,每台服务器只负责一个服务的运行。并发量大的时候直接扩容 php-fpm 服务器的个数。

问题:

  1. 想请教下,这种部署方式有问题吗?现在主流的部署结构是怎样的?
  2. 以前的那种部署方式,哪里支撑不住只会影响单个业务。现在这种部署方式如果并发上来,怎么去判断是哪个业务造成的?(查看各个业务的 pv 和 qps?)
  3. 目前也在进行容器化的改造,想问下 php 部署一般是什么形式,sidecar?
7091 次点击
所在节点    程序员
52 条回复
HaroldChen
2019-05-13 15:14:21 +08:00
@realpg 哈哈,其实我也觉得... 但短时间内重构又不太现实,所以只能先从架构上看看了。
zjsxwc
2019-05-13 15:19:21 +08:00
楼主的问题是平时不搞活动时这么多服务器浪费钱,应该怎么省钱。

某些答主的回复是换语言。

233333
keikeizhang
2019-05-13 15:39:33 +08:00
我朋友所在公司开始是 PHP,然后开始前后端分离,等分离完毕,用户开始猛增,然后用 JAVA 去替换频率高的 API,差不多用 1 年多时间,整个项目用 JAVA 重构完毕,中间 PHP 也保持对新功能更新,踩坑修复为 JAVA 提供不错的重构参考。

如果想从根本解决问题,可以参考一下。
keikeizhang
2019-05-13 15:40:50 +08:00
阿里云有突发性服务器,这个可以考虑一下
zfy941
2019-05-13 15:42:01 +08:00
别问 问就是别用 PHP
eluotao
2019-05-13 15:49:16 +08:00
肯定不是 PHP 的问题 这个流量 PHP 完全吃得下 最讨厌说换语言的人 虽然这也是种解决方案.

但你要知道 自己辛辛苦苦 日日夜夜培养出来的孩子 一下说这个不要 再生一个...如有比喻不当 别喷 ..
MakeHui
2019-05-13 15:49:41 +08:00
按你的情况来说,也就弹性扩容比较符合你的需求了
~~高并发场景确实真不应该用 laravel~~
shehuizhuyi
2019-05-13 16:09:07 +08:00
去掉 laravel 这种框架再说高并非
HiCode
2019-05-13 16:09:22 +08:00
laravel 可用于学习,不建议用于实际项目。
csbde
2019-05-13 16:28:30 +08:00
我觉得先优化吧,感觉优化不到位。前面一项目 laravel5 做的,每小时大约 600 万请求,一个请求会有几个到 10 几个的数据库请求,查询居多,写入大约 1/10,有 api 也有 web,一台 5 核 16g 的做主 web,一台 4 核 16g 计算实例做负载平衡,数据库单独服务器。就能撑下来了。前期我们没有优化好,用了大约 8 台做负载。所以语言不是太大的问题,也许用 java 做会有一些收益,但不是决定性的。
dadade
2019-05-13 16:45:01 +08:00
先不考虑换掉 laravel 和 php 问题的,想到的几个思路:
1.从业务出发,你们电商系统最耗费资源的逻辑在哪儿?执行代码耗 cpu 还是其他的?耗费资源的业务单独拆分出来,再优化这个业务,这个业务是否有更好的方案?其他语言或者组件?
2.单个服务器的性能是否已经优化到极致?
3.大流量的应急预案是什么?
avenger
2019-05-13 18:40:50 +08:00
10w 并发要 20 台服务器吗?找到瓶颈在哪才能有优化方案,楼上说换语言的真是站着说话不腰疼
sagaxu
2019-05-13 19:13:49 +08:00
@eluotao 孩子?我觉得拿鞋子类比更合适,鞋子不合脚了,可以改一下,也可以换一双。
realpg
2019-05-13 21:46:38 +08:00
@avenger #32
用 laravel 的话 20 台可能都不够……
akira
2019-05-14 07:37:12 +08:00
如果是要省钱的话 突发性能实例 考虑下
yc8332
2019-05-14 08:49:47 +08:00
可以用常驻进程的方式来提高下性能,或者换个轻量级框架,laravel 是比较有难度
andychen1
2019-05-14 08:51:31 +08:00
可以去网上找找框架性能对比图,你就知道了,(坏笑
yiqiao
2019-05-14 09:43:15 +08:00
@andychen1 关于性能问题,作者本人回复 https://medium.com/@taylorotwell/benchmarking-laravel-symfony-zend-2c01c2b270f8
laravel 确实慢,但是不至于差很多
rapkey
2019-05-14 09:49:22 +08:00
试一下能回复吗?
oneonesv
2019-05-14 09:49:38 +08:00
laravel 那性能 rps 能有 20 ?
和 lumen 比差了不是一点半点

不想换就上 laravel-swoole 几十倍的提升

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

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

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

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

© 2021 V2EX