PHP 项目重构计划,推荐 GO 还是 Node js?

2016-05-16 11:02:41 +08:00
 vus520

现在的项目是标准的 PHPStack ,目前进入项目稳定期,准备对项目前端进行重构。

目标:高性能,高可用,可扩展

目前团队只有 PHP 基础,核心业务的重构准备用其它语言实现。

现在进入选择艰难,求推荐一个坑。

7823 次点击
所在节点    问与答
86 条回复
lualu2
2016-05-16 16:56:28 +08:00
为了重构而重构...
还不如对现有的模块重新分析,看看弱点是哪个优化下.或者对模块进行重构,方向是改的更适合和其他语言交互.这样以后新增的功能和模块或者弱项可以在将来用其他语言实现.对于老模块的整体重构,通常会越改越错....
语言不能解决问题,每个语言都有每个语言的问题.专攻 php 如果初学其他语言,肯定会遇到坑,直接用在稳定的项目上,就是雷.所以还不如拿新语言在新项目和新模块练手,这样既熟悉了新语言,又对新老语言 /模块的交互有了更深的了解,对老模块的重构也是一种助益.
surfire91
2016-05-16 16:58:46 +08:00
@vus520
针对楼主后面补充的第 4 点说下我的经验:
项目大了之后最需要做的就是拆分与解耦。将大项目维持成多个比较较独立的小项目的合集。

楼主提到目前的性能瓶颈只能通过加机器来解决,我倒反而觉得这是个很好的架构。横向可扩展的架构在扩展时的风险是非常小的。而如果只能重构 /重写来解决扩展问题都会有较大的风险。当然这与我遇到的业务相关,重构产生的一个小小的 bug 远不止几台机器的钱。

楼主闲着想折腾的话推荐静态类型语言。
gamexg
2016-05-16 17:20:18 +08:00
@plqws 目前觉得 golang 用 IntelliJ IDEA 加插件已经很好用了,有 vs 写 c# 的感觉。目前唯一的缺点是还不支持单元测试时单步调试。
veiz
2016-05-16 17:20:46 +08:00
业务拉出来遛遛,让大家看看有多复杂
gamexg
2016-05-16 17:26:13 +08:00
换语言会碰到新的坑...
golang 最近 1 星期碰到了几个坑。
一次 x86 下 int64 原子操作崩溃,提示不能对空指针操作,检查后发现是未进行内存对齐。这个是我的锅,没细看文档,但是错误提示能不能好些?
windows 下获得本地时区是 "" ,用 "" 作为时区创建时间,时间变成了 UTC 时区,差了 8 个小时... github 提交后已经开始修复。
golang 1.5 升 1.6 后, http 标准库偶尔报错,还未确定原因。
raincious
2016-05-16 17:34:29 +08:00
@gamexg
https://golang.org/pkg/sync/atomic/#pkg-note-BUG

其实这个不是 Golang 的问题,而是 CPU 。

楼主如果真心想换语言(这样开销太大了,不建议,很容易项目就被打垮或者挂了),可以先将整个项目服务化,比如用户登入服务拆出来、用户私信服务、密集运算服务等等拆出来,让这些服务之间用 RPC 与主项目进行通讯。之后慢慢用 Golang 或者 Rust 重新实现这样的服务。

这样可以一点一点的将项目转换到新语言上,同时确保主要的项目一直保持可用。
gamexg
2016-05-16 17:47:20 +08:00
@raincious 后来看到了那个说明,不过当时很纳闷,错误提示不能操作 nil 。我检查了多遍,确认传递进去的不是空指针,最后到 github 搜索,发现有人报告过,回复是内存对齐问题,就有那个文档连接。主要是想吐槽下能不能使用更友好的错误提示,或者编译期检查。目前的错误提示误导人啊。
vus520
2016-05-16 18:00:42 +08:00
那还是继续蒙头做 php 吧,哈哈
vus520
2016-05-16 18:07:58 +08:00
@veiz 业务不算复杂
场景是广告类业务,现在的数据都异步组织好,放在缓存里。
api 请求的时候,就是从缓存里把数据拿出来,根据策略排序,做压缩做加密下发。
组织的逻辑一台机器就够了,跑压缩加密的过程,却需要 8 台机器。

后来用 lua+openresty 替换了 api 端的接口进行测试,效率有很多提升,感觉 php 没有内存常驻还是会有资源浪费。
murmur
2016-05-16 18:33:46 +08:00
复杂系统 java 简单系统剥离一部分到 node.js 剩下保持 php
codingpp
2016-05-16 19:26:15 +08:00
node.js 不适合写业务,玩玩可以
fyooo
2016-05-16 19:59:54 +08:00
试试 hack 语言?
vus520
2016-05-16 20:02:59 +08:00
@fyooo 小众语言就算了
;)
julor
2016-05-16 20:12:07 +08:00
用 golang 没商量,绝对好
jhdxr
2016-05-16 20:37:56 +08:00
@vus520 hack 指的是 hacklang.org _(:з」∠)_ 是非死不可基于 PHP 去做的改进的一个语言。。。大部分语法与 PHP 一致
lygmqkl
2016-05-16 20:54:20 +08:00
就说一句 PHP 应该够用,你需要的只是一个优秀的架构师
DSKcpp
2016-05-16 21:49:32 +08:00
新浪微博也是 php 啊 我觉得不是语言的问题吧。。。
rayyang88
2016-05-16 21:57:57 +08:00
absolutely golang
fyooo
2016-05-16 22:05:35 +08:00
@jhdxr 对头

@vus520 hack 其实就是静态类型版的 PHP ,语法过渡超级平滑,据说 Facebook 内部全部已经把 php 迁移到 hack 了
shuimugan
2016-05-16 22:23:14 +08:00
如果觉得是 php 没有常驻内存的导致花时间在代码解析上的话,可以先试下 workerman/swoole/ReactPHP 这 3 个框架任选一个,以纯 php 的方式开个 http server,简单写个路由,去调用你的算法,压测下看性能

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

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

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

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

© 2021 V2EX