共计 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. 友商
这里列几个大家可能听过 / 用过的招聘管理系统.
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 编译还带来了额外好处:
-
软件交付变得简单了.
整个云招 OurATS 招聘系统被编译成了一个二进制可执行文件, 日常升级维护就是替换这一个文件(当然整个系统的运行还需要其它几个辅助程序).
-
运行环境更安全了.
生产环境不需要 PHP 解释器, 因为 PHP 源码已经被 BPC 最终转译成 C, 然后编译成可执行文件了.
也就是说, 服务器上不能执行 PHP 代码, 很多针对 PHP 的攻击手段失效了.
-
合作方式更灵活
PHP 项目源码保护的一个做法是使用编译型语言编写部分核心逻辑, 然后其它代码开源.
有了 BPC 之后, 完全可以把核心 PHP 代码编译成动态链接库, 其它部分开源.
6. 最后说说 BPC 的美中不足
BPC 的目标是源码保护和软件授权, 现阶段没有在生成代码和运行性能上做特别的优化.
因此虽然是编译成 C, 但性能在大多数场景下还不如解释执行的 PHP 快.
所以如果是性能敏感的项目慎用.