[Windows Azure] 評估 Windows Azure 的使用費率

最近做了幾個在 Windows Azure 上架設服務的案子,都有涉及到使用 Windows Azure Platform 的費率的計算 (要報價用),所以在費率的評估上略有心得,特別整理一下給未來想要使用 Windows Azure Platform 的參考。

最近做了幾個在 Windows Azure 上架設服務的案子,都有涉及到使用 Windows Azure Platform 的費率的計算 (要報價用),所以在費率的評估上略有心得,特別整理一下給未來想要使用 Windows Azure Platform 的參考。Windows Azure Platform 的計費模式分為運算能力 (Computes),儲存 (Storage) 與資料傳輸 (Data Transfer) 三種,而 SQL Azure 與 AppFabric 是另外計費的,同時,SQL Azure 和 AppFabric 對外的流量,也會算在資料傳輸這一項中,因此如果服務會對外開放 SQL Azure 直接連線或是有使用到 AppFabric 的服務時,資料傳輸也要記得估算一下。

1. Computes

Windows Azure Platform 的運算規格分為五種,分別是 XS (Extra Small), Small (S), Medium (M), Large (L) 與 XL (Extra Large),除了 XS 是 0.05 美元外,以 S 的 0.12 美元為基準,上升一級就乘兩倍,M 為 0.24 美元,L 為 0.48 美元,XL 為 0.96 美元,當然運算能力也差很大:

image

不過這裡的計算單位,是以小時計的,一天要以 24 小時計算,一月以 30 日計算,半年是 180 日,一年是 360 或 365 日。也就是說,要算一年的話,就要以 24 * 365 * 單位運算成本來計算。例如一個 S 型的運算單元要開一年的話,就要 0.12 * 24 * 365 = 1051.2 美元,相當於 31,536 元新台幣 (1: 30 計算),每個月 2,628 元。

運算資源是被應用程式使用最直接的載台,因此運算資源的選擇,不但會影響到應用程式的執行效能,也會影響到在做 Scalability 的成本以及效益,當開發人員在評估選用運算資源前,可以先試著在 Computes Emulator,或是直接建構類型相似的 Virtual Machine,並實際執行應用程式,以評估 VM 是否能負擔應用程式的執行量。一個 S 的運算資源大約可以承受每秒 50-100 個同時瀏覽的使用者,若要加上動態程式的話,大概只剩下 1/3 左右,當然還要配合程式的設計與儲存的架構 (SQL Azure or Windows Azure Storage) 來能精準的判斷。

另外,為了要讓 Windows Azure Platform 能讓應用程式的可用性提升到保證 99.9%,微軟要求應用程式至少要用兩個以上的 Compute Instances,也就是費用要再乘以 2,以一年的 S 來計算,每年就是 63,072 元。還有,若同時在 Production 和 Staging 中放置應用程式的話,也要再乘以 2,而 Staging 建議是只用在應用程式要部署到 Production 前的最終測試,故平常不要將應用程式部署在 Staging,否則可能會多花冤枉錢。

 

2. Storage

Windows Azure Platform 的 Storage 分為 Table, BLOB 與 Queue 三種 (Drive 是建在 BLOB 上的),但不論是哪一種,都是以 Storage Quantity 以及 Storage Transaction 來計費,Storage Quantity 是以每 GB 0.15 美元計費,不管使用哪些格式,Storage Quantity 是以實際使用的總量來計算,但實際使用不滿 1GB 的部份會以比例來計算,所以儲存費用不一定會是 0.15 的倍數。

Storage Transaction 則是以應用程式或用戶端讀寫 Storage 上資源的次數來計費,每 10,000 次的交易 0.01 美元,也就是 1,000,000 次的交易為 1 美元,雖然乍看起來很少,但以一個高度用量的 Web 應用程式來說,1,000,000 次其實是不夠的,因為用戶端不一定只有應用程式,還有 CDN (Content Delivery Network) 的用戶端,以 Youtube 為例,一天可能就有幾千萬個檔案存取數,也就是一天可能就會花上幾十塊美金來支付 Storage Transaction 的費用。

在評估 Storage 時,要考量的部份有應用程式可能會使用的儲存用量,以及應用程式可能存取儲存的次數,若應用程式是支援多媒體或是社群型的網站,會有許多的資料儲存到 Storage 時,就需要預估每月的資料成長量,以預算儲存空間的費用,應用程式本身則也需要做一部份最佳化,以降低應用程式的 Storage Transaction 數量 (尤其是批次作業)。

 

3. Data Transfer

不論使用到 Windows Azure Platform 的何種服務,只要資料會出入資料中心的話,就會需要支付資料傳輸費用,資料傳輸分為 Inbound 與 Outbound 兩種,分別是資料流入與流出,而網路傳輸的成本,會視資料中心所在國家地區與所合作的 ISP 業者不同而有所不同,微軟已經盡可能的將不同資料中心間的網路傳輸成本壓到一致,早期的網路傳輸費用較高,現在則是接近一致了。Inbound 的費用為 0.1 美元,Outbound 的費用則會因地域有所改變,歐美是 0.15 美元,而亞太是 0.2 美元,計算的單位為 GB。

資料傳輸的預估,可以用人頭來計算,或是用月份預估來計算,例如若預期網站每天會有 500 人連入,每個人會使用 20MB 的資料量,那麼每天大約就是 1GB,每個月是 30GB,則連出就是 30 * 0.2 = 6 美元.連入則是 30 * 0.1 = 3 美元,每月總費用是 9 美元。每年則是 108 美元。

雖然看起來好像不是很貴,但是因為所有的服務都會用到資料傳輸,故在估算資料傳輸時應盡可能寬鬆為佳。

 

4. SQL Azure

SQL Azure 資料庫目前區分為 Web 和 Business 兩種,Web 有 1 和 5GB 兩種,Business 則有 10-50GB 五種,不論是哪一種,SQL Azure 資料庫每 GB 的單位價格是 9.99 美元,並且是以月費來計算,

 

5. AppFabric

AppFabric 目前開放的是 Access Control 與 Service Bus 兩種,Access Control 是以應用程式與 Access Control Server 溝通的次數為主,且不論是否驗證成功都算一次,每 100,000 次 1.99 美元;Service Bus 則是使用與服務連線的數量來計算 (和 SQL Server 的 CAL 很像),當連線到 service bus server 時就算一個連線,每個連線的費用是 3.99 美元。

 

Reference:

http://www.microsoft.com/windowsazure/pricing/

Windows Azure 教戰手札 附錄1