一、那个链接
TWCMS 1.0 发布之后,有一天,一个用户发给我一个链接,说:你看看这个程序,是不是像它描述的那么厉害。
程序名叫 Xiuno BBS 2.0。介绍页说,这是一套面向千万级数据量设计的开源论坛软件。
我第一反应:又是吹牛的?
那年头,"高性能" "亿级数据"这类词,国内开源圈里到处都是,大多数经不起测试。我下载下来,看了数据库设计,按照系统逻辑,往里面导入 100 万条数据,跑了一遍。
页面打开,非常流畅。
我觉得有点东西,导入 1000 万。依然流畅。
导入 1 亿。
几乎没有变化。
我坐在那里,盯着屏幕看了一会儿。这个结论,是我有底气说的——dedecms、phpcms、帝国cms、WordPress、Drupal,国内外主流 CMS 我逐一研究过;Discuz、phpwind、phpBB、MyBB,主流 BBS 系统我也一一测过数据库负载。见过的东西不算少。
而这是我从来没见过的表现。
后来我仔细看了它的设计——整套系统只有二十多个表,源码压缩后不到 1M。它不是靠堆出来的,是靠设计跑出来的。
然后我开始看源码。
代码写得极简,逻辑干净,没有多余的东西。我研究它的 SQL 写法,研究它的数据库设计,研究它的索引策略。看着看着,脑子里突然冒出一个念头——
我之前写的 TWCMS 1.x,跟这个比,就像垃圾。
二、黄敏
我进了 xiuno 的 QQ 群,认识了这套程序的作者:黄敏。
后来慢慢了解到他的背景:Discuz! 开发组早期核心成员,UCenter 的主要开发者,从 PHP3 时代就开始写 PHP。他用 C/C++ 写过 BBS,觉得 C 还不够快,部分功能尝试用汇编来写。
开发与支持团队名单里,他的名字旁边,紧跟着的是方小顿——XiaoDun 'Kenshine' Fang,乌云漏洞平台的创始人。后来乌云第一版,就是基于 XiunoPHP 早期版本开发出来的。
他说过一句话,我记到现在:回归本质,本本分分地写代码。
他讨厌剥洋葱,那种一层套一层,读到最后不知道在读什么的代码。
平时,他练书法,弹吉他。
这是那种让我觉得,技术和人可以同时做到很纯粹的人。
我们开始交流,我问他问题,他不藏着,一一解答。那段时间我学到的东西,比我自己摸索几年还多。
三、推倒重来
了解得越深,我越觉得 TWCMS 必须重写。
1.0 版本是能用的,但底层的架构不够扎实。既然要做,就该做到最好。
我开始深入研究 XiunoPHP 框架,学了很多新东西——很多看似高大上、复杂的设计,经他这套框架一拆解,反而写得简单易懂。这才是真正的大道至简。
但研究下来也发现,XiunoPHP 为超大数据量设计的一些分布式机制,在 CMS 的使用场景里可能永远用不上。模板机制那边,也不支持我原来从 dedecms 借鉴来的标签式语法——数据归数据,模板归模板,用标签把两者连起来,这套逻辑我一直觉得干净好用,不想放弃。我还想着,未来或许可以把 diypage 那套 DIY 修改模板的设计理念也融进来。
于是我借鉴了 XiunoPHP 的核心思路,加上少量 ThinkPHP 的设计,自己设计了一个轻量框架,叫 KongPHP。
TWCMS 2.0,就在这个框架上开发而来。
发布之后,我做过测试:亿级数据量下,页面响应稳定在 0.01 到 0.03 秒之间。
在我当时测试过的国内外主流的 CMS 里,能跑到这个数字的,我没见过第二个。
四、那些帮过忙的人
2.0 开发完成之后,我找了几个人。
一个是杨永全,网名晴天,盲人程序员,争渡读屏软件的创始核心成员。先天性青光眼,大约十四岁完全失明。
他懂 HTML、CSS、JavaScript、PHP,深度掌握 WCAG、WAI-ARIA 等国际无障碍规范。在国内互联网几乎没人在意无障碍这件事的年代,他一个人跑遍各大互联网公司,腾讯、阿里、新浪、网易,一家一家当面推动产品无障碍改造。腾讯后来成立"腾讯产品无障碍联盟",要求全公司产品必须满足无障碍标准,这背后有他的推动。
我请他帮 TWCMS 2.0 做无障碍测试,他认真跑了一遍,给了具体的改进建议。那个年代,国内几乎没有 CMS 在意这件事。
一个是 Y35U,乌云平台的知名白帽子。
安全这件事我格外看重。以前研究过几年网络安全,自己写的系统如果漏洞一堆,实在会有点打脸。其实早在 1.0 阶段,Y35U 就发现过一个低危漏洞,提交给了我。正因为这样,2.0 重构完成之后,我第一个想到的还是他。
他跑完之后告诉我:新架构攻击面大幅缩减,目前无法找到突破口。还说了一句让我记到现在的话——轻量级架构本身就是一种安全。
代码越干净,可以被利用的地方就越少。这句话,和我从黄敏那里学到的东西,其实是一回事。
编辑器用的是百度 UEditor。后来百度官方把 TWCMS 列进了合作伙伴名单,和 Z-Blog、联想、金山联盟这些产品并列。
TWCMS 2.0.3 正式发布于 2014 年 5 月 5 日。
五、同台
2015年12月,我向 PHP 全国大会创办人高春辉建议,邀请 PHP 之父 Rasmus Lerdorf 参会。后由鸟哥惠新宸出面促成,2016年5月,Rasmus 亲临大会,国内许多 PHP 从业者,第一次见到这门语言的缔造者。
大会需要讲师,我向高春辉举荐了黄敏。
他是那种只愿意待在幕后写代码的人。我说可以借机推广 Xiuno BBS,他无动于衷。我又说:人这一辈子,可能就这一次,能和PHP之父同台。
他沉默了一会儿,说:行吧。
讲师评选组投票,他被选进了上台讲师名单。
六、亦师亦友
后来我写了一篇国内主流开源 CMS、BBS 程序的性能对比测试文章,被很多网站转载。文章里写到了 Xiuno BBS,也写到了测试数据。
黄敏这个人,亦师亦友。
他让我第一次真正意识到,代码可以写到什么程度。不是靠功能堆出来的厚度,而是靠克制和理解堆出来的干净。
大道至简,不是一句口号。是你见过真正简的东西之后,才懂得的四个字。
← 返回首页