詳談Telnet BBS的實現
在遠程應用中,我們不得不提一下BBS。Telnet BBS,是我們通常登錄BBS的手段。這里我們就來詳細看一下。我們是如何遠程登錄論壇的。那么我們現在提到的 BBS ,通常指的都是Telnet BBS ,用一個 term 軟件連接上,就可以看到文本的界面,比起如今花哨到無以復加的 WWW BBS 們來可謂是簡陋到了極點,然而就是這樣的 BBS,無數人每天面對它長達兩位數小時還樂在其中,恐怕 UI 設計專家們知道也要氣到吐血。
也不時有人發表預言,預言 Telnet BBS 將很快消亡而被更加富有表現力的WWW BBS 全面取代,只是年復一年,當年的預言者已經消失不見,BBS 上的用戶數目卻翻了一番又一番。。。這就是 Telnet BBS 的魅力。 Telnet BBS 系統數目眾多,但是從根源找起,大致可以分成兩大家族,Firebird BBS 和 Maple BBS,在大陸 Firebird BBS 的變種占據了絕對優勢,在臺灣地區則是 Maple BBS 的天下,由于臺灣地區計算機發展歷史比較長,因此 BBS 的人氣也比大陸高,同時上站人數過萬的站點有好幾個,不過大陸畢竟有著人口優勢,近年來教育網幾大 BBS 的人數也迅速增長。
下面我們就分別介紹這兩大 BBS 家族。
首先是在大陸最為流行的 Firebird BBS ,最有名的 SMTH BBS, YTHT BBS, Firebird 2000 三大流派都是由此而來。很久很久以前,有那么一群大學生,也可能是科研機構的研究員什么的,他們整天在Unix 主機上面打滾,覺得要是能在主機上面做一個論壇樣的東西多好,于是他們就寫了一個命令行程序,運行這個程序,操作者可以在界面下面留言,為了讓多個人同時可以操作這個系統 ,他們把這個程序設置為系統某個用戶的 shell ,每個 telnet 上該主機的用戶,只要使用這個用戶的用戶名和密碼登陸,就可以進行交流。這就是 Internet BBS 的雛形。經過一段時間的發展,這個系統具有了相當多的交互功能,用戶不僅可以留言,還可以互相發送信件,發送信息,看到同時在線的用戶等等。 BBS 系統的開發者們為了讓更多的人能使用這個系統并完善之,將BBS 系統以開源協議發布于網絡上面。只要擁有Unix 主機,就可以取得源代碼并安裝BBS 系統。因此BBS 系統以很快的速度發展起來。
在眾多BBS 系統中,某個叫做 Pirate BBS ,經過某些人修改后叫做 Eagle BBS 的分枝,流傳入了臺灣地區,交大資訊工程系從他發展出了 Phoenix BBS,Phoenix BBS 是如今大部分中文 Telnet BBS 系統的祖先,然而它的名字卻遠不如其后輩響亮,在它的基礎上由中正資工進一步修改的 BBS 系統,被賦予了那個大陸 BBS 開發者耳熟能詳的名字――Firebird BBS。應該說, BBS 系統在傳入臺灣地區時候雖然功能還比較簡陋,但是 BBS 系統的基本架構已經定型,比如多進程模型,共享內存信息交換,利用系統信號來傳遞呼叫消息,用文件存儲文章和索引等,這些設計在現在的 BBS 系統中大部分還在沿用,其中不少設計即使現在來看,也是相當標準有效的多進程 Unix 服務器設計。
Telnet BBS 是一種流行于大學和研究機構中的電子公告牌系統,和時下流行的Web BBS 系統不同,BBS 的界面采用純文本方式表現,用戶使用終端軟件連接BBS 系統,文本界面在服務器端生成并發送出來,客戶端軟件僅原樣顯示文本內容,屬于一種瘦客戶機的應用。Telnet BBS(后面除非特殊提到,否則簡稱BBS)在臺灣地區和大陸的教育網地區比較流行,比較大規模的站點在線人數一般都在萬人以上。由于歷史原因,BBS 系統采用的是Unix 下相當傳統的1:1 多進程模型,每進程處理一個連接的模型,此種模型的好處是服務相對比較穩定,不會因為一個用戶出錯導致整個系統的不可用,但是也帶來耗費資源較多和進程之間通信比較困難的問題。BBS 服務器端的復雜邏輯也使得分布式設計很難實施。因此BBS 通常是單機承擔幾乎所有負載,大陸地區較大規模的BBS 服務器上經常同時保持超過7000 進程,臺灣地區的BBS 站甚至有并發20000 進程以上的紀錄。我們在維護大型bbs 站點的過程中,積累了一些優化和維護如BBS 這樣高并發進程服務器的經驗,考慮到1:1 進程模型服務仍然有很廣泛的應用,在這里寫出和讀者共享。優化服務器是綜合性的工作,不僅需要修改代碼,還需要調整系統參數,包含有很多瑣碎的內容,根據目的來講,大致可以根據節約資源的類型分為磁盤IO 優化,內存優化,和CPU 優化等幾方面。