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

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

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

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

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

GDDD
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
leo
最佳答案

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

1周前 评论
GDDD (楼主) 1周前
Aliliin 1周前
朝东 1周前
讨论数量: 55
leo

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

1周前 评论
GDDD (楼主) 1周前
Aliliin 1周前
朝东 1周前

TP换Laravel,感觉作用不大

1周前 评论
Hello_Smile 1周前
李小明 4天前
陈先生

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

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

换java吧

1周前 评论
GDDD (楼主) 1周前
qufo 1周前

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

1周前 评论
GDDD (楼主) 1周前
Silly-dog 1周前
Silly-dog 1周前
leo

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

1周前 评论
GDDD (楼主) 1周前
Aliliin 1周前
朝东 1周前

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

1周前 评论
╰ゝSakura

用golang

1周前 评论

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

建议:

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

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

1周前 评论
幽弥狂

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

1周前 评论

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

1周前 评论
mowangjuanzi 1周前
Hello_Smile 1周前
mowangjuanzi 1周前

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

1周前 评论
liziyu 1周前

TP换Laravel,感觉作用不大

1周前 评论
Hello_Smile 1周前
李小明 4天前

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

1周前 评论
fatrbaby

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

1周前 评论

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

1周前 评论
91it 1周前
╰ゝSakura 1周前

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

1周前 评论

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

1周前 评论

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

1周前 评论

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

1周前 评论
skarner

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

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

1周前 评论

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

1周前 评论
小白,请多指教 4天前

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

1周前 评论

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

1周前 评论
baitongda

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

1周前 评论

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

1周前 评论

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

1周前 评论
aodaobi 6天前

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

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

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

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

6天前 评论

换框架不能解决瓶颈

6天前 评论
Lafite

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

5天前 评论

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

5天前 评论

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

4天前 评论
JiuXiao 4天前
Lafite 1天前

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