背景:
目前部署的架构是每个服务都购买单独的服务器(访问量最大的一个业务,用了 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 1
很多服务器不是可以按小时计费吗?高峰期加点按小时计费的啊。
|
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
不要问,问就是够浪
|
16
HaroldChen OP @myvyang thx, 我也觉得集群模式方便管理及扩缩容。服务器上基础组件的版本都是一致且运行了很长时间的,所以 bug 这个问题就不在考虑范围内了。
|
17
yzhfd 2019-05-13 14:58:38 +08:00
单台服务器的极限是多少?我觉得架构是其次的,主要是看瓶颈在哪?有针对性的优化。 如果是活动的话,10W 的并发,是否考虑用缓存中间件?个人感觉 20 台机器是有一定浪费的。
|
18
HaroldChen OP @realpg 谢谢理解,您说的对。想看看大家遇到这类问题时会怎么考虑,每一句话都可能是一个新的思路。
|
19
realpg 2019-05-13 15:06:20 +08:00 2
@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
zfy941 2019-05-13 15:42:01 +08:00
别问 问就是别用 PHP
|
26
eluotao 2019-05-13 15:49:16 +08:00 5
肯定不是 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
HiCode 2019-05-13 16:09:22 +08:00 1
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 1
可以用常驻进程的方式来提高下性能,或者换个轻量级框架,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 2019-05-14 10:26:15 +08:00
@mooncakejs #41
不知道 我不写 java 我写 PHP |
43
zyh94946 2019-05-14 10:34:14 +08:00
我猜楼主不是开发,估计是 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 1
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 并发不高情况下,其实短板不大
|