我参与了一个升级时间跟踪系统的项目,该系统 10 年来基本没有变化。它在 HP Proliant Pentium 上运行 Linux/Apache/CGI/MySQL3,并结合了一些 perl 和 bash“here 文档”(使用 C 库来解析/清理传入请求),采用逐个请求的方式。
该公司从 2001 年的 10 人左右发展到如今的 750 多人,并计划在未来几年内发展到数千人。该应用程序存在一些性能问题,但经过调查,发现性能问题与包含数百万个时间条目的表有关,这些表显然缺少索引,并且结果未分页(导致大页面重新出现)。
Apache 的利用率和请求进程根本不会占用那么多的 CPU 时间和内存;然而,百万记录表上的笛卡尔连接确实消耗了很多,据报道甚至在月底会定期锁定。
我想解决这些方法的问题:
- 添加索引并稍微调整模式。
- 升级硬件。
- 升级到较新的 MySQL
- 更新 UI,让它不再那么陈旧。
我只是不明白将 CGI 程序完全重写为进程内架构的任何理由。 我认为 CGI 会成功非常好。 考虑到我们过去十年在硬件方面取得的进步,您是否真的会担心独立进程的 CGI 架构? 事实是,我们可以花费几千万美元购买一台新服务器,或者花费数万亿美元进行重写。
答案1
一些想法:
- 是的,升级硬件,只是为了避免对难以找到的备件的依赖。
- 正确地索引 DB 可以轻松地将时间减少 100 倍、1000 倍甚至更多,特别是在拥有数百万条记录的表上。
- 从 GCI 转到其他架构可以避免进程启动时间,仅此而已。当每秒执行数百或数千个请求时,差别很大,这似乎不是您的情况。
答案2
我确实不认为存在问题,只需购买新硬件即可。
即使你做决定稍后重写应用程序,您真的会在旧硬件上部署新应用程序吗?我对此表示怀疑,因此无论哪种方式,您都需要在硬件上进行投资。
如果运气好的话(并进行一些性能测试),新硬件将(在完成列表中的 1 和 3 之后)很好地扩展,您可以跳过许多 10G 的重写