从 PHP 迁移到什么平台比较合适?

2015-10-06 18:20:56 +08:00
 squid157

下面的背景内容挺长的,希望大家能先粗略了解一下情况

我现在在管一个学校内部的 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 。

所以,如果要保证新旧程序共存并逐渐迁移,在人力极为有限的情况下,换成什么平台最合适?

可以是上面那几个方案里面的一个,也可以提出其他的建议。在此提前说一句谢谢😊

5444 次点击
所在节点    问与答
65 条回复
iyaozhen
2015-10-06 21:08:47 +08:00
@squid157 我不明白纠结 MySQL 模块干嘛?只是有些缺陷默认去掉了,你要的话还是可以自己编译,换 MySQLi 也很简单。所以 mvc 架构还是比较重要。

不过你已经决定用 Python 了还是用吧。
wdlth
2015-10-06 21:14:56 +08:00
我认为你们还是先把 32 位的 CentOS 5 换掉吧……
tinyhill
2015-10-06 21:19:15 +08:00
说了半天没明白瓶颈在哪里?如果是这一点:“现在想继续加功能,然而实在是无法忍受坑爹的世界第一语言了,因而明确认为需要换开发平台。”那么我认为没有这个必要重构或迁移,你应该做的是解耦,把现有体系下的 API 开放给提供新功能的程序使用,把自己可控的新东西通过自己的想法实现,有更多的时间再考虑旧功能的迁移。

PS :现在重构,以后交接到别人手上,还是会面临你现在面临的问题。所以我觉得问题的关键是功能解耦,先让自己的工作相对独立地完成。
lavadore
2015-10-06 21:30:55 +08:00
你个人擅长什么就迁移到什么呗,只凭个人喜好选择的平台你是想给之后接手的人挖坑么?
bdnet
2015-10-06 21:56:15 +08:00
清楚逻辑的情况下重写当然容易,但普遍还要保持旧系统运行,综合而言重构还是比重写更符合实际情况,更何况资源有限。
squid157
2015-10-06 22:16:17 +08:00
@hahasong 然而代码写的丑,并不敢拿出来。。。
zsx
2015-10-06 22:17:23 +08:00
@Felldeadbird PHP 5.2 =_= 我们这里开发早就想升到 5.3 以上了,但 5.4 都停止更新了,还是不能离开 5.2 ……因为网上就是一大票虚拟主机还在 PHP 5.2 ……

mysql 那里,基本上全局替换 mysql 为 mysqli 再简单测试一下模块就行了。 PHP 7 的性能比 PHP 5.6 提升了非常多,你可以在自己个人电脑上部署测试一下。

至于慢,得弄清楚你的代码到底瓶颈在哪一方面,到底是在 I/O ,还是在计算,还是在数据库,诸如此类。不要盲目去重写。
gamexg
2015-10-06 22:30:45 +08:00
选择也就 python 、 php 两个吧?
既然喜欢 python 那就上吧,不过重构的工作量很大,能坚持下来吗?
squid157
2015-10-06 22:35:44 +08:00
@iyaozhen

我当然是想让他老老实实的 MVC 了,但祖传老代码不行,自己螳臂挡车一样。换也不止一个地方不兼容,将近 100k 行代码, 1 个人。。。
squid157
2015-10-06 22:37:50 +08:00
@wdlth 机房的老师让我进去换我就换。搞个 SSH 进去都是跑了大半年,最后还是找之前的学长要来的。
Actrace
2015-10-06 22:46:04 +08:00
我认为只有用 C 才能代替世界第一伟大语言并且解除你对性能的烦恼。
dubuqingfeng
2015-10-06 22:48:12 +08:00
tornado 和 mongodb ,目前正在入坑中,反正尝试一下新东西嘛。
squid157
2015-10-06 22:48:59 +08:00
@tinyhill

我了解,所以也在做解耦合的工作,但实在是不想接着用 PHP 了。不喜欢 PHP 是因为真的遇到了挺多的坑,心情挺不好的。

而且现在,以及可以预见的将来,基本只有我一个人(或者再拉来一个队友)做,所以调整也可以接受,我觉得。现在拿到的代码就没任何文档,也是泪流满面。。还好有之前的人可以联系

新代码的文档写好了,架构设计好了,就不会那么坑了吧,我猜。。
squid157
2015-10-06 22:50:51 +08:00
@Actrace
@zsx

现在性能没什么问题,每次故障十有八九是 MySQL 出什么毛病了。但担心的是换别的之后出问题会被砍死。。。
zsx
2015-10-06 22:55:17 +08:00
@squid157 检查一下日志,直觉感觉上去是你 PHP 哪里有语句写的不好,触发了全表扫描……
squid157
2015-10-06 22:57:25 +08:00
@zsx 十个月没看见慢查询了,所以应该不是
zsx
2015-10-06 23:00:02 +08:00
@squid157 其实如果你用 Python / RoR / Nodejs 的话没准坑更多_(:з」∠)_PHP 因为是不同会话间互相隔离的,代码有些小毛病还可以忍受,反正一次会话完这玩意也没了……换上面的……嗯。

至于数据库,研究一下 Redis 缓存一些频繁被查询的内容?数据库挂掉总有 Log 的,查查看到底什么原因比较合适。
Actrace
2015-10-06 23:02:47 +08:00
爱折腾是绝症,我觉得吃什么药都不重要了.关键是没得救.
死过几次后才会明白现在的美好.
clippit
2015-10-06 23:09:53 +08:00
建议还是使用 PHP 。 WhatCD 的 Gazelle 项目算是目前比较好的 PT 系统了吧,人家也是用 PHP 写的。
其实用什么语言写都不重要, PT 的业务逻辑并不复杂,关键是看人,看团队的熟悉程度。
squid157
2015-10-06 23:41:43 +08:00
@zsx

是,我考虑过这个问题了。 Python 比较熟悉所以还好。目前没慢查询, memcached 也在用。上次莫名其妙挂掉的时候我并不管事儿,我管事儿的那次是硬盘满了,所以也没啥特别的。

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

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

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

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

© 2021 V2EX