天天看點

簡單高效的雲伺服器單元化擴容方案

自從ecs這類雲伺服器出現以來,越來越多的公司把自己的網站、應用和it系統放到了雲上。究其原因,idc等基礎設施的巨大成本節省和部署門檻降低是很重要的一個原因。除此以外,雲服務按需擷取的特性也帶來了更多的運維創新的可能性。

比如應用的擴容。傳統idc托管環境下,我們總是要為未來可能的擴容需求而預留足夠的伺服器資源,既不能有太多資源浪費,還需要考慮未來擴容的需要,容量規劃就成了一個很重要又困難的工作。而ecs這類雲伺服器,我們基本認為是可以随時按需擷取的,既友善快捷,又節約人力、實體成本。

雖然雲伺服器提供了按需擷取資源的能力,但是如何把這種能力應用到我們自己的業務上并不是那麼直覺和簡單的事情。還是以應用擴容這個需求來說,一種可能的做法是,當需要擴容時,運維人員手動的通過web管理界面去下單購買新的雲伺服器,然後對系統進行配置,安裝軟體,最後上線。另一種做法可以是通過自動化運維程式,自動建立伺服器,自動配置,自動安裝軟體,自動上線。兩種做法在人力成本和可靠性上有巨大的差别。第一種方式需要運維人員大量的重複性勞動,而且容易出錯,第二種方式需要運維人員有很強的代碼能力,把雲服務和自己的應用進行內建。總結下來,就擴容這個需求,如何才能既簡單又高效的完成呢,我們先梳理一下要求,大概如下:

伺服器按需擷取,不使用不付費

全部自動化,運維人員隻需要簡單的操作即可達到擴容目的,包括伺服器擷取、系統配置

不需要複雜的內建開發工作,所使用的工具有專業團隊支援,開箱即用

響應快速,整個擴容過程,能夠在分鐘級别完成

每次擴容的容量可以任意定義,即支援批量擴容

支援逆向操作,即當業務流量發生減少,可以取消之前的擴容

這麼看起來,擴容這件事并不是那麼簡單。即使開發能力很強的運維團隊,如果想做到以上全部,依然需要做大量的開發工作去處理擴容邏輯和可靠性。同時,還要去處理雲産品的openapi調用過程的各種細節,像重試、幂等調用、邊界條件處理等等。

阿裡雲的資源編排服務(ros)是一款簡化自動化運維的服務,支援使用者通過模闆描述基礎設施。是以,ros已經提供了資源的建立和配置功能,而且幫我們屏蔽了底層資源操作的複雜性,我們隻需要編寫模闆檔案即可。在應用擴容這個場景下,ros依然可以幫我們滿足上面所列的七點要求。

下面我們就來介紹一下,如何通過ros來做應用的擴容。關于ros的介紹和使用入門請參考:

<a href="https://www.aliyun.com/product/ros">阿裡雲資源編排服務産品介紹</a>

<a href="https://yq.aliyun.com/articles/5845">使用ros建構自己的彈性應用</a>

<a href="https://yq.aliyun.com/articles/6904">阿裡雲資源編排服務python sdk使用入門</a>

首先,假設我們運維的是一個b2c的電子商務網站,日常情況下,平均日通路量200萬pv。考慮到電商網站的特性,有大量耗時較長的事務需要處理,日常需要3台雲伺服器來支撐整個網站的運作。每年雙十一前後,網站會配合各大電商平台進行促銷活動,促銷期間,日均通路量最高會達到日常的5到10倍。

為了應對臨時性的擴容需求,網站從架構和部署方面已經做了針對性設計。整個網站的應用可以部署到一台獨立的雲伺服器上,并且做了無狀态設計,支援水準擴充。前端通過slb做流量負載均衡。所有的資料存儲在一個高規格的rds執行個體中。整個架構如下:

簡單高效的雲伺服器單元化擴容方案

為了應對促銷季5到10倍的流量增長,我們的擴容思路如下:

将整個網站應用制作成一個伺服器鏡像,友善通過鏡像進行應用部署

通過ros的編排模闆定義擴容伺服器的配置,包括數量、使用的鏡像、規格、slb/rds的依賴關系等

把5台機器定義為一個擴容單元,擴容單元通過ros建立,随着流量增加,每次擴容增加一個擴容單元

當流量回落後,以擴容單元為機關縮小容量,直至日常狀态

擴容過程如下圖所示:

簡單高效的雲伺服器單元化擴容方案

通過ros完成擴容隻需要把對應的擴容單元的模闆送出到ros服務即可。詳細的模闆如下: