Scalability
擴展性(Scalability)是網路服務一項非常重要的課題,當一個網路服務越來越多人使用後,伺服器端的附載量隨之增加,從網頁伺服器、資料庫伺服器是否能夠承受大量的網頁請求並維持一定的回應速度,是非常值得研究的議題。特別在目前越來越多的開放服務,網站服務的耦合度提高情況下,每個網路服務都要具有一定程度的擴展性,才可能被納入其他網站服務。在這一系列的文章裡,將整理網路上關於提升網路服務擴展性的文件以及投影片,試著了解如何進行這一工作。
在試圖建立具有擴展性的網路服務前,我們必須了解到哪些因素是我們最為關切的,在Buildind a Scalable Architechture for Web Apps( by Bhavin Turakhia)中作者做了簡單的整理如下:
擴展性(Scalability),整個系統可以同時負荷的使用者或網頁請求數目。
可取得性(Avalibility),任一時間內"可存取服務的機率"或是"服務可被存取的部分"。
回應力(Responsiveness),處理一個請求所需要的時間。
服務影響力(Downtime Impact),服務無法正常運作所造成的影響,可能是使用者數、減少之收入...等。
維護成本(Maintenance Cost),維護整個架構的成本。
from Bhavin Turakhia's talk "Buildind a Scalable Architechture for Web Apps"
那我們能夠從哪些面向去改進整體的擴展性呢?事實上幾乎從硬體到軟體每個層面我們都可以試圖去改進。由硬體方面,伺服器主機的硬體規格,到作業系統層級,是不是需要自行編譯最佳化後的系統核心,再到網頁伺服器、資料庫伺服器調整(tuning),伺服器架構規畫,是不是要採用reverse proxy,到最後的網頁程式撰寫以及資料庫存取控制,每一個層面都有改善整體應用擴展性的可能。
基本的擴展性改善流程如下:
- 監控現有架構
- 找出效能瓶頸
- 發現服務異常原因以及影響層面
- 以下列四種方式進行調校
- Vertical Scaling
- Vertical partition
- Horizontal Scaling
- Horizontally Partition
- 重複1~4
0 回應:
張貼意見