项目准备重构,来问问论坛的大佬

现在项目是外包的,thinkphp5.0,由于公司发展非常快,准备重构,想问问大佬。
是个游戏联运项目,有后端和jssdk
准备重构成一个独立的项目,jssdk可以沿用以前的优化下就行,保持以前的项目继续运行,后续功能都在重构的项目上去增加。

  1. 我们的瞬时并发有时非常高(都是可以预见的高并发),目前最高能有1w+,最高的时候,我开了12台服务器都还有点卡
  2. 数据的增长也非常快,已经好几个表都几百万行,根据现在的情况,负荷很担心到极限
  3. 服务器是阿里云,redis是单独一台ECS,数据库是阿里云RDS,负载均衡是阿里云CLB,

相信大佬们也知道,可以预见的高并非,服务器增加很简单,负载均衡也很好调。唯独数据库RDS有点难搞,虽然RDS有数据库代理,但是增加RDS也是非常费时的,没有ECS那样开启关闭简单。

现在重构准备用laravel,不知道选哪个框架,laravel-s靠谱不,能不能用于生产?
RDS有没有办法解决下,突破瓶颈?
暂时只有这些,大佬们如果有好的建议,可以告诉下

GDDD
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
GDDD
最佳答案

来挖坟了,项目经过3个月重构完毕,测试已过了,马上要上线了。 php7.4 webman 阿里云 ECS 8核16G 200Mbps (峰值) 阿里云Polardb 数据库 集群版 2节点 4核 16GB 阿里云负载均衡 SLB 带宽值5120 Mbps 阿里云Redis 5.0 企业版 2G集群性能增强版 单台服务器 wrk压测7500QPS,阿里云PTS压测 峰值并发7000 重构目的达到 以后数据库量上来了,加数据库加服务器就完事了

1年前 评论
nff93 1年前
GDDD (作者) (楼主) 1年前
九霄道长 1年前
GDDD (作者) (楼主) 1年前
讨论数量: 89
leo

既然已知数据库是目前最大瓶颈所在,那应该在减少数据库读写方面下功夫,或者是把某些表的存储更换为其他数据库,而不是花时间在换语言、框架上

2年前 评论
GDDD (楼主) 2年前
Aliliin 2年前
wenyu13 2年前
朝东 2年前

TP换Laravel,感觉作用不大

2年前 评论
Hello_Smile 2年前
安澈雨 2年前
李小明 2年前
小李世界 2年前
陈先生

laravel-s 高可用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2年前 评论
游离不2 2年前
陈先生 (作者) 2年前
GDDD (楼主) 2年前

换java吧

2年前 评论
GDDD (楼主) 2年前
qufo 2年前

如果用php 也要追求性能那就hyperf(有几个项目稳定运行)吧 webman也可以(没用过 相信workman的大佬出的肯定很稳 :+1: )

2年前 评论
GDDD (楼主) 2年前
Silly-dog 2年前
Silly-dog 2年前
leo

既然已知数据库是目前最大瓶颈所在,那应该在减少数据库读写方面下功夫,或者是把某些表的存储更换为其他数据库,而不是花时间在换语言、框架上

2年前 评论
GDDD (楼主) 2年前
Aliliin 2年前
wenyu13 2年前
朝东 2年前

图省事上阿里云函数计算,根据请求量自动扩容资源 自己搞优化并发还是上Golang吧

2年前 评论
╰ゝSakura

用golang

2年前 评论

建议不要唯框架论,事实上大部分系统扩容第一个撑不住的地方都是DB

建议:

  • 对于大并发的性能瓶颈接口做分析处理,优化(减少DB查询,复杂查询变简单查询,缓存等)
  • 如果不想停机迁移,重构可以按照接口逐步灰度替换,持续迭代,另外重构时充分考虑DB的优化
2年前 评论
九霄道长

和我司很像,被直接springcloud重构了

2年前 评论
幽弥狂

如果还想用PHP 的话 建议 Hyperf ,真的觉得项目DB 压力比较大的话可以先优化DB。

2年前 评论

除非swoole,PHP-FPM不支持数据库连接池,并发上不去。

2年前 评论
mowangjuanzi 2年前
Hello_Smile 2年前
mowangjuanzi 2年前
zzhpeng 2年前
mowangjuanzi 2年前
Allenccccccccc 1年前
mowangjuanzi 1年前
aodaobi

laravel 就 octane 吧,其他php框架 就 Hyperf 吧

2年前 评论
liziyu 2年前

TP换Laravel,感觉作用不大

2年前 评论
Hello_Smile 2年前
安澈雨 2年前
李小明 2年前
小李世界 2年前

