網站速度的真相
您的上網可以更快
上一篇高登教大家「找出最快的 facebook 主機」，相信很多人試了之後會有一大堆問號？？？
為什麼連到比較遠的美國 facebook 主機反而會比較順，是什麼原因造成這種現象？
事實上有許多人都有「網站呈現的速度跟網站主機的位置有關」這種觀念，但是您知道嗎？網站主機位置並不是網站速度的唯一因素，這一點我相信您已經實際體會到了，不是嗎？
影響網站速度的因素
這篇文章要來探討一下如何讓網站以最快的速度呈現在網友的瀏覽器，我先歸納幾個因素：
1. 網站主機的地理位置
2. 網站主機連線的頻寬
3. 網站主機的硬體規格
4. 網站佔用的主機資源
5. 網站主機程式的設置及優化
6. 網頁資料的大小
而這些因素是環環相扣的，只要其中有一項表現不佳，網站速度的整體表現就會差很多，現在我一一解釋每一項因素的影響。
網站主機的地理位置
這就是一般人認為網站主機在台灣的會比在國外快的刻板印象，但是您知道嗎？高登工作室開站五年多來，除了剛開始主機在台灣以外，已經使用美國主機有四年多的時間了。
那您在瀏覽高登工作室網頁的時候會覺得慢嗎？會讓您馬上想到這個網站是放在國外的？
我想我不說您應該都不知道吧？
所以網站主機的地理位置並不是決定網站速度的唯一因素，而且重要性比起下列的因素可能都還要低。
除了一種例外：當台灣跟美國之間的網路不通的時候，那就會有很大的影響了！
網站主機連線的頻寬
當您家裡動不動就是 50m, 100m 的網速在上網的時候，網站主機對外的頻寬會比第一項因素來得重要。
曾經有台灣的主機商來找高登合作，想叫我將網站寄放在他們的主機，但是我看了看他給的規格就沒再談下去了。
因為他們提供的最大頻寬只有 1mb？！
以 1mb 的頻寬，多幾個人同時瀏覽本網站就會互相影響，而且大家用高速頻寬連到低速網站主機，所得到的網速當然就是你跟大家均分那 1mb 之後的速度，您想那會很快嗎？
這就是大家常在講的網路塞車最主要的原因：就好像高速公路連續假期湧入太多的車輛，遠遠超出它能負擔的流量，這樣百分之兩百一定塞車。
所以高速公路避免塞車的一個作法是：「增加道路線數」，這就是跟頻寬一樣的東西。
四線道可以容納的車流一定是兩線道的兩倍左右，這一點大家應該同意吧？
但是一般在台灣的網站因為基礎建設的頻寬值本來就比國外低很多，所以會把公路的線數減少（頻寬降低），這是目前台灣網路建設的最大問題所在。
網站主機的硬體規格
網站主機也是跟您用的個人電腦一樣一直在出更新更快的規格，您應該不知道在台灣主機商的機房裡面，超過使用四、五年古董主機的一大堆。
更別提國外主機已然慢慢在普及的 raid 磁碟陣列，甚至是用固態硬碟 ssd 組成的磁碟陣列。
還有 cpu 的運算效能也是差很大，如果你家裡新的 i7 四核心主機跟舊的 p4 主機做同一樣一件運算的作業（影片轉檔或算 3d 圖），那花費的時間會是差好幾倍的。
所以新規格的主機一秒鐘可以處理的程序數目，是那些古董主機的好幾倍，這也是影響網站主機速度的另一個重要因素。
網站佔用的主機資源
但是就算是採用了最先進的硬體，如果一台主機放100個網站跟放1000個網站您覺得哪一個會比較快？
用膝蓋想也知道同一台主機放越少的網站速度會越快！
但這個比較是大家的網站規模都一樣才有意義，因為一個大型的網站所吃的資源可能等於1000個小網站所別的資源。
而這也就是一般虛擬主機 virtual host 跟 vps 甚至是獨立主機的差異：一般低價的虛擬主機是所有網站共用資源的，當同一台主機有耗用極大資源網站的時候，其他的網站速度就會受到拖累。
而好的 vps 主機則會保證每一個網站都能保有一定百分比的資源，所以比較不會被其他網站拖垮。
這也就是 vps 主機會比一般虛擬主機還貴的原因：因為主機商能賣的口數有限制，比較不會像虛擬主機一樣嚴重超賣。
網站主機程式的設置及優化
網站主機的程式也跟您家裡用的作業系統一樣有好壞之分，好的作業系統可以讓您用最少的硬體資源達成相同的工作。
而這個部份就是網站系統管理員要作的功課了，在相同的硬體條件下，一個優化良好的主機程式環境，可以讓網站同時瀏覽人數增加好幾倍，您相信嗎？
事實上電腦軟體產業也跟硬體產業一樣，每年都會進步許多，甚至以前許多人想都不敢想的叢集主機、異地備援都已經可以用很少的費用就達成。
還有現在也有許多台灣的網站主選擇國外的內容傳遞網路 cdn （例如 cloudflare）來分擔大部份的網站負載，這也是主機程式差異的代表。
雖然有人對台灣網站掛國外機房的 cdn 嗤之以鼻，在您看完了這一篇的分析之後，或者也會同意這是一個不錯的作法。
網頁資料的大小
不同大小的網頁載入的速度一定會有差異，需要載入比較多檔案、圖片的網頁一定比較慢。
就算是一樣大小的圖片，有優化跟沒優化會讓圖片檔案的大小差好幾倍，所以載入網頁的速度也會差好幾倍。
而高登工作室這個網站因為太貪心，所以網頁放了一大堆的外加程式及廣告碼，但是您在瀏覽本網站的時候會覺得很卡嗎？
其實我是有一點故意讓網站那麼肥，為的就是測試主機的能耐。
如果很卡一定要告訴我喔！
facebook 的奇幻旅程
現在就以上篇文章所提到的找尋最快的 facebook 主機來說明這一趟旅程，首先我也是跟大家一樣，沒去特別注意到底連線的 facebook  主機在哪裡。
直到有一陣子一直感覺 facebook 瀏覽的速度很卡，常常按右上角的首頁要等幾秒鐘才會有內容出現。
於是就用 nslookup 去查了一下 facebook 的主機 ip 位址，於是發現到 google public dns 將 facebook 主機指向了香港的機房。
我就以這張國道５號的替代道路圖來說明一下：
!圖片來源：交通部高速公路局
本來 hinet 都是叫你走北宜公路從台北到宜蘭，但是我卻發現了一條捷徑可是 hinet 都沒有叫大家走的國道５號（香港線）。
於是我就偷偷地走了國道５號一段時日，而且速度真的也都飛快，直到暑假一開始國道５號的塞車惡夢就來了。
原因可能是太多人大陸網站看連續劇或是影片，這時候我終於瞭解為什麼 hinet 不敢指引大家走比較近的香港機房的原因：台灣連香港的頻寬嚴重不足，甚至還要分一大部份給去大陸的流量。
最後山不轉路轉我又找到了日本這條路線，走起來竟然意外的順暢，讓人在一種走越遠反而越快到達的驚喜。
這就是最後找到的一條又遠又快的路：北濱。
我推測原因有兩個：1. 日本連到美國的頻寬足夠大 2. 日本 facebook 的使用者不多，所以 facebook 走這條路就很順（在日本比較紅的社群是 twitter）。
根本的解決之道
或許您又會有疑問：facebook 能在香港設機房，難道不能在台灣也設機房嗎？
問題的癥結還是在 hinet，因為一定是雙方的條件談不攏，要不然 hinet 怎麼會要大家連 facebook 都出國，浪費那「貴森森」的國際頻寬呢？
我甚至曾經去參觀過號稱耗資上億元台幣，本來要當 facebook 台灣資料中心的機房，本來大家都有這個計劃的，但是為什麼喊卡就不是我們這局外人能瞭解的。
所以我們可以要求不管是 facebook, hinet 甚至是任何一家電信商快點把 facebook 台灣機房建起來嗎？
還有那先前說得很好聽的 google 台灣機房，不知道是雷聲大雨點小？還是快要下大雨了？
大旱望雲霓啊！
或許「youtube 很卡嗎？試試這一招看看」可以先解大家的渴。
脆弱的網路
最近的網際網路是多事之秋，除了上次提到的因為一台故障的ups讓台灣百分之八十的連外線路掛點之外，國外也連續傳出推特、蘋果、臉書甚至是微軟的內部員工，因為 java 漏洞而被植入惡意程式，使得某些他們客戶的資料疑似外洩。
而就在這篇文章撰稿的同時，又傳出了 cloudflare 因為 dns 系統出問題造成全球幾十萬個網站因而斷線將近一個小時！
而我會想發這一篇文章的動機是因為收到了vps主機商發來的一封通知信：
!
信中說因為網路硬碟 san 系統出了一些問題而必需緊急計劃停機維修1-2個小時！
而事實上高登在前兩天就已經發覺這台vps有異常，所以已經先將這台vps上的網站搬遷到另外的vps主機，將這台主機空出來的目的是要好好查查看到底問題出在哪裡？
所以主機商的停機並不會造成我手下網站的任何損失，但是如果這是你的主機商，那你的網站在主機停機維修的期間，一定會是這樣無法連線的下場：
!
網站一定要有備援系統
如果你是個人網站、部落格或許可以忍受網站停擺半天或一天，但是如果這個停擺的網站是公司企業的網站，是幫公司賺錢的網站呢？
上個禮拜的是方電訊斷線事件就讓大家知道後果的嚴重性，而這次斷線造成的損失一定是很大的，我想應該沒有企業會容許這樣的事件一再重演吧？
但是從最近的事件看起來，不管是大企業還是小網站，對於「備援」這檔事好像都不怎麼關心。
不然怎麼會建設出一個全台灣百分之八十出口在同一點的網路架構呢？
說穿了就是有人省錢省過頭了，而為什麼會省到不該省的建設那要有勞大家一起來監督了。
備份不等於備援
或許很多網管人員會說：「我們網站都有備份啊！」
但是網站資料備份的目的是什麼？不就是在資料出問題的時候回復回來！
但是一般備份都只是在原地復原，那你有想過萬一原來的主機或是線路出了大問題，沒辦法在原地復原呢？這個時候就是備援使用的時機
我想大家都有電腦故障需要送修沒有辦法迅速修復的經驗吧？而網站的主機也是「電腦」所以也一定會有壞的時候。
而一般人會有網站主機不容易故障的印象，是因為一個好的主機商都應該有完善的備援計劃，但是這樣子你自己就可以省下備援的計劃了嗎？
就算是你的網站不是很重要，可以允許一兩天停機，但你應該有聽過某家主機商硬碟壞掉資料救不回來的故事吧？
所以你自己一定要再額外的執行備份，真的有必要的時候再利用你手上的備份，就可以將網站搬遷到其他的主機商那裡，這是一般網站管理員一定要作的事。
但是說到備援那就要多花錢建置一台備用的主機，在原有的主機或線路出問題時切換到備用的線路或主機。
也就是說資料是透過「異地備援」傳送到備用的主機隨時待命，在有需要的時候備用的就可以升級成正式的主機。
您自己也可以作異地備援
但是一般的網站應該是不會採取以上的備援方式，因為備援的成本比較高！
而我這邊為什麼有備援的主機？其實是因為從事電腦相關行業這麼多年，看到過太多血淋淋的案例所致。
我深切的明瞭備份的重要性也認真地執行這個工作，而不是像許多人只會用嘴備份！
所以我從很早開始都是手上保持最少兩台主機可以互相支援，而且每天利用排程工作將兩台主機的資料互相備份。
在其中任何一台主機出問題時，只要改一下 dns 的設定就可以讓備援主機上線運作。
而備份/備援系統的最高境界就是設好了之後就忘了它的存在（事實上還是要定期檢查一下備份的資料有沒有問題），等到要用的時候就拿出來用就好了！
身為網站主或是網管人員的您不妨也可以考慮我這種作法，如果你人面夠廣的話，跟朋友的主機互相備援，你只要花一點時間設定一下就好也不用多花你的錢。
不過備援最好是異地，否則當出現大規模的當機時，你就會知道你的備援是本地還是異地了！