作者u39132003 (歡迎學妹發問。)
標題[轉錄]Re: [討論] PTT七萬人了....@@
時間Mon Jun 4 02:35:58 2007
※ [本文轉錄自 u39132003 信箱]
作者: MichaelHsin (BBS之蟲) 站內: Gossiping
標題: Re: [討論] PTT七萬人了....@@
時間: Mon Jun 4 02:27:31 2007
※ 引述《tonyhome (運功療傷OGC)》之銘言:
: 理想來說
: 一個server最多只有65536個port
: 也就是說最多只能開放65536個人連線到ptt
: 很好奇ptt是怎麼容納這麼多人的???
: 難道ptt有兩個server???
: 還是有其他技術???
沒有,因為一個 port 23 就可以服務很多人...
在 TCP spec 來看,理論上一個 port 可以接的 connection 是無上限,
但事實上每多接一個 connection,kernel 就得多吃掉一些資源來 maintain,
然後還有 userland 這邊會吃掉的資源,所以實際上當然會有上限,但這個限制不是
TCP spec 給的。
: → tonyhome:只要是TCP 就會有一個listening port等待client的request 06/03 23:09
: → tonyhome:並且指派另外一個connection port維持server和client的 06/03 23:10
: → tonyhome:連線狀態 偶臭了嗎???偶臭了嗎???偶臭了嗎???偶臭了嗎??? 06/03 23:10
錯了,listening 到 accept 接起來的 port 當然都不會變。
我想你是跟 socket lib 的 socket descriptor 搞混了吧。
用 socket() 建出來的 fd,bind(), listen() 之後,accept() 接下一個 connection
時的確會給你一個新的 fd 代表這一個 connection,原本的 fd 繼續拿去 accept()。
但這是 socket lib 的機制,fd 變了,connection 連的 port 還是一樣。
複習一下 TCP connection establishment(也就是 three-way handshaking)吧。
---
怎麼辦,這篇好像會被鄉民說沒八卦耶。
那來個八卦:
在很久很久以前,大約 1998 年或更早的時候,很多比較大的 BBS 站都遇到了總註冊
人數(不是同時上線人數喔)到了三萬多就上不去的問題,只好靠著砍很久沒上站的人
或乾脆停止註冊撐著,
原因是,這些站都遇到一個限制:子目錄數的上限 32767。
在發生這件事之前,每註冊一個使用者,系統都會開一個目錄 ~bbs/home/username 來
放那個使用者的信件、簽名檔, etc.,但是一般檔案系統的子目錄數是有上限的。
(接下來這段看不懂就跳過吧)
我們都知道(真的嗎? XD)vfs 裡面每個 inode 都有個 link count,當它減為零時
代表可以被真正刪除把空間釋放出來,而每個目錄剛建立時 link count 就是 2(上層
指向它一個,它裡面的 . 又一個),在它裡面多建一個子目錄又會加一(因為它的子
目錄裡有一個 .. 指向它),所以有 n 個子目錄 link count 就是 n+1(. 也當作子
目錄)。而 FreeBSD UFS/FFS 的 link count 欄位只有 15 個 bit,也就是最大值只
能到 32767。
而目錄裡的檔案並不會有 link 指回上層,所以理論上是無上限的。
當然,一個目錄裡的檔案或子目錄太多時,存取時間就會上升,所以一般(沒有
directory hash 的時候)放了幾萬個檔案你就會受不了了。
(技術細節結束)
怎麼解決呢?
很簡單,就多開一層,~bbs/home/A/ 放 A 開頭的使用者,~/bbs/home/B/ 放 B 開頭
的,依此類推。
但是說的簡單,當初 BBS 的 code 裡面直接寫死 access user home dir 的 code 到
處散佈,bbs 主程式裡面可能就有好幾個地方要改,utils 裡面又各寫各的,於是苦命
的站長們就只好一一去翻出來改好 XD
就這樣,大家又可以繼續註冊過著幸福(?)快樂(?)的日子了。
--
我覆蓋一張好人卡,結束這個回合
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
推 Assyla:不過註冊問題其實都沒啥在關心了吧,真正大的站就那幾個 06/04 02:31
→ Assyla:小站的人數不斷流失,加上很多年輕人比較喜歡網頁介面 06/04 02:32
→ MichaelHsin:我說的是 1998 年以前的事了啊 XD 06/04 02:33
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.47.171