現在已經很少有人想要學習網站架設或是想要架設網站來服務一些網友。如果想要架設一個「個人網站」或是「私人網站」的話,當然是至少需要「一台個人電腦主機」而且是可以24小時連續開機,從不關機的一台電腦主機,除非你想要架設一個每天朝9晚5,或是有空、心情好才開機的不定期網站。
在電腦上架設一個網站至少需要安裝2個Server伺服器:
由於「資料庫伺服器」因為需要在硬碟上(或是SSD固態硬碟上)搜尋大量的資料,通常都非常龜速,特別是MySQL(即使是目前最新的MySQL 8.0.15仍舊比MySQL 5.6.41更慢許多!)處理速度非常緩慢,而且也相當耗用CPU時間(不支援也不使用GPU加速)。
因此如果你的網站,在線上同時(所謂同時是指一秒內)有好幾十個網友,甚至是好幾百個網友同時開啟網頁,你就會發現Web Server會非常忙碌!特別是你的網站如果是使用PHP程式碼架設而成,由於PHP不支援多核心、多執行緒CPU,只能使用單一核心的CPU,就會遇到網頁開啟異常緩慢的問題!
當然,如果網站上的幾十位、幾百個網友,並不是同時開啟,而是分別開啟網頁,並且會停留在開啟的網頁閱讀文章、瀏覽照片的話,只要不是集中在「一秒內」需要完成許多工作,通常一台普通Core i7的電腦主機,都可以服務幾十位、幾百個網友,並沒有任何問題。
但真正的問題是,PHP只能使用「單核心CPU」而且MySQL又非常需要花費許多CPU處理時間,如果網站上真的「同時」有幾百個網友在線上開啟各種網頁、照片的話,你很快就會發現只有一台電腦是絕對不行!這時候就會開始朝向真正的「專業網站」開始思考。一個專業的網站,至少需要2台電腦主機:
這樣就可以有2台電腦、2個Core i7、Core i9(至少也必須是Core i5)的CPU,可以分別處理PHP與MySQL。而不會導致電腦上只有一個CPU卻必須同時做許多工作。當然,你使用的「作業系統」本身,也可能會消耗許多CPU與RAM資源,特別是Windows 10、Windows Server這種超級龐大的大型作業系統。
如果只有一台電腦主機,把全部的Server(至少要有Web與MySQL這2個Server)都安裝在一台電腦上,就絕對不會有每個Server之間的連線與資料傳輸問題,因為不需要連到其他電腦,都可以在一台電腦上,以超高速的傳輸速度來互相存取資料。可是,如果你使用「2台電腦主機」來架設一個網站的話,接下來又會面臨2台電腦之間的連線與資料傳輸問題。按照目前的網路設備來看,你想要連接2台或是更多台電腦主機,可以使用的方式只有:
雖然USB 3.0、USB 3.1的5Gbps資料傳輸速度比有線網路更快許多,但是USB只能用來連接週邊設備,無法用來連接2台電腦。
當Web Server與MySQL Server都安裝在一台電腦主機時,當然不需要連線到其他地方,只要直接使用localhost或是127.0.0.1就可以用超高速(甚至可能是1G網路卡的100倍~1000倍!)直接溝通Web Server與MySQL Server。
你可以看到透過localhost或是127.0.0.1的PHP程式的執行速度大約是0.0021秒。
macOS 系統使用的 PHP version 版本:5.5.38
連接的 MySQL Server 資料庫伺服器主機 IP 位址:localhost
MySQL Server 資料庫伺服器的版本:5.6.38 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:2
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:12
(最大 max_connections 連接數:151)
MySQL Server 伺服器的 Uptime 連續運作時間:0 天 8 小時 40 分 1 秒
macOS 系統的 Uptime 24小時連續開機日數:205 天 18 時 57 秒
PHP 程式的執行時間:0.0021610260009766
Web Server與MySQL Server都安裝在一台電腦主機時,很明顯無論是本機的127.0.0.1或是有線網路卡的IP位址,連線速度都差不多。
macOS 系統使用的 PHP version 版本:5.5.38
連接的 MySQL Server 資料庫伺服器主機 IP 位址:192.168.209.55
MySQL Server 資料庫伺服器的版本:5.6.38 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:2
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:12
(最大 max_connections 連接數:151)
MySQL Server 伺服器的 Uptime 連續運作時間:0 天 8 小時 39 分 46 秒
macOS 系統的 Uptime 24小時連續開機日數:205 天 18 時 57 分
PHP 程式的執行時間:0.0022940635681152
只有270Mbps的802.11n(第一代802.11n無線網路卡)的資料傳輸速度絕對比1G網路卡慢很多,但是Web Server與MySQL Server都安裝在一台電腦主機時,很明顯無論是本機的127.0.0.1、有線網路、甚至是無線網路的IP位址,連線速度都差不多。
macOS 系統使用的 PHP version 版本:5.5.38
連接的 MySQL Server 資料庫伺服器主機 IP 位址:192.168.209.155
MySQL Server 資料庫伺服器的版本:5.6.38 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:3
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:12
(最大 max_connections 連接數:151)
MySQL Server 伺服器的 Uptime 連續運作時間:0 天 8 小時 40 分 12 秒
macOS 系統的 Uptime 24小時連續開機日數:205 天 18 時 58 分
PHP 程式的執行時間:0.0022780895233154
透過只有270Mbps的802.11n無線網路卡,連線到另外一台電腦的MySQL伺服器主機呢?很明顯速度就慢很多,甚至只有「0.25秒」!幾乎比前面的「0.0022秒」慢113倍!
macOS 系統使用的 PHP version 版本:5.5.38
連接的 MySQL Server 資料庫伺服器主機 IP 位址:192.168.209.159
MySQL Server 資料庫伺服器的版本:5.6.41 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:11
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:34
(最大 max_connections 連接數:300)
MySQL Server 伺服器的 Uptime 連續運作時間:1 天 11 小時 16 分 55 秒
macOS 系統的 Uptime 24小時連續開機日數:205 天 19 時 01 分
PHP 程式的執行時間:0.25742197036743
上面是從BNW的網站主機連線到insoler的MySQL Server伺服器主機。如果改成從insoler的Web Server主機,透過450Mbps的802.11n(第二代802.11n網路卡)來連線到MySQL Server伺服器主機的話,傳輸速度會是多少?答案是「0.25秒」!幾乎與上面BNW主機的270Mbps的802.11n完全一樣!
macOS 系統使用的 PHP version 版本:7.1.23
連接的 MySQL Server 資料庫伺服器主機 IP 位址:192.168.209.159
MySQL Server 資料庫伺服器的版本:5.6.41 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:9
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:34
(最大 max_connections 連接數:300)
MySQL Server 伺服器的 Uptime 連續運作時間:1 天 11 小時 16 分 37 秒
macOS 系統的 Uptime 24小時連續開機日數:3 天 3 時 03 分
PHP 程式的執行時間:0.25669503211975
要特別說明的是「macOS 系統的 Uptime 24小時連續開機日數:3 天 3:03 秒」是因為在3天前的「4月2日」才剛剛安裝Apple釋出的安全性更新,並重新開機,所以電腦的uptime連續開機時間才會只有3天。但是BNW主機卻已經高達205天!
安全性更新 2019-002 High Sierra 和安全性更新 2019-002 Sierra 的安全性內容
請確認您已安裝適用於 macOS High Sierra 或 macOS Sierra 的安全性更新 2019-002 最新軟體版號。
安裝 macOS 版本的最新版號
適用於 macOS High Sierra 和 macOS Sierra 的安全性更新 2019-002 已更新。
如果您的 Mac 執行 macOS High Sierra 或 macOS Sierra,請更新 Mac 以使用 macOS 版本的最新版號:
macOS 版本 10.13 High Sierra 的最新版號為 17G6030。
macOS 版本 10.12 Sierra 的最新版號為 16G1918。
這些版號會回復數個前一個版號所沒有的安全性修正。
瞭解如何查看 Mac 上的 macOS 版本和版號。
瞭解如何更新 Mac 上的軟體。
發佈日期: 2019年4月2日
前面使用1G有線網路連接的話,只要「0.0022秒」而且還是使用「PHP version 版本:5.5.38」。使用的電腦只有Mac mini (Late 2009) 2.53 GHz Intel Core 2 Duo!
換成Mac mini (Late 2012) 2.6 GHz Intel Core i7的主機,竟然跑出「0.0083」大約更慢4倍的成績!為什麼比較新的電腦,而且還是4核心的Core i7,竟然比只有雙核心的Core 2 Duo還要更慢4倍?這是因為前面的「1G有線網路」其實等同使用本機localhost的連線方式,實際上根本沒有透過網路、網路集線器連線到另外一台電腦,當Web Server與MySQL Server都安裝在同一台電腦上的話,當然是速度會快很多!
macOS 系統使用的 PHP version 版本:7.1.23
連接的 MySQL Server 資料庫伺服器主機 IP 位址:192.168.209.59
MySQL Server 資料庫伺服器的版本:5.6.41 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:9
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:34
(最大 max_connections 連接數:300)
MySQL Server 伺服器的 Uptime 連續運作時間:1 天 14 小時 39 分 43 秒
macOS 系統的 Uptime 24小時連續開機日數:3 天 6 時 26 分
PHP 程式的執行時間:0.0083680152893066
不過,Mac mini (Late 2012) 2.6 GHz Intel Core i7的主機,如果使用「10G有線網路」的話,就可以跑出「0.0036秒」的成績,並不會比雙核心的Core 2 Duo,使用localhost的「0.0021秒」慢很多!
macOS 系統使用的 PHP version 版本:7.1.23
連接的 MySQL Server 資料庫伺服器主機 IP 位址:10.0.0.20
MySQL Server 資料庫伺服器的版本:5.6.41 版
Web Server 呼叫時中斷連線的 Aborted_clients 次數:0(沒有任何錯誤!)
Web Server 網路意外斷線的 Aborted_connects 次數:0(沒有任何錯誤!)
MySQL Server 現在的 Threads_connected 同時連接數:9
MySQL Server 起動後到目前為止的 Max_used_connections 最大同時連接數:34
(最大 max_connections 連接數:300)
MySQL Server 伺服器的 Uptime 連續運作時間:1 天 14 小時 59 分 12 秒
macOS 系統的 Uptime 24小時連續開機日數:3 天 6 時 46 分
PHP 程式的執行時間:0.0036118030548096
老實說「0.0036秒」的執行時間並不準確!因為很容易受到作業系統本身忙碌,或是其他應用程式忙碌的關係,影響到Web Server或是MySQL Server的執行速度。因此我想到改用執行速度非常緩慢的cron.php來測試看看。
2019-04-04 12:04:39 cron.php 程式的執行時間:278.60388493538秒(使用1Gbps有線網路)
2019-04-04 12:04:43 cron.php 程式的執行時間:282.62102603912秒(使用1Gbps有線網路)
2019-04-04 12:02:53 cron.php 程式的執行時間:172.99609279633秒(使用10Gbps有線網路)
2019-04-04 12:02:53 cron.php 程式的執行時間:172.68709111214秒(使用10Gbps有線網路)
2019-04-05 12:02:54 cron.php 程式的執行時間:173.02593803406秒(使用10Gbps有線網路)
你可以看到「使用1Gbps有線網路」來連接另外一台Mac mini主機的MySQL Server的話,執行速度竟然需要278秒!相當於4.6分鐘!
但是改「使用1Gbps有線網路」來連接另外一台Mac mini主機的MySQL Server的話,執行速度竟然只要172秒!相當於2.8分鐘!
為什麼區區的一個cron.php程式碼,竟然需要花278秒?這是因為cron.php會產生Sitemap網站地圖給Google、Bing等搜尋引擎。由於海豚的Sitemap網站地圖設計不良,每天、每次都只會產生整個網站的Sitemap(包括討論區、部落格、相簿的所有資料,每天定時產生一次),而不會每次都只有更新「24小時以內的新資料」!
正常的設計,應該是只需要製作「昨天~今天」這「24小時之內的資料」,不斷製作累積的新資料才對。這樣就不會導致需要從MySQL讀出整個網站的所有資料,導致cron.php程式執行速度異常緩慢!竟然要連續跑172秒~278秒左右才能執行完畢!
以上的測試可以證明「10G網路」確實是比「1G網路」快很多。雖然還遠遠不到理論值的10倍,但是可以快1.6倍也很不錯。當然,如果就算是使用802.11ac的1300Mbps無線網路,傳輸速度很可能比「100M有線網路」還要慢很多,這就不需要測試了。畢竟連「1Gbps有線網路」都太慢,就不需要測試還要更慢的無線網路。