框架可以按上面的朋友建议换Hyperf。瓶颈在数据库还是重点优化mysql,根据场景可以多多利用缓存,优化索引,增加读写分离,主库基本只有写请求,从库的读请求根据请求并发量做扩容就比较容易。

2年前 评论
fatrbaby

左耳听风的架构第一原则是激进胜于保守。

2年前 评论

Hyperf用于生产环境可能产生未知bug,慎用; 楼主重点应放在DB优化上,辅以Nosql和MQ; 最后,如果项目真的钱景好,还是用golang或者java重构吧。

2年前 评论
91it 2年前
╰ゝSakura 2年前
MArtian 2年前
iwzh 2年前

我司也是PHP 目前用的webman,常驻内存型http框架 workerman系列产品

2年前 评论

要hyperf可以降低PHP的CPU消耗,目前hyperf已经很成熟了,我们公司都用来做几个项目了。如果是数据库压力,就优化数据库吧。

2年前 评论

上Golang吧,没对比没体会,对比后真的差距很大!另外建议加强数据库优化、架构调整相关工作

2年前 评论

个人建议用swoole 可以考虑imiphp,easyswoole ,hyperf workman 必然使用webman 非常靠谱性能很高 、laravels如果你原来是laravel或者lumen直接加速用还可以,但是你是tp还是别用这个了

2年前 评论
skarner

楼上的建议是认真的吗 ?
本来就是重构,如果用 swoole 相关的方案,为什么不直接用 laravel + octane 呢?

个人建议,要么就 Laravel + octane
要么就换语言(golang / java)重构

2年前 评论

为啥要重构?而且是在业务高峰期,给自己找事,让自己滚蛋?REDIS的问题,就单独针对REDIS,数据库的问题,就单独针对数据库,你表才几百万条记录,我的表都有几亿条,记得分区,分区也就是分表

2年前 评论
武汉phper 2年前
zmou 2年前

用java或go,趁机内部转,参与项目。

2年前 评论

建议go, 找几个会php的goper 先重写业务 在逐步迭代

2年前 评论
baitongda

这个很潮。。。我受用了。但还是清楚太多没有掌握了

2年前 评论

首先,你的主要意思是重构,然后想知道一下用哪个框架或者哪个版本比较适用于你现在现有业务的现状,也就是数据库瓶颈,那么问题就清晰了,你用哪个版本的框架都不会很明显的解决你数据库压力大的瓶颈。你提到了用laravel-s, swoole确实可以实现提高效率的问题,但是只是提高代码执行效率,狭义点理解就在于读硬盘还是读内存的区别,然后你项目的瓶颈在数据库,所以你方向要找对,换个角度从数据库着手,框架只是易于我们管理的项目的工具。 其次,如果你们公司所有的业务都是在php上,所有团队成员都是phper,语言没得选择的话,那么一定推荐你用laravel或是luman框架,优雅且易于管理,但是效率是确实没有优势,甚至不如thinkphp。

2年前 评论

laravel + octane 并不能有很高的提升,最多有个40%-50%,octane 没有使用的Swoole的协程,用的还是多进程。

2年前 评论
aodaobi 2年前

给信息量还不是很多,不好判断。所用的ECS配置和阿里云相关服务的配置信息并没有给出。 ThinkPHP 5.x跑到10000并发挺可以了。

首先要确定优化目标,是觉得系统难维护要重构,还是性能瓶颈,如果是性能瓶颈,瓶颈关键点是啥。有了目标方向才能确定优化方案,而不是上来就重写。

  • 如果是RDS慢,可以考虑阿里云PolarDB,可靠性更强。
  • DB 索引是否有加,有时是否有索引,性能几百上千倍好差。还有Cache。
  • 百万的表不算大,千万级后性能下滑明显。
  • 如果是可以预见的高并发,可以定时伸缩,使用抢占式ECS,一个月成本应该是可以接受的。
  • 阿里云也是有Redis服务的,是不能满足需求么,要自己用ECS来构建。
  • 没有实际测过Laravel VS THinkPHP,但推测可能更慢或者差不多。
  • 重写是一个大工程。

以上说的可能不对,仅供参考!

2年前 评论

换框架不能解决瓶颈

2年前 评论
Lafite

上面那些换框架换语言的基本上没说到重点。 明明是数据库压力,跟语言有毛线关系。 换laravel有用?换GO有用?不是蠢就是坏! 20年老司机告诉你一个短平快的,将一些无关紧要数据量又大的表剥离出来,不要再放在mysql里面了,直接放进sqlit里面,sqlite分别放进不同的服务器,这样就可以减少主力数据库的压力,例如用户消息,几乎没人看,但是日积月累随着用户基数增加呈几何倍数增长,完全没用,但用户要看还必要得有,这个时候就没必要放在mysql里了。全拆出来,放进sqlit里面,sqlit是根据钱包厚薄放N台服务器上,妥妥的”分布式“。这个时候消息再多,也不会影响mysql的性能

