背景:
目前部署的架构是每个服务都购买单独的服务器(访问量最大的一个业务,用了 20 台左右的服务器支撑),每台服务器上面部署 Openresty + php-fpm,代码也在每台服务器发布。
现在其实每台服务器的冗余比较严重,非高峰期的负载不需要这么多服务器。所以考虑换一种方式,前端负载均衡(阿里云 SLB ) -> Openresty 集群(每台上都有所有业务域名的配置文件) -> php-fpm 集群 ,每台服务器只负责一个服务的运行。并发量大的时候直接扩容 php-fpm 服务器的个数。
问题:
![]() | 1 jowan 2019-05-13 11:48:23 +08:00 可以尝试下抛弃 php-fpm 使用 Swoole 加速一下 Laravel qps 会有很明显的提升 第三方包有 LaravelS 无侵入式的 成本最小 |
![]() | 2 mamahaha 2019-05-13 11:59:26 +08:00 ![]() 很多服务器不是可以按小时计费吗?高峰期加点按小时计费的啊。 |
3 KgM4gLtF0shViDH3 2019-05-13 12:55:04 +08:00 via iPhone 用 go 重构 |
![]() | 4 Varobjs 2019-05-13 13:00:41 +08:00 好奇这么重大的决定,会让一个到 v2 上找解决方案的人来搞吗,/233 |
![]() | 6 xrlin 2019-05-13 13:17:05 +08:00 via iPhone 并量这么大?哪家大公司? |
7 HaroldChen OP @mamahaha 现在考虑的是上述两种部署方式怎么去选。 |
8 HaroldChen OP @Varobjs 哈哈,只是想拓宽一下思路,看看大家怎么做的,取长补短。 |
9 HaroldChen OP @jowan thx,从语言框架上优化性能短期可能不会考虑。部署的思路上面有推荐吗? |
10 myvyang 2019-05-13 14:02:39 +08:00 1. 负载均衡的集群挂了的话会导致全部业务挂掉。因为负载均衡集群的配置都是 copy 的,某些 BUG 会导致全部 hang 住。但是应该大公司业务都走这种模式的,方便管控。 2. 查看各个业务的 pv 和 qps? 每个服务的 API 记录下调用量,做个大盘,除了看请求的暴增,更有意义的是,如果交易下跌,可以立马看到是哪出了问题。 |
![]() | 11 Immortal 2019-05-13 14:03:23 +08:00 好奇你们这边数据库的架构 前面 20 台 php 那数据库呢 几台 主从和缓存架构 |
12 dylan 2019-05-13 14:18:42 +08:00 用 Docker 集群部署。或者做阿里云的 ECS 自动化部署,需要的时候就自动增加服务器。 |
13 polymerdg 2019-05-13 14:23:05 +08:00 比好奇 是怎的 一般 瓶都在 |
![]() | 14 sagaxu 2019-05-13 14:26:33 +08:00 via Android 不要问,问就是够浪 |
![]() | 15 realpg PRO |
16 HaroldChen OP @myvyang thx, 我也觉得集群模式方便管理及扩缩容。服务器上基础组件的版本都是一致且运行了很长时间的,所以 bug 这个问题就不在考虑范围内了。 |
17 yzhfd 2019-05-13 14:58:38 +08:00 单台服务器的极限是多少?我觉得架构是其次的,主要是看瓶颈在哪?有针对性的优化。 如果是活动的话,10W 的并发,是否考虑用缓存中间件?个人感觉 20 台机器是有一定浪费的。 |
18 HaroldChen OP @realpg 谢谢理解,您说的对。想看看大家遇到这类问题时会怎么考虑,每一句话都可能是一个新的思路。 |
![]() | 19 realpg PRO ![]() @HaroldChen #18 这么大规模还用 laravel 真不如 java 了…… 我一直是反 laravel 这种重型框架的 真要这么开发还不如用 java 去 性能更高 轮子更多 开发更快 把 PHP 的优点严重抑制 弄得更像别人 |
20 HaroldChen OP @yzhfd thx,性能分析这块确实要做。每次并发量上来,php-fpm 一定是 cpu 100%的。缓存目前涉及到的有 cdn, lua, opcache, redis。 |
21 HaroldChen OP @realpg 哈哈,其实我也觉得... 但短时间内重构又不太现实,所以只能先从架构上看看了。 |
![]() | 22 zjsxwc 2019-05-13 15:19:21 +08:00 楼主的问题是平时不搞活动时这么多服务器浪费钱,应该怎么省钱。 某些答主的回复是换语言。 233333 |
![]() | 23 keikeizhang 2019-05-13 15:39:33 +08:00 我朋友所在公司开始是 PHP,然后开始前后端分离,等分离完毕,用户开始猛增,然后用 JAVA 去替换频率高的 API,差不多用 1 年多时间,整个项目用 JAVA 重构完毕,中间 PHP 也保持对新功能更新,踩坑修复为 JAVA 提供不错的重构参考。 如果想从根本解决问题,可以参考一下。 |
![]() | 24 keikeizhang 2019-05-13 15:40:50 +08:00 阿里云有突发性服务器,这个可以考虑一下 |
![]() | 25 zfyime 2019-05-13 15:42:01 +08:00 别问 问就是别用 PHP |
![]() | 26 eluotao 2019-05-13 15:49:16 +08:00 ![]() 肯定不是 PHP 的问题 这个流量 PHP 完全吃得下 最讨厌说换语言的人 虽然这也是种解决方案. 但你要知道 自己辛辛苦苦 日日夜夜培养出来的孩子 一下说这个不要 再生一个...如有比喻不当 别喷 .. |
27 MakeHui 2019-05-13 15:49:41 +08:00 按你的情况来说,也就弹性扩容比较符合你的需求了 ~~高并发场景确实真不应该用 laravel~~ |
![]() | 28 shehuizhuyi 2019-05-13 16:09:07 +08:00 去掉 laravel 这种框架再说高并非 |
29 Q4h7388nR28s95fa 2019-05-13 16:09:22 +08:00 ![]() laravel 可用于学习,不建议用于实际项目。 |
30 csbde 2019-05-13 16:28:30 +08:00 via iPad 我觉得先优化吧,感觉优化不到位。前面一项目 laravel5 做的,每小时大约 600 万请求,一个请求会有几个到 10 几个的数据库请求,查询居多,写入大约 1/10,有 api 也有 web,一台 5 核 16g 的做主 web,一台 4 核 16g 计算实例做负载平衡,数据库单独服务器。就能撑下来了。前期我们没有优化好,用了大约 8 台做负载。所以语言不是太大的问题,也许用 java 做会有一些收益,但不是决定性的。 |
31 dadade 2019-05-13 16:45:01 +08:00 先不考虑换掉 laravel 和 php 问题的,想到的几个思路: 1.从业务出发,你们电商系统最耗费资源的逻辑在哪儿?执行代码耗 cpu 还是其他的?耗费资源的业务单独拆分出来,再优化这个业务,这个业务是否有更好的方案?其他语言或者组件? 2.单个服务器的性能是否已经优化到极致? 3.大流量的应急预案是什么? |
![]() | 32 avenger 2019-05-13 18:40:50 +08:00 via iPhone 10w 并发要 20 台服务器吗?找到瓶颈在哪才能有优化方案,楼上说换语言的真是站着说话不腰疼 |
![]() | 35 akira 2019-05-14 07:37:12 +08:00 如果是要省钱的话 突发性能实例 考虑下 |
36 yc8332 2019-05-14 08:49:47 +08:00 ![]() 可以用常驻进程的方式来提高下性能,或者换个轻量级框架,laravel 是比较有难度 |
![]() | 37 andychen1 2019-05-14 08:51:31 +08:00 via iPhone 可以去网上找找框架性能对比图,你就知道了,(坏笑 |
![]() | 38 yiqiao 2019-05-14 09:43:15 +08:00 @andychen1 关于性能问题,作者本人回复 https://medium.com/@taylorotwell/benchmarking-laravel-symfony-zend-2c01c2b270f8 laravel 确实慢,但是不至于差很多 |
39 rapkey 2019-05-14 09:49:22 +08:00 试一下能回复吗? |
![]() | 40 oneonesv 2019-05-14 09:49:38 +08:00 laravel 那性能 rps 能有 20 ? 和 lumen 比差了不是一点半点 不想换就上 laravel-swoole 几十倍的提升 |
41 mooncakejs 2019-05-14 09:52:54 +08:00 via iPhone @realpg 真诚的问,最近用 JAVA 写个小项目,JAVA 有像 laravel migration 这么方便的轮子吗, |
![]() | 42 realpg PRO @mooncakejs #41 不知道 我不写 java 我写 PHP |
![]() | 43 我猜楼主不是开发,估计是 SRE,动不了框架业务逻辑 ![]() |
44 haohappy 2019-05-14 11:51:02 +08:00 @keikeizhang “用户开始猛增,然后用 JAVA 去替换频率高的 API ” 你好 换 JAVA 主要是因为性能吗 还是其他原因? |
45 Caballarii 2019-05-14 13:23:38 +08:00 @mooncakejs 不懂 laravel,写 java 现在就 springboot 一把梭 |
46 zibber 2019-05-14 14:01:11 +08:00 nginx 日志 awk 查一下看一下接口耗时,定向排查一下 nginx 的并发数 和 php-fpm 的进程数要优化一下 |
![]() | 47 fuxkcsdn 2019-05-14 14:22:44 +08:00 用容器部署避免资源浪费 不好改动语言或者语言框架的话,就只能是活动期间加资源硬抗了 语言改不动也建议改框架,讲真,用过一阵 laravel 后我一直在想,php 都写成这样了,我干嘛不用 java ?比如上面说的 SpringBoot 一把梭,有点 java 基础开发起来肯定比 laravel 快(单从 ide 支持方面,反正调试需要跟踪 laravel 源码的时候,我是真想屎)。20 台服务器的前提下,性能应该也能甩 laravel 一条街以上 |
![]() | 48 keikeizhang 2019-05-14 14:41:02 +08:00 @haohappy 性能是当时的一部分原因,还有就是 PHP 优秀的程序员少,未来项目扩大,需要的系统肯定有更高的稳定性和性能,显然这方面 JAVA 更好一些。 |
![]() | 49 fghjghf 2019-05-14 15:09:17 +08:00 不是写 php 的。但 10W+ 并发量不算大吧。socket 吞吐量从来不是瓶颈,瓶颈都是出在 IO 上,主机分配请求、多机读写分离,缓存。注意来者不拒的 io 多路复用,请求过多击穿数据库哦 |
50 hasdream 2019-05-14 16:12:29 +08:00 ![]() php 特性短连接,连接数据库短连接,连接 redis 短连接, 连接 mysql 和 redis 都有持久连接的方法,实际 php 的长连接不是特别靠谱(基于 php-fpm 的), 优化的话 1. 使用 Swoole 替代 php-fpm,使用 swoole 要考虑资源回收(关闭文件,请求连接池用完释放等等 我知道 php 是最牛逼的语言,写程序不需要考虑资源释放。) 2. 暴力优化 php-fpm 和 Openresty 分离 php-fpm 机器开启 tcp 快速回收,tcp 时间戳, Openresty 机器开启开启 tcp 时间戳不开 tcp 快速回收。 开启快速回收 对 NAT 网络环境有概率问题, 局域网内没啥问题(我没测试过). |
51 mandy0119 2019-05-14 18:33:29 +08:00 @avenger 老哥,20 台抗 10 万并发很菜吗。。。我看他意思是一个频繁调用的业务就要 20 台服务器。 我是用 java 的,这边服务器比较差,2C4G 的机器 抗 2K 并发就满负荷了,业务逻辑还极其简单 |
![]() | 52 xman99 2019-05-15 08:51:56 +08:00 via iPhone 考虑下用轻量级 lume 框架,替代一些高频接口。优化下性能,lavavel 并发不高情况下,其实短板不大 |