如何決定主機是否要分流?

disp.cc 是個很有特色的電子布告欄網站,它用http + Ajax做出類似BBS的瀏覽效果,而且比BBS更好用。作者是台大電信所畢業的高材生。最近,disp.cc的人氣愈來愈高,我也順便看了一下,disp.cc的站長,knuckles是如何處理分流問題的。

引述站長在他個人的文章中,寫下的效能調校方法:

disp.cc load balancing structure

不過弄了之後發現,在一樣的價錢下,一台16G + 一台8G 的效能,比一台 24G 的效能好太多了 之前用單獨一台24G時,記憶體還空著很多,系統負載就飆高了… 看來要增加使用者不是單純加記憶體就好了

disp.cc的站長是租用日本的主機,所以有RTT上的優勢。而且該日本的主機商有提供一些高級的分流工具,例如node balancer,所以站長也可以相對容易完成分流這件事。雖然我個人認為,disp.cc站長做的決策非常的正確,但是,我卻不會建議我所有的客戶採用類似的解法。要說明這個觀點,要先從disp.cc的web server 設定開始講起。

Disp.cc的web server架構

在我寫這篇文章的時間點,disp.cc使用的web server是apache 2.2.15,PHP/5.4.20。雖然說,我沒有進一步的效能調節資訊,但是從站長提供的資料,我會猜測,之所以會發生『單獨一台24G時,記憶體還空著很多,系統負載就飆高了這種情況,這跟apache C10K問題有關。

apache C10K問題

這個問題是這樣子產生的:對於要寫網路程式,最直覺的寫法,就是用阻塞式I/O並且配合多執行緒。( blocking I/O & multi-thread ),又稱之為thread-model的寫法。這樣子雖然是最簡單最直接的寫法,在連接數(connection number)到達一萬(10k)時,因為大量的執行緒不停地做環境切換(context switch),導致增加硬體也無法提升效能的窘境。Context switch帶來的效能損耗會隨著執行緒(thread)愈多愈加嚴重,終於在10000個連接數時,到達崩潰的時間點。以今日的瀏覽器,往往輕易地可以產生6~10個平行的連接數,同時上線人數到達2000人時,這個C10K現象就會日益嚴重。

C10K問題的解法

相對於傳統的阻塞式I/O和多執行緒寫法,另一種寫程式的寫法,是使用非阻塞式的I/O,單一執行緒處理大量連接的寫法。代表作品是nginx。( nginx為了可以發揮多核心處理器的效能,也是可以生成多執行緒的,但是本質上,nignx還是使用event-model來處理連接數的問題。) 我的客戶中,有同時1萬人上線的大論壇,用了nginx之後,就可以用獨立主機(dedicated server)順順地跑。

disp.cc這個站,雖然沒有使用event-model來處理,但是因為分流的緣故,每一台機器上的connection數剩下一半,如此一來,就巧妙地迴避了C10K問題。除此之外,一般而言,VPS的架構,不同的VPS,硬碟的IOPS也是獨立的。所以這種分流也迴避了硬碟I/O的瓶頸。

VPS 與 Dedicated Server

從價格上來說,一定是VPS便宜。但是真的要講性價比的時候,獨立主機(dedicated server)因為可以使用百分之百的硬體資源,反而可以有更高的性價比。也就是說,同樣一塊錢買到的硬體運算效能,Dedicated Server一般而言是大於VPS。

獨立主機雖然性價比高,但是如果遇到了這種C10K問題,沒有使用event-model來處理,就變成一定要分流。而且這種時候的分流是不經濟的,因為如果主機上的資源尚未充分使用就分流,這就造成了資源上的浪費。除此之外,VPS比較具有彈性,如果5000個connection只要使用2G的RAM,我們可以輕易找到提供2G RAM的VPS。但是獨立主機的硬碟規格就不能如此隨意地客製化,獨立主機配合不同世代的CPU,RAM的大小會愈來愈大。

總結,如果某個大站的站長想要節省主機的費用,一般而言,使用獨立主機,可以比VPS省到30%~50%左右。但是,使用獨立主機時,就可能不適合參考disp.cc現行的分流方式了。

