WordPress在網路界蓬勃發展至今,有許多的網站都是用WordPress來架設的,這其中當然也不乏一些很高流量的網站。這篇文章我們就要來分享如何用AWS S3,EC2,RDS,Load Balancer跟 Auto Scaling Group來建立一個可以支援高流量,並且有強大擴展性的架構。
請注意,這篇文章主要是簡述架構的內容,每一個元件的設定細節不會包含在這篇文章內。
為了要讓伺服器架構可以有可擴展性,我們第一件事要做的就是Decouple,簡單的來說就是將一個網站依照功能性來拆開來放。一般來說,一個簡單的伺服器架構在Host WordPress網站的時候,會將程式碼,資料庫,還有Uploads資料夾都放在同一個伺服器,這是最簡單也最方便的方式,但是這個設定的擴展性就相對比較低,我們無法直接將伺服器複製並且使用load balancer(負載平衡器)來分流,因為資料庫跟uploads資料夾的同步會有問題,有可能使用者上傳了資料到Server A,另外一個使用者在Server B會讀不到該資料,原因在於Server A跟Server B事實上是分開不相關的。
為了解決資料庫跟Uploads 資料夾的同步問題,我們的解決方式是將資料庫放在AWS RDS上,然後將上傳的圖片都放到S3(請參考如何將WordPress圖片上傳到S3),這樣一來,就剩下程式碼在EC2上了,前面再放一台load balancer,我們就可以很輕易的複製EC2甚至是設定Auto Scaling Group來讓AWS在流量增加,伺服器負擔加大的時候,自動加開EC2伺服器來支援。
整個架構簡單來說就是如下:
- Load Balancer (負載平衡器):負責將流量分流到可使用的EC2伺服器上。
- EC2伺服器:主要負責存放以及執行程式碼,並且進行資料庫讀取。
- RDS:負責資料庫功能,提供EC2進行資料庫讀取。
- S3 Bucket: 負責存放並且提供使用者直接讀取WordPress檔案以及圖片,S3 可以提供非常穩定以及高流量的靜態檔案讀取,加上CDN可以讓存取更快速。
- Auto Scaling Group:如果網站流量並不是一直都很高,可以使用Auto Scaling Group讓系統根據伺服器的忙碌程度來增加或減少EC2伺服器的數量。
我們曾經在澳洲一個大型活動實際設定過這樣的架構,在最高人次一天30多萬網頁讀取的流量下,只需要開兩台EC2就能夠很輕鬆的消化掉流量。
伺服器的架構可以有很多種變化,有機會我們會在跟大家提供更多相關資訊。