关于网上论坛

作者: 阮一峰

日期: 2009年10月29日

天,jQuery的创始人John Resig怒气冲冲地宣布,不再使用Google Groups

他写了一篇长达2000个单词的文章,详细解释了为什么。请注意,2000个单词啊,打印在A4纸上,足足有三页。像他这样炙手可热的顶级程序员,愿意坐下来,写那么长的文章表达不满,可见真的是忍无可忍。

我也是Google Groups的用户,他所说的那些问题,我都遇到过,所以对他的抱怨深有同感。下面我就谈谈我的看法。

一、Google Groups是什么?

为了帮助那些不熟悉这个话题的朋友跟上后面的讨论,我先简单介绍一下Google Groups。

它是Google公司提供的网上论坛服务,你可以利用它,快速架起一个多人讨论区,在里面发起新的话题或者回复别人的话题。更妙的是,它还有邮件列表的功能,可以用Email,张贴自己的发言或者接收别人的发言。

当然,从网上论坛的角度看,它的功能是比较弱的,与流行的论坛软件没法比。比如,它不允许对话题分组,因此没有板块功能,而且你不能在发言中插入图片,唯一的办法是发送附件。此外,它也不提供数据导出功能,基本上只要你使用了,就等于把所有数据都送给google公司了,自己没法再利用。

但是不管怎么说,它提供了基本的讨论功能,而且出于我后面要谈到的原因,大家依然愿意使用它。

另外,我也必须提一句,它别的功能也许不行,但是全文搜索功能绝对强大,不愧是google出品。

(插入语:Google Groups在国内好像被屏蔽了,有时就连加密的https连接都会断。欢迎大家告诉我,当地是否可以正常使用这项服务。)

二、Google Groups最大的缺点

John Resig最不满的地方,也是其他用户最不满的地方,就是Google Groups里面的spam(垃圾帖)实在是太多了。

我开设的讨论组基本上无人知晓,但是每天也会收到2~3条spam,不知道这些人从哪里找到我的网址的;John Resig开设的讨论组有2万个成员,属于著名讨论组,你可想而知他每天要收到多少条spam!

更可气的是,一旦收到了spam,你毫无办法,只能一条条手工删除,然后第二天还会照样收到。想一想吧,让一个顶级程序员,日复一日,手工对抗灌水机的进攻,将时间浪费这种事情上面,怎能不让他郁闷呢!

真难以相信,Google公司就听任spam横行,不提供任何有效的过滤措施,你唯一能做的,就是打开审核设置,在帖子发表之前对它进行审核。难怪John Resig要质疑,为什么Gmail可以自动过滤垃圾邮件,而Google Groups就做不到呢?这算不算产品歧视呢?

好吧,在走投无路的情况下,你只有打开审核设置了。但是,这样做虽然可以净化讨论环境,但是却让整个事情变得更糟了。首先,你的工作量增大了,你不得不手工批准每一条发言;其次,用户的感受变差了,因为没有人喜欢自己的发言被审查,有的用户可能会因此攻击你,与你大谈美国宪法第一修正案;最后,假定你的讨论组非常受欢迎,每过五分钟,都有用户从地球的某个角落跳出来发言,那么你去睡觉的时候,谁来审核呢?你只能任命一些管理员,让他们按照时区顺序分担审核责任,并且为他们制定出统一的审核政策,这就让论坛的管理和人际关系变得复杂了。

所以到头来,只能有两种结果,一种是你被累死了,另一种是你将论坛设置为封闭式,只有经过批准的成员才能加入和发言。

两种结果都无法接受,John Resig只好选择退出了。

三、项目开发者需要什么?

当你开发出一个项目以后,你需要有一个地方,与用户直接交流。用户提出问题,你来回答,就是这么简单。这就是你需要网上论坛提供的所有功能。Google Groups那么简陋,大家还是愿意用它,原因就在这里,因为你不想为了这么单纯的需求,自己去架设一个全功能的论坛。

试想一下,如果你自己搭建一个论坛,要干哪些事情:

1)你要选择一个论坛软件,但是一旦用上以后,就等于被绑架了。论坛软件的每一次升级,你都必须跟上;如果将来你想改用其他软件,或者原来的软件停止开发,你就要愁死了,因为这意味着,你不得不自己写程序去转换数据。

2)你要架设一个后台数据库,通常是MySQL,这就是说,你又多了一项管理数据库的任务。要知道世界上有一种人叫做DBA,他们的全职工作就是管理数据库,经常有半夜三点被叫到机房的经历,所以管理数据库真的是一种费心费力的活,不到万不得已,你千万不要把这种活揽到自己头上。

3)你不得不绞尽脑汁,将每一项论坛的后台设置都设好。我最喜欢的论坛软件叫做vBulletin,它的后台设置多达2000多项,大部分我从来没有搞清楚过。我曾经设想,要是我把每一项设置都搞清楚,我就可以去开一家VBulltin的咨询公司了。

所以,如果你选择自己架设论坛,你的精力就会被分散,你用于开发项目的宝贵时间,就被论坛的维护和管理消耗掉。

你的初衷只是要找一个可以与用户对话的地方,没必要把一切搞得这么复杂。既然使用Google Groups,能够在5分钟里搭好一个网上论坛,那么大家当然就去用了。遗憾的是,Google这个产品并不理想。

四、论坛软件的尴尬之处

John Resig的烦恼,在更深的层次上,我认为反映了论坛软件在开发上的困境。

今天的论坛软件,在模式上与10年前没有本质区别,主要功能和运作模式都是那时定下的。以国内市场占有率最高的Discuz!为例,最新的版本是7.0版,但是实际上它同最早的版本相比,除了功能更强大以外,没有太大的区别,两者都是在做同样的事情。

我不是说现在的论坛模式不好,而是说这种模式不适合进一步发展,所以开发就走入了死胡同,只能做功能的增强,而不能做模式的创新。

现有的论坛模式不具备可扩展性(scalable)。由于对数据的实时性要求太高,导致不能对论坛软件使用缓存,这就是说,基本上网上论坛都是一个单机系统,CDN和反向代理都用不上。单机系统的结果,就是论坛软件不可能负担太多的访问者。像vbullentin这样的软件,同时在线人数不能超过10000~15000人,否则就会有性能问题。不用打听你就知道,10000多人属于访问量比较小的网站,所以论坛都做不大。

如今的时代是Web 2.0的时代,它的特征包括提供API接口、前台界面的多样化和去中心化等等。Facebook和Twitter,都不把自己称为网站,而是把自己叫做平台,意思就是说,我只提供基础设施,随便你怎么造房子。我就常常想,论坛的2.0时代什么时候到来呢,会是什么样子,又怎么来实现呢?

五、论坛软件可能的创新之处

我记得,以前看到过有人提议,可不可以基于BT下载的模式(或者点对点协议),做出一个论坛。这样做的好处是,数据在用户之间进行交换,这样就不存在中心服务器了,因此论坛可以做得很大;坏处是一条发言想被所有人看到,也许有一个很漫长的数据交换过程,即时的对话和讨论基本上不可能发生。退一步说,usenet就是一个去中心化的讨论区,的确规模非常大,但是大家也知道,在上面讨论问题,效率不高。

我设想中,未来的论坛应该提供这样几个功能:

1)支持openID,这样就省略了注册步骤。

2)开放API编程接口,允许用户进行再开发,可以远程发言和调用数据。Google Groups如果开放API的话,防spam的问题就很容易解决了,还可以附加很多别的功能,我相信到时其他论坛软件恐怕都要死定了。

3)数据储存和前端逻辑必须分离。从MVC的角度说,就是Model(模型)要同View(视图)和Controller(控制)分离,只要把各自的接口规定好就行了。这样一来,数据的维护和平台开发都会变得非常容易。说实话,Amazon公司提供一种SimpleDB服务,你可以将数据都放到那里去嘛,然后前台的论坛程序,其实就干两件事:控制用户行为和同SimpleDB交换数据。

(完)