2年前 评论

数据库连接,读写优化吧。框架到了这已经不能带给你多大优化了。只要对某些接口特定优化就可以了。

2年前 评论

我记得我刚开始参加工作的时候,有多个网页表格每个位置的数据都要从数据库中读取,然后使用if...else....类似的判断出数据的总和,我记得千万数据应该有了,然后主管让优化代码和sql语句,刚进公司的我就被委以重任,我用百度计时的方式一段段的计时,找到慢的代码,然后找到对应的SQL语句,再放到Navicat 里面用explain去跑,就这样都优化了七七八八。

2年前 评论
九霄道长 2年前
Lafite 2年前
保安 2年前
Lafite 2年前

file 自己看看这是多少条,现在单条已经10亿条了,最近是准备调整了

2年前 评论
dongjw321 (作者) 2年前
wikimo 2年前

数据库这一块建议考虑持久连接。在高并发时。防止出现因为创建链接太多导致MySQL停止响应。

具体细节问题可以再沟通

2年前 评论

推荐使用Hyperf

2年前 评论

以前做过一段时间类似项目,那时候是页游联运,瞬时并发有时确实很高

2年前 评论

楼主,你们负载均衡用的是啥?

2年前 评论
GDDD (楼主) 2年前

更换 posgresql 性能上会有提升吗(没有使用过不了解)? 脱离业务很难选, 可以根据业务类型, 选择特定类型的数据库 例如 时序数据库这种。 语言性能差异可能不大, 但是java生态下有更多的解决方案可以选择吧 !

2年前 评论
mengdodo 2年前
nff93

我也接了一个 ThinkPHP5 的项目,那数据库设计乱七八糟的、代码也乱七八糟的,根本不想重构。

2年前 评论

除非你们原来的项目代码写的太烂,已经到了无法维护的地步,否则没有太大必要重构,要重构也不建议用PHP了,选择Go或者Java。
另外我觉得你们目前最大的问题就是服务器架构,建议是:
1.数据库换成阿里云的PolarDB,现在是可以一主多从,从服务器可以根据压力进行自动扩缩容,一方面是能应对你们高峰期的数据库查询,另外一方面可以降低使用成本。
2.服务器部署换成K8S,容器弹性扩缩容,轻松应对高并发,同时也极大的降低了成本,你们现在使用负载均衡,一方面是成本太高,并非每时每刻都需要12台机器来抗,但是你又不可能在低峰时降低服务器,高峰时增加服务器,运维估计是要累死了,K8S是你们最好的选择,另外费用保守估计能降低50%。
3.redis也没必要用ECS自建,维护成本太高,出故障了也不好搞,建议使用集群版或者是读写分离版,看你们使用场景了,如果存储的数据量并不是特别大,但是读并发非常高,那就采用读写分离版最合适。
先从服务器架构方面入手调整,能快速得到很大的提升。然后才再分析是否有慢sql,redis有慢查询,大key,热key,等其他问题。

2年前 评论
GDDD (楼主) 2年前
zmou (作者) 2年前

TP 换 Laravel 大概率会更慢,DB 单表几百万条数据量并不大,建议看下现在 Redis 的 RT 改为集群的方式,找到高频接口换 Java 重构掉,相同语言不同框架带来的优势其实微乎其微,如果不再使用 php-fpm 的运行方式,PHP 的优势也荡然无存。 建议监控下 Redis 的 RT,超过 2ms 都可以考虑优化,DB 如果 RT 超过 7ms 也可以看看优化下,最后换 Java 吧,SpringBoot 欢迎你。

2年前 评论

一上来就推荐go java重构的,有点无语了... 换语言意义真心不大,要考虑的很多(团队对该技术的熟悉度、掌握程度,相关生态熟悉度等等),而且项目的瓶颈也j基本不在语言层面

1年前 评论
GDDD

来挖坟了,项目经过3个月重构完毕,测试已过了,马上要上线了。 php7.4 webman 阿里云 ECS 8核16G 200Mbps (峰值) 阿里云Polardb 数据库 集群版 2节点 4核 16GB 阿里云负载均衡 SLB 带宽值5120 Mbps 阿里云Redis 5.0 企业版 2G集群性能增强版 单台服务器 wrk压测7500QPS,阿里云PTS压测 峰值并发7000 重构目的达到 以后数据库量上来了,加数据库加服务器就完事了

1年前 评论
nff93 1年前
GDDD (作者) (楼主) 1年前
九霄道长 1年前
GDDD (作者) (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!