下面的背景内容挺长的,希望大家能先粗略了解一下情况
我现在在管一个学校内部的 Private Tracker ,负责维护。 Tracker 和周边的东西都是拿 PHP 写的,算是“祖传的”代码了。搞了一个夏天终于把它搞成 PHP 5.5 兼容了。至于再往后的版本,像兼容 PHP 7 需要把 mysql 砍了换 mysqli 或者 PDO ,我看并不是很现实,所以就没搞。
现在想继续加功能,然而实在是无法忍受坑爹的世界第一语言了,因而明确认为需要换开发平台。不过,迁移要逐步完成,所以至少要保证两套程序都用一样的数据库和表结构——至少原有的数据要一样,对浏览器留下的 cookie 和用户验证方法也要一致……总归有不少限制。
一方面迁移工作比较多,另一方面人手非常不够,可以看作只有一个人利用业余时间在搞(大学三年级,还好课不太多)。所以我非常在意迁移的方向,选了坑多的路就是自己在作死。
现在考虑的方向有这么几个:
下面是纠结的东西:
我不是专门学习软件工程 /CS 的,但是相对熟悉 Python (日常计算器,科学计算,抓网页),之前也拿 Django 写过一些简单的东西。然而我不确定 Python 的性能怎么样,因为我们服务器比较渣,而每天处理的请求数量大概有 200 万个,有朝一日全是 Python 后卡成傻逼,那我估计会被管理组的其他人拖出去枪毙个几分钟的。
C#看起来不错,至少官方 IDE 挺爽的。但服务器是 Linux ,只能拿 Mono 跑,或者日后的 CoreCLR 。总觉得这样哪里有些奇怪,或者会被性能 /兼容性 /莫名其妙的 bug 坑死。另一方面 ASP.NET 这种东西似乎比 Django 的模式复杂一些,不过我刚看了一个小时不到,也不敢妄下结论。
如果用 Java ,我个人不是很喜欢。看架势估计想撸出来什么有用的东西得猴年马月了。 Scala 或许不错,但也有很多人说有种种问题。而且,即使使用 JVM 上面的东西,我感觉大概率会用 Thrift 之类的东西通过 RPC 调用它,前端依然 PHP (不过看起来可能会好很多)。
最后一个选项就是接着用 PHP ,慢慢地修老 bug ,重构,分离前后端逻辑,迁移到 PDO/mysqli 。然而首先是我觉得撸 PHP 并不会比撸 Java 更优雅,同时也不想强奸眼睛和大脑,而且似乎 PHP 7 的性能也就是呵呵。另一方面,这样做的话我的新东西会被(老代码的) GPL 污染,虽然原则上只在那个服务器部署并没有问题,但也是莫名其妙感觉蛋疼。 HHVM/Hack 不予考虑,尤其是服务器还是上古的 32 位 CentOS 5 。
可以是上面那几个方案里面的一个,也可以提出其他的建议。在此提前说一句谢谢😊
1
ljbha007 2015-10-06 18:43:50 +08:00 1
推荐 Python + flask 简单好用功能强大
|
2
FFLY 2015-10-06 18:45:53 +08:00 3
首先你的出发点就有点奇怪,与其考虑 PHP7 那么遥远的事,不如考虑功能开发。至于性能,就更是杞人忧天了。你知道有多少大型 PT 是跑在 VPS 上的吗?校内 PT 这种用户量,还不到考虑性能的时候。如果说运行过程中有性能问题,第一查代码,代码没问题的情况下查服务器环境。我还真不相信,一个校内 PT 就能跑出 PHP 的性能,而且 PHP7 的性能目前综合各类信息来看,绝不是呵呵。
|
3
zonghua 2015-10-06 18:46:57 +08:00 1
C#/.NET on Linux 与众不同。
|
4
Felldeadbird 2015-10-06 18:52:14 +08:00 via iPhone 1
php7 和 php5 区别不大,选 php 吧。根据大多数人的总结, web 主要瓶颈不是语言,而是 io ,数据库方面。
|
5
chaucerling 2015-10-06 19:24:09 +08:00 1
平均下来每秒 20 多,根本不用考虑性能
|
6
squid157 OP @Felldeadbird mysql 模块被消灭了。我个人不喜欢 PHP 。
|
7
squid157 OP @chaucerling 显然半夜三四点学校都熄灯了。不过确实,没错,请求数量并不恐怖。我自己是新手,并不了解这些。
|
8
squid157 OP @Felldeadbird 确实,不过还好,感觉 MySQL 基本都在读 cache
|
9
squid157 OP |
10
squid157 OP @FFLY 我看 PHP 他们挺喜欢把旧版本作古的。 PHP5.4 前两天刚刚 end of life 。
我也是刚刚接触服务器,所以不知道。但我看很多比较屌爆的服务,请求也是每秒几百——然而他们有负载均衡和集群。我也去 Google 了一阵子,但很多都是测试 HTTP 静态页面请求,也就是 Apache/Nginx 的性能。因此我也不知道我们的东西到底能扛多少,我也不敢真去测试它。反过来,上次 MySQL 处于某种问题被重启,因为内存里面没缓存,整个服务也卡了一阵子。 换 PHP7 的话,一样是各种老旧代码需要重构,而想对 Python 我真的不喜欢 PHP 啊。 不过既然都说性能不是问题,那我就拿 Python 去玩了。 |
12
squid157 OP @FFLY 我就是用了一阵子把老程序 5.2 改到 5.5 。看到 mysql 这个模块停止更新,到 7 里面移除,我就实在是没动力接着改了。感谢回答。
|
13
Felldeadbird 2015-10-06 20:10:31 +08:00 1
@squid157 mysql 扩展函数被消灭是必然的。这玩意对于新手来说,容易产生注入漏洞。 PHP 若还保留,只会成为下一个 ASP 。更换语言不是那么简单的事情。你切换成 PHP7 ,只需要自己封装一个 query 和 fetach_array 类库就行了。走 PDO 或者 mysqli 。基本零修改。 当然,你切换语言必须要考虑后人和现有的人,否则等你离开后,会被人骂的。
|
14
Felldeadbird 2015-10-06 20:13:39 +08:00 1
@squid157 他们抱着 5.4 已经很好了。网上一大推公司坚守着 PHP5.2 的 ecshop 系列程序。这才叫吐血。
|
15
zts1993 2015-10-06 20:32:57 +08:00 1
Java 吧。。
|
16
DennyDai 2015-10-06 20:35:37 +08:00 1
Rails
|
17
kn007 2015-10-06 20:36:59 +08:00 1
php7 可以用 mysql 编译进去就行了。。。
改成 mysqli 其实一点不麻烦 |
18
kn007 2015-10-06 20:37:16 +08:00 1
如果要换。。。我觉得 nodejs 。。不错
|
19
orFish 2015-10-06 20:38:41 +08:00 1
重构还不如重写了。。。用 djaongo 吧。。
|
20
hahasong 2015-10-06 20:45:43 +08:00 1
用 php 重写吧, nexus php 那时候写 pt 那时候还没有流行 mvc , orm 模型这些东西,用 php 重写应该很快。结构清晰了,以后扩展维护起来就方便多了。期待开源
|
21
iyaozhen 2015-10-06 21:08:47 +08:00 via Android 1
@squid157 我不明白纠结 MySQL 模块干嘛?只是有些缺陷默认去掉了,你要的话还是可以自己编译,换 MySQLi 也很简单。所以 mvc 架构还是比较重要。
不过你已经决定用 Python 了还是用吧。 |
22
wdlth 2015-10-06 21:14:56 +08:00 1
我认为你们还是先把 32 位的 CentOS 5 换掉吧……
|
23
tinyhill 2015-10-06 21:19:15 +08:00 1
说了半天没明白瓶颈在哪里?如果是这一点:“现在想继续加功能,然而实在是无法忍受坑爹的世界第一语言了,因而明确认为需要换开发平台。”那么我认为没有这个必要重构或迁移,你应该做的是解耦,把现有体系下的 API 开放给提供新功能的程序使用,把自己可控的新东西通过自己的想法实现,有更多的时间再考虑旧功能的迁移。
PS :现在重构,以后交接到别人手上,还是会面临你现在面临的问题。所以我觉得问题的关键是功能解耦,先让自己的工作相对独立地完成。 |
24
lavadore 2015-10-06 21:30:55 +08:00 1
你个人擅长什么就迁移到什么呗,只凭个人喜好选择的平台你是想给之后接手的人挖坑么?
|
25
bdnet 2015-10-06 21:56:15 +08:00 1
清楚逻辑的情况下重写当然容易,但普遍还要保持旧系统运行,综合而言重构还是比重写更符合实际情况,更何况资源有限。
|
27
zsx 2015-10-06 22:17:23 +08:00 1
@Felldeadbird PHP 5.2 =_= 我们这里开发早就想升到 5.3 以上了,但 5.4 都停止更新了,还是不能离开 5.2 ……因为网上就是一大票虚拟主机还在 PHP 5.2 ……
mysql 那里,基本上全局替换 mysql 为 mysqli 再简单测试一下模块就行了。 PHP 7 的性能比 PHP 5.6 提升了非常多,你可以在自己个人电脑上部署测试一下。 至于慢,得弄清楚你的代码到底瓶颈在哪一方面,到底是在 I/O ,还是在计算,还是在数据库,诸如此类。不要盲目去重写。 |
28
gamexg 2015-10-06 22:30:45 +08:00 1
选择也就 python 、 php 两个吧?
既然喜欢 python 那就上吧,不过重构的工作量很大,能坚持下来吗? |
29
squid157 OP |
31
Actrace 2015-10-06 22:46:04 +08:00 1
我认为只有用 C 才能代替世界第一伟大语言并且解除你对性能的烦恼。
|
32
dubuqingfeng 2015-10-06 22:48:12 +08:00 via Android 1
tornado 和 mongodb ,目前正在入坑中,反正尝试一下新东西嘛。
|
33
squid157 OP @tinyhill
我了解,所以也在做解耦合的工作,但实在是不想接着用 PHP 了。不喜欢 PHP 是因为真的遇到了挺多的坑,心情挺不好的。 而且现在,以及可以预见的将来,基本只有我一个人(或者再拉来一个队友)做,所以调整也可以接受,我觉得。现在拿到的代码就没任何文档,也是泪流满面。。还好有之前的人可以联系 新代码的文档写好了,架构设计好了,就不会那么坑了吧,我猜。。 |
34
squid157 OP |
37
zsx 2015-10-06 23:00:02 +08:00 1
@squid157 其实如果你用 Python / RoR / Nodejs 的话没准坑更多_(:з」∠)_PHP 因为是不同会话间互相隔离的,代码有些小毛病还可以忍受,反正一次会话完这玩意也没了……换上面的……嗯。
至于数据库,研究一下 Redis 缓存一些频繁被查询的内容?数据库挂掉总有 Log 的,查查看到底什么原因比较合适。 |
38
Actrace 2015-10-06 23:02:47 +08:00 1
爱折腾是绝症,我觉得吃什么药都不重要了.关键是没得救.
死过几次后才会明白现在的美好. |
39
clippit 2015-10-06 23:09:53 +08:00 1
建议还是使用 PHP 。 WhatCD 的 Gazelle 项目算是目前比较好的 PT 系统了吧,人家也是用 PHP 写的。
其实用什么语言写都不重要, PT 的业务逻辑并不复杂,关键是看人,看团队的熟悉程度。 |
40
squid157 OP |
41
squid157 OP |
42
kslr 2015-10-07 00:32:57 +08:00 1
@squid157 这样说,我不觉得你有能力设计出更好的结构,只会搞得一团糟,最后只能放弃,大部分重构都是这样的结束的,你最好想好了。
|
43
usedname 2015-10-07 00:34:20 +08:00 1
mysql 这个驱动必须被移除, pdo 才是王道,用 php 5.4 真的很幸福了,像楼上们说的用 5.2 的公司真的多了去了
|
46
rainysia 2015-10-07 01:53:10 +08:00 1
web 应用迁移成 python 会哭死你.有些语言擅长某些特定领域是有原因的. python 做做爬虫, 数据分析不挺好的. php 随便找时下流行点儿的框架都可以秒 django 几条街了.
倒是 tornado/flask 这些轻便的框架, 你重构又需要配太多. 就像楼上说的, "我不觉得你有能力设计出更好的结构,只会搞得一团糟 ,最后只能放弃" 简单的, 就直接改改兼容就好. mysql--->mysqli 不就是分分钟的事. 至于这么复杂? |
47
squid157 OP |
48
lavadore 2015-10-07 02:14:57 +08:00 1
@squid157 这种古董项目,不出问题别去碰它。以后的事也不是你来操心的吧,如果代码确实烂,重新写说不定都比迁移要简单很多
|
49
squid157 OP @lavadore 算是个人兴趣吧,不改变数据库结构的情况下,想要 rollback 也很容易。
研究了一阵子,数据库设计大体没问题,觉得可以逐渐过渡。但现在的程序,就像那些给新手的 Tutorial 里面写的小例子一样,各种东西混杂在一起,只是一个页面就能写几千行的 php 文件,偶尔出了毛病 debug 起来都是十分痛苦的。 |
50
ibcker 2015-10-07 02:45:55 +08:00 1
PHP 上个性能调试工具,看下哪里有问题··改改就好了···重写个啥子···
|
51
movtoy 2015-10-07 10:38:15 +08:00 1
用什么不重要。。关键是哪个你拿手!或者相关人拿手!
|
52
kslr 2015-10-07 10:51:53 +08:00 1
|
53
Daddy 2015-10-07 11:56:09 +08:00 1
你就是:心太大,想太多。
然后就是被所谓 PHP 的梗梗到了,自以为有了信仰,工具是拿来用的。 |
54
Comdex 2015-10-07 12:03:45 +08:00 1
强力推荐用 Golang ,性能和开发效率两不误,部署也简单,一个二进制即可
|
55
magicdawn 2015-10-07 12:07:30 +08:00 1
node.js 可以试试~
golang 也不错 |
57
msg7086 2015-10-07 13:19:45 +08:00 via Android 1
别考虑性能。
别考虑 centos 。 如果你没有能力写复杂的东西,就别想着重写或者迁移了。搞这个的,首先你要有架构师的能力。 一天 2m 请求不算很多,拿个 vps 就能跑。我自己写的一个 public tracker 一天跑 15m 请求, i5 的机子 cpu 基本动都不动。 |
58
ekousp 2015-10-07 13:25:56 +08:00 1
无需迁移。
|
59
WildCat 2015-10-07 13:29:39 +08:00 1
100k 行代码你还是别重构了,有这精力能去干赚好几万块的私活了。
学校内部项目还这么上心我也是醉了。 哥们,一定要向钱看齐啊 |
60
shiny 2015-10-07 14:22:15 +08:00 1
如果你对 mysql 扩展如此依赖,说明你的代码有很大的问题。
|
62
squid157 OP @shiny
是,但之前的代码来自别的开源项目,当年代码估计就是那个风格吧。。每个能输出的 PHP 都自己连接数据库,然后一边输出页面一边进行查询, SQL 查询也是 escape 之后拼接起来的。正因为如此,才考虑如何让这个东西看起来更。。易于理解一些。 |
63
07jfxiao 2015-10-07 15:51:44 +08:00 1
nodejs 也可以试试嘛。
|
64
lyf 2015-10-07 16:03:05 +08:00 2
推荐 elixir , phoenixframework ,性能+效率
|