谈谈云招 OurATS 为什么不把开发语言从 PHP 转成 go/ Java /.net,而是搞了个 PHP 编译器 BPC 来实现本地部署

14次阅读

共计 1777 个字符,预计需要花费 5 分钟才能阅读完成。

每次发 PHP 编译器 BPC 新版本 的文章 / 帖子, 都有会网友评论说为什么不用 go/java/.net 或者其它别的语言.

今天就来说说为什么?

1. 缘起

最初决定要开发 BPC 是为了想要本地部署云招 OurATS 的一个核心组件 简历解析器 bob-parser.

bob-parser 是用 PHP 开发的, 而 PHP 的源码加密方案没有找到一个 100% 可靠的, 并且还想解决软件授权问题.

有网友一提到源码保护什么的, 老是会说你的代码是有多好, 多有价值, 给我我也不看, 屎山一堆.

这个问题我们后边再讨论.

但云招的做事风格大致就是这样, 想要解决一个问题时, 就会尽可能地想把这个问题解决好.

开发了 BPC 一段时间后, 发现实际上不只能解决 php cli 程序的编译,php web 项目通过编译成动态链接库当作 module 嵌入 apache 就好了, 再进一步, 引入了 althttpd, apache 也不需要了.

2. 背景

云招 OurATS 是一个招聘管理系统, ATS 是 Applicant Tracking System 的缩写.

非这个领域的人一开始往往会把 ATS 和招聘渠道 (Jobboard) 弄混.

招聘渠道是指 Boss 直聘 / 智联招聘 /51job 等面向求职者的网站.

企业从招聘渠道获取到简历后, 或者说候选人把简历投递给企业后, 下一步进行 简历筛选 / 征求用人部门意见 / 安排面试 /Offer 审批 /Offer 发放 … 等工作时需要的 申请追踪系统 就是 ATS.

当然现在的招聘渠道企业后台可能也有一部分 ATS 的功能.

云招 OurATS 没怎么搞市场推广, 所以虽然我们从 2010 年就开始做了, 很多网友可能没听说过.

3. 友商

这里列几个大家可能听过 / 用过的招聘管理系统.

  1. 飞书招聘
  2. 北森招聘管理系统
  3. Moka

4. 为什么不换开发语言

有些网友认为开发一套招聘管理系统没什么难的, 找几个人搞个半年还能搞不出来?

我们来看看实际案例.

北森在 2019 重构了它的招聘管理系统, 在其官网发布的文章中这样说:

2019 年,北森基于 Nature Design3.0“高效、愉悦、温暖”的设计理念,历时 3 年,斥资 2 亿人民币,重塑新一代体验优先的招聘管理系统。

文章链接: https://www.beisen.com/res/848.html

显然, 北森的这次重构应该没有更换技术栈, 从其 招聘的岗位 来看, 开发语言应该是 java/.net.

在不更换开发语言的情况下, 重做一个招聘管理系统的成本是 3 年 + 2 亿人民币.

如果换语言的, 成本恐怕不只这么多了.

那么这个 历时 3 年,斥资 2 亿人民币,重塑新一代 的招聘系统有惊艳了市场吗? 看看北森在港股的表现就知道了.

在脉脉上经常看到 Moka 比北森好的评价, 可是在脉脉上 Moka 比北森裁员裁和还狠.

如果还有网友不信邪, 可以下水试一试, 反正国内做 ATS 的也没几家, 机会还有.

云招 OurATS 从 2010 年开始, 到今年已经持续开发了 15 年, 代码库现存代码上千万行, 换语言重构的成本不好估量.

而 PHP 编译器 BPC 从开始开发到成功编译云招 OurATS,用了 3 年, 资金投入约 500 万人民币.

说到底,PHP 真是世界上最好的语言呀!

5. 再说说 BPC 编译带来的好处

首先, 完美解决了源码保护, 软件授权这两大基本需求.

如果换 java/.net 的话, 这两个语言的反编译比 PHP 成熟多了.

GraalVM 和 .NET 8 的 Native AOT 是否好用还不好说.

如果换 go 的话, 源码保护是没问题, 但需要解决软件授权的问题, 当然 java/.net 也需要解决这个问题.

BPC 编译还带来了额外好处:

  1. 软件交付变得简单了.

    整个云招 OurATS 招聘系统被编译成了一个二进制可执行文件, 日常升级维护就是替换这一个文件(当然整个系统的运行还需要其它几个辅助程序).

  2. 运行环境更安全了.

    生产环境不需要 PHP 解释器, 因为 PHP 源码已经被 BPC 最终转译成 C, 然后编译成可执行文件了.

    也就是说, 服务器上不能执行 PHP 代码, 很多针对 PHP 的攻击手段失效了.

  3. 合作方式更灵活

    PHP 项目源码保护的一个做法是使用编译型语言编写部分核心逻辑, 然后其它代码开源.

    有了 BPC 之后, 完全可以把核心 PHP 代码编译成动态链接库, 其它部分开源.

6. 最后说说 BPC 的美中不足

BPC 的目标是源码保护和软件授权, 现阶段没有在生成代码和运行性能上做特别的优化.

因此虽然是编译成 C, 但性能在大多数场景下还不如解释执行的 PHP 快.

所以如果是性能敏感的项目慎用.

正文完
 0