- 主题:关于合力开发第三套bbs访问接口的建议(草稿)
目前国内的bbs基本都是火鸟系统,基于telnet协议和http协议。
1)telnet接口:核心思想是将远程的用户端虚拟为一个键盘和一个虚拟显示终端,
这种接口的所有的交互都是基于过程;每个用户对应一个socket连接、一个进程。
当用户达到五位数时,一般的系统难以承担运行负荷;
2)http接口:对于超时的控制没有很好的解决,只能一般都使用间接手段;
对此我了解不多,我只想针对telnet协议进行一些讨论。
现行的telnet接口,结构日渐陈旧,个人认为对于超大网络社区效率偏低,
对于bbs这种特定的信息服务不具备针对性:
(1)整个的交互是基于过程的,导致大量非必要运算和流量。例如,用户要想在
bbsdev版发表这篇文章,大多数用户都会先进入0区,找到bbsdev版,然后进入该版,
敲入ctrl+p,然后填写标题,再然后确定文章的属性,再然后才能编辑文章内容;
通过引入协议指令,可以避免这一问题。
(2)服务器承担所有的运算载荷。所有的运算处理都是在服务器上进行的,例如,
编辑文章,发送email等等,占用了绝大部分的处理能力,而telnet接口没有考虑利用
用户端的处理能力,来减轻服务器负荷;
(3)没有缓冲机制。主要是文件缓冲,针对bbs,大多数版面的绝大多数历史文章
都是非常稳定的;另外,很多用户很多情况下都是在几个版面、文章之间来回切换。
有效的对这种特性加以利用,势必可以大幅度减少网络I/O,减轻服务器的负载;
(4)结构不清晰。要增加一个新的功能就要考虑从输入到输出,以及和用户的交互
界面等的若干细节,只要任一功能运算出现错误,就会出现异常退出等问题。
基于以上考虑,在此提出我的建议:
(1)为bbs设置一种专用协议:bbs协议。并为这种协议开发专用的终端,这样可以
有效解决上述的(1)(2)(4)问题。初步估计了一下,指令数不会很多,这种
可以进行有效的扩充和升级;ptt利用底层浏览器,实现了一个自己特色的简单浏
览器,这种做法比较有新意;
(2)在bbs协议中增设缓冲机制。主要是对于版面列表、文章列表等内容的缓冲,
当然还有精华区、个人文集等类似数据体。这样,文章、精华贴、邮件下载就很
变得很简单了。
(3)将特殊服务、游戏、穿梭等内容作为一个独立的、与版面服务等重的服务,在
协议中,单独加以设计,因为这一部分相对变化较快;
(4)在“分区”这一概念之上,增设“主题”概念。版面服务是一个主题,服务是
一个主题,以后可以考虑的社区网络游戏也是一个主题,等。
(5)服务器断数据存储仍旧沿用现有结构。主要是为了平滑过度,但要考虑兼容
数据库存储方式以及多机分布存储,这样有利于实现信息共享。
(6)抛弃一对一的进程/用户服务机智。参考apache的进程池运做方式,在一个进程
内容纳提供16个服务线程,由select监视用户I/O,一旦发现,即将其生成一请求交
由任一空闲线程处理并返回结果。由于select监视数量有上限(1024),可以将每个
进程的用户数限定为1000,这样5万用户即需要50进程。
(7)线程内存尽量采用静态分配,减少系统符合。
(8)着力建造面向cernet用户的大型网络社区,不能只是一种版面服务。
需要着重考虑的问题:
(1)bbs协议的设计;
(2)数据的并发访问控制:需要建立结构化的锁机制;
(3)bbs协议无缝升级:考虑增加版本控制,自动升级的方式;
(4)xml的使用:希望可以用来解决数据结构化的问题;
**************************************************************
具体开发可以分几步:
(1)先构建基础bbs协议,实现分区、版面、文章(含邮件)、精华区(含个人
文集)的访问:代码量肯定会比现有的telnet接口小很多,因为界面、交互等相关
代码可以全部省掉,而这一部分在telnet接口中是占非常大比重的。并且开发这样
的框架,不需要对现有bbs接口有多少了解,门槛很低;
(2)基于bbs协议,建造其他服务,扩充bbs协议指令;
以前也曾经看到过线程牌bbs的提议,但都只限于讨论,希望对此有兴趣的网友,
能够联合起来做点事情,建造一种面向超大网络社区的BBS服务,取代台湾框架。
欢迎回复或者站内email,谢谢阅读。
--
FROM 218.1.126.74
线程只是一个方面,理论上可以减少上下文切换时间,共用地址空间的优点
特定于bbs这种服务,文件缓冲也是一个可以优化的主题
用户操作界面相关的处理也可以省掉,交由用户端自行解析,有望减小服务器负荷
BBS的I/O是上载远小于下载,这一特性也是可以考虑利用的
【 在 lepton 的大作中提到: 】
: 线程bbs已经有人写一个了
: 【 在 peacock (孔雀@ytht) 的大作中提到: 】
: : 目前国内的bbs基本都是火鸟系统,基于telnet协议和http协议。
: : 1)telnet接口:核心思想是将远程的用户端虚拟为一个键盘和一个虚拟显示终端,
: : 这种接口的所有的交互都是基于过程;每个用户对应一个socket连接、一个进程。
: : 当用户达到五位数时,一般的系统难以承担运行负荷;
: : 2)http接口:对于超时的控制没有很好的解决,一般都使用间接手段;
: (以下引言省略...)
--
FROM 218.79.100.157
我也感觉现在的bbs内容越来越多,就像滚雪球
但基础的那些机制或者说框架没有变化
大多数站点都疲于查漏补缺
前几年的讨论我也看过一些,中心思想是用线程取代进程,个人觉得仅仅
这样是不够的,投入产出比小,只是意图减小进程上下文切换时间、共用
地址空间等等,基础的框架没有变化。lilybbs的zhch尝试用数据库存储版面,
可惜我没有使用过,遗憾。
【 在 windtear. 的大作中提到: 】
: 是这样的
: 以后进入开发的门槛会越来越高
: 数据和代码越来越混杂在一起
: 动一处而牵全身
: 前一段类似的讨论也不少
: 不过也只是讨论讨论
: 没人做啊
: 除非他把上帝挟持了
: 【 在 slowaction.bbs@bbs.tju.edu.cn.no.spam (王百万) 的大作中提到: 】
: : 中国的bbs站不过100多个
: : 有能力独立进行大规模开发的就很少
: : 很多站的维护工作都是为了正常的运行
: : ...................
--
FROM 218.79.100.157
线程只是一个方面,理论上可以减少上下文切换时间,共用地址空间的优点
不知道你所说的那种线程bbs是否源自以线程取代进程运行的思路(还是1对1模式)
如果是那样,那和我们的设想还是有很大区别的。我们设想是以限定数目
(例如16个)的线程服务小于1000个的用户连接,每个线程能处理的只是协议指令。
特定于bbs这种文件信息服务,文件缓冲也是一个可以优化的主题
用户操作界面相关的处理也可以省掉,交由用户端自行解析,有望减小服务器负荷
BBS的I/O是上载远小于下载,这一特性也是可以考虑利用的
【 在 lepton 的大作中提到: 】
: 线程bbs已经有人写一个了
: 【 在 peacock (孔雀@ytht) 的大作中提到: 】
: : 目前国内的bbs基本都是火鸟系统,基于telnet协议和http协议。
: : 1)telnet接口:核心思想是将远程的用户端虚拟为一个键盘和一个虚拟显示终端,
: : 这种接口的所有的交互都是基于过程;每个用户对应一个socket连接、一个进程。
: : 当用户达到五位数时,一般的系统难以承担运行负荷;
: : 2)http接口:对于超时的控制没有很好的解决,一般都使用间接手段;
: (以下引言省略...)
--
FROM 218.79.100.157
具体的用户接口与协议实现没有多大关系
可以做到兼容现有的操作方式,对具体使用不会有多大影响
【 在 amino (xixi) 的大作中提到: 】
: 现有的telnet和www方式的bbs/forum有个特点就是
: 用简单的telnet client和浏览器就可以实现,而你的新
: 协议会导致用户使用困难。需要特定的客户端才行。
: 还有,其实这些与newsgroup以及现在的rss feed有不少相似
: 之出,有没有考虑使用现存的协议呢?
: 【 在 peacock 的大作中提到: 】
: : 目前国内的bbs基本都是火鸟系统,基于telnet协议和http协议。
: : 1)telnet接口:核心思想是将远程的用户端虚拟为一个键盘和一个虚拟显示终端,
: ...................
--
FROM 202.119.32.102
请看一下2643篇
在发贴之前我也看过一个线程bbs,大概是用线程替换进程,还是1对1的过程交互模式
这和我的设想不一样。除了线程,还有一些别的主题值得一做
我设想(1)去掉过程交互,(2)去掉1对1模式,(3)增设缓冲,(4)用户端承担部分负荷,
例如文件的编辑、文章的上下翻页阅读、版面的来回切换等,(5)服务器尽量只提供数
据更新服务。等,说起来比较碎.
目标是把服务器端转变为一个较纯粹的数据服务器,避免非必要的处理
至于后来冒出来的cq66,我没有看到过,不清楚细节
【 在 yuhuan (优秀青年讲师) 的大作中提到: 】
: 兼容目前的现有操作方式的线程bbs有人写过了
: 【 在 peacock (孔雀@ytht) 的大作中提到: 】
: : 具体的用户接口与协议实现没有多大关系
: : 可以做到兼容现有的操作方式,对具体使用不会有多大影响
: : ...................
--
FROM 202.119.32.102