cpanel 排程教學(配合自動備份)

我們有一篇: 如何設定cpanel單一帳戶的遠端自動備分?
最後有提到,進ssh去做 crontab -e ,但ssh對於一般user會有操作上的難度,
所以在此,我們介紹cpanel的gui操作方式。

1. 登入 cpanel > 進階工作 > 工作排程 。

2. 請選擇"標準" 。

3. 新增排程 (我們現在是以每日為一次) 。

4.  確定已寫入。

 

註:
1. 隔天需要在進 ftp 查看,備份檔案是否已經產生。
2. 你的空間帳號,需改成ftp帳號,否則備份將無法上傳。

建立服務單

自2012-07月,unethost.com改使用whmcs這一套帳務控制台時,whmcs有內建一套ticket system(服務單系統),在此之前,都是由客服透過msn,e-mail…等,進行線上處理客戶問題。

msn是同步溝通的工具,對客戶是速度快立即性的回覆。在另一方面,我們為了提升回覆的品質,比如說,相當的技術問題,需由工程人員(或協力廠商)提供專業的意見,這時處理就會需要時間作業,這種情況下,使用msn就不是那麼的適用。

再加上,msn後來的版本不穩,或是每日的e-mail過多,都會導致回覆的速度變慢,漏信,降低了服務品質。

為了提升服務品質,我們直接參考國外的做法,使用ticket system。在國外,不論各行各業,很早就發生過這樣的問題(尤其是英國,美國,服務業已經相當成熟的地方),所以他們已經有著標準處理程序及系統,稱為 ticket system 或是 help desk。

在引導客戶的使用上,部分已習慣使用msn的客戶,向我們表達過,不習慣去改用服務單的連絡方式。簡單講,客戶習慣同步的溝通,而我們改用非同步的方式。

經過一年多的磨合,大多的客戶,都已能接受服務單的使用,並持續性的使用,
在此也要感謝,能配合我們去改版的客戶,由您的幫助,unethost.com才能持續的茁壯。

下圖是截至目前為止,處理的服務單截圖。已處理完成1493個服務單。
(系統一接收到資料,就存於資料庫,所以也不會漏信)。

 

open: 尚未處理的。
answered: 已回覆客戶,但未處理完。
closed: 已解決。
knowledge:  可轉為知識庫。

 

 

防 spam e-mail

大家應該有一種經驗,就是在網路上留下e-mail,很容易被掃去寄發廣告信,
在此我們介紹以圖檔方式,來顯示e-mail,不僅美觀,且還有著防止被機器人掃信的特性。

這套線上工具,稱之為: e-mail icon generator (中文為:電子郵件圖示產生器)

1. 瀏覽器開啟: http://services.nexodyne.com/email/

2. 填入您的e-mail ,請選擇相對應的免費點郵,並點下 Generate 。

3. 比如說,我們用 hello@gmail.com 則會產生相對應的icon 為: http://services.nexodyne.com/email/icon/0izXcr4%3D/BV2oKjY%3D/R01haWw%3D/0/image.png   , 也就是: 

4. 如果沒有相對應的e-mail可選,請改點選 Provider not available? Chick here! 

 

中文次域名的設置

我們在 http://unethost.com/host/idn-converter 有介紹轉換國際域名的編碼方式。有些客戶,會要求使用中文域名,是為了幫助瀏覽器上搜索及seo排名。經我們的測試後發現,原不是使用國際域名的網址,也能夠變化出中文域名的子域名(sub domain)。

以下是我們使用 cpanel 控制台的設定教學:

 

1. 首先,要在http://unethost.com/host/idn-converter 先產生出相對應的 idn (punycode).

 

2. 登入 cpanel 控制台後,點選子網域功能。

 

3.  將相對應的 punycode 填入,並建立。

 

4. 正式產生子網域。

 

5.  將 xn--unethost-eh0mj59aq49coli.tw-blog.com 貼到瀏覽器上,就會自動轉換成中文域名。