星期五, 十月 06, 2006

telnet-based BBS八卦 section 2 (原创)

说明:本系列文章,作者为Hok-men Chan;本系列文章纯粹yy,纯粹八卦;除特别标出外,在2003年11月至2004年3月间写成。并且,本文的发布与再发布均须遵循GNU Free Documentation License。

标 题: telnet-based BBS八卦 section 2 (原创)
(Wed Mar 31 04:59:54 2004)

telnet-based BBS八卦

Author: Hok-men Chan ( hokmen (dot) chan (AT) gmail (dot) com )

License: GNU Free Documentation License
(link: http://www.gnu.org/licenses/fdl.html )

Copyright:

Copyright (c) 2004 Hok-men Chan
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

2. telnet-based BBS和数据库

以前有人认为,要让目前的telnet-based BBS支持数据库,因为可以让BBS的文章搜索更有效率,可以利用数据库的分布式特征。

但我有些问题和疑问:

2.1 telnet-based BBS能用到多好的硬件?

telnet-based BBS,目标是快速和流畅的交流信息,特征是频繁和密集的磁盘i/o,平民化的telnet-based BBS有必要用Fibre Channel和SAN吗?
就目前来说,单机的raid5+scsi仍然是性能价格比最好的存储解决方案。

BBS 的文章存储,能用到>10台机器的机群吗?我觉得目前BBS最好的存储仍然是依赖x86(或者x86_64)结构的机器,成熟而且成本相对较低。如 果是x86体系,绝对有可能用到>10台机器。但不可能发展到有类似于google那种恐怖的主要用内存存储搜索数据的机群。

但是,如果存储方案选择的是不在文件系统上进行分布,而在数据库上进行分布,可惜的是我知道现在还没有像IBM的share-nothing技术那样能真正支持分布式的开源的数据库系统。

2.2 telnet-based BBS的目标和数据库的目标有些差异

我 觉得数据库的优点和目标时是简化和数据搜索、存储有关的程序设计,稳定地、完好地完成任务。目的是完成任务,而对时间不具有紧迫性。也就是说,如果有同样 一个任务,一个设计目标是在2个小时内完成时有99.9999%的可靠性,另外一个设计目标是在1小时内完成这个任务时有99.99%的可靠性,数据库的 设计者和维护者会选择前者而不选择后者,但BBS的设计和程序开发会选择后者,甚至用更短的时间内完成而牺牲一些可靠性。

2.3 数据库能胜任那么频繁的读写i/o吗?

我 认为,像telnet-based BBS的讨论区这么频繁的读写,一台单机但用fs来存储的效率和十台机器以上的分布式数据库相当。目前mysql严格来说还不算分布式数据库,它的默认的 连接数量上限是100个并发连接,而使用带NTPL(是不是这样子拼的?)的glibc优化编译的mysql最高可以支持数k个并发连接,但我想,在十台 以下的机器规模上,性能价格比还是用文件系统存储好。毕竟需要做的仍然是节省读写i/o,无论用文件系统来放讨论区数据还是用数据库来放。

telnet-based BBS和以数据库为依托的webforum相比有个优势,一个版面能挤进特别多的id,据说ptt曾在它的棒球版创造过最高4xxx个id同时浏览一个版 面的记录,如果用数据库来做,要用多少台机器或者什么级别的机器才能承担得起这么高的i/o和访问量?不要告诉我要用大中小型机来做这件事情。

当然了,如果是精华区和文摘区这种非常不频繁的读写,的确可以放在数据库里面,听说smth的精华区就是存放在bbs主机之外的另一台数据库服务器上。

另外,文章题目、编号、文章分类索引等,可以在文本方式存放外再放一份进数据库,以方便进行全站检索。

但确实不适宜把整个bbs的所有文章和所有组织结构都塞进数据库,或者什么都扔给数据库去做。

2.4 BBS文章用数据库存储的思考是怎么来的

那 个时候的telnet-based BBS,firebird系列,仍然只是数百id上千id的规模,maple系列,顶多也只有2000-3000个id左右,机器还是pentium级别 的为主,既然机器限制,那么就进行分布吧,但如果开源的分布式文件系统的读写效率不能胜任,那最省人力物力的解决方案就是依靠数据库的分布式特征了。但问 题是,那些成熟的分布式数据库都是商业的,价值不菲,尚没有成熟的开源的分布式数据库。这样,把telnet-based BBS从文件级的存储转到用数据库的存储的想法出来了好多年,zhch@bbs.nju也做过for mysql的telnet-based BBS雏形,但始终没有成熟的稳定可靠
的成品出来。

现在的telnet-based BBS的代码已经进行了非常苛刻的优化,节省更多的内存,大量使用mmap()或者/dev/shm来加快访问速度,拥有更多的功能,新部署的机器, cpu频率往往>1g,内存往往在4g或者以上,在讨论区文章存储方面就实在没必要用到数据库这么大成本的东西。反而,基于文件的分布仍然是可以值 得考虑的。后文将有一章专门对此进行讨论。