2013-07-15 77 views
8

我用的軟件,利用每個程序運行的情況下的單核限制。它將運行SQL服務器工作隊列並將結果存入服務器。所以我運行的整個項目越快完成。我已經和Azure虛擬機玩了一下,可以通過兩種方式加速這個過程。Azure的VM定價 - 是更好地有80噸單核的機器或10 8核的機器?

1)我可以在單個核心虛擬機上運行該應用程序,克隆該虛擬機並根據需要運行它,以充分加快工作速度。

OR

2)我可以在一個8核VM上運行的應用程序的8倍,......再次克隆該VM並運行它儘可能多的,因爲我覺得需要充分地加快工作。

我在測試中注意到,添加8個單核虛擬機和1個8核虛擬機的速度大致相同。假設這是真的,單核心機器的價格會更好嗎?

定價有點神祕,無論是真正的CPU使用時間還是什麼。使用1 8核心方法稍微容易一些,因爲旋轉機器和減少機器花費時間,但我想這可能是自動化的。

它從一些定價頁面的多個單核心VM的方式將花費更少的似乎?

旁邊的問題:我可以像一些Power Shell腳本一樣繼續添加特定映像的虛擬機並運行應用程序,然後在接近完成時開始關閉它們?生成虛擬機之後,是否有一些方法可以啓動應用程序,而無需遠程訪問每個應用程序並運行它?

回答

5

帳單

根據Windows Azure Virtual Machines Pricing Details,虛擬機是由分鐘(的wall clock time)充電。價格按小時費率列出(60分鐘),並根據虛擬機運行部分小時的總分鐘數進行計費。

在2013年7月1小VM(虛擬1芯)花費$ 0.09 /小時; 8個小型虛擬機(8個虛擬內核)成本爲0.72美元/小時; 1個超大型虛擬機(8個虛擬內核)成本爲0.72美元/小時(與8個小型虛擬機相同)。

VM尺寸和性能

的虛擬機大小不同,不僅在覈心和內存,但also on network I/O performance,是從100 Mbps爲小到800 Mbps的特大型的數量。

額外的小型虛擬機在CPU和I/O能力方面相當有限,並且不適用於您所描述的工作負載。

對於單線程,如問題中所述的I/O綁定應用程序,由於每個請求的響應時間更快,因此超大型虛擬機可能具有邊緣。

這也是可取的每個核運行2,4或多個進程基準工作量。例如,2個或4個進程在小型虛擬機和16,在一個特大VM 32個或多個進程,發現CPU和I/O負載(只要你不使用的內存超過可用)之間的適當平衡。

自動縮放

自動縮放虛擬機是built-into Windows Azure directly。它可以基於CPU負載或Windows Azure隊列長度。

另一種替代方法是使用專用工具或服務來監視服務器上的負載,並運行PowerShell腳本以根據需要添加或刪除虛擬機。

自動運行

您可以使用Windows計劃在Windows啓動時自動運行的任務。

+0

嗯..自動縮放看起來像它幾乎適用於我,但在這種特殊情況下,我將在任何實例上運行100%cpu,而我的工作隊列還剩下一些東西,而0%一旦沒有工作項目。我很高興能夠看到虛擬機不再做任何事情並擺脫它。我認爲這種自動縮放比較適合網絡應用程序,而不是我的生物分析工具:)我是對的嗎,還是真的有用?在任何情況下,我都需要自動運行的東西嗎? –

+1

如果您使用Windows Azure隊列,它會起作用。然後,您可以將其配置爲根據隊列長度,最小和最大VM數以及檢查之間的延遲來創建或刪除VM。但是,這將是另一個問題... –

2

定價是「以小時機器的正常運行時間*實例的VM尺寸/小時*號的速率」

例如您有一個運行一個月(30天)的8核虛擬機(超大型) (30 * 24)* 0.72 $ * 1 = 518.4 $

對於8個單核它將是 (30 * 24)* 0.09 * 8 = 518.4 $

所以我懷疑是否會有任何價格差異。使用小型機器和「擴展」的一個優勢是,您可以對可擴展性進行更細化的控制。超大型機器會比2-3臺小型機器吃更多的閒置資金。

是的,你絕對可以編寫腳本。假設他們是IaaS機器,您可以將腳本添加到Windows啓動,如果在PaaS上,您可以使用「Startup Task」。 Reference

+0

對你的「擴展」評論:嗯,假設我設置了一個虛擬機 - 它使它能夠在啓動時自動運行我的應用程序,然後添加邏輯來關閉虛擬機無法再從SQL Server工作隊列中獲取任何內容。這會保護我免於太多閒置的美元嗎?或者我仍然需要儘快刪除虛擬機......因爲這會更困難。試圖想到最簡單的擴展方法,如果花費相同,我會盡可能快地處理所有事情 - 我想min會是90秒,因爲每個工作項目需要這麼長的時間:) –

+0

我做了更多挖掘,看起來虛擬機正在被收費,無論它是否在開發中,所以我確實需要在虛擬機不再處理後儘快刪除虛擬機。在完成任務後,有沒有辦法在VM中自動刪除虛擬機? –

+0

對於類似的情況,我們已經成功嘗試了監視隊列長度。如果您知道「處理郵件的平均時間爲x分鐘」,那麼您可以輕鬆找到在接下來的30分鐘內需要的機器數量。一臺機器需要3-7分鐘才能「創建 - >配置 - >啓動」。您可以有一個額外的小型機器全時運行來監視隊列並執行縮放規則。 – IUnknown

12

我認爲,所有其他條件相同,而這種代碼確實是CPU綁定的,而不是從任何內存共享,同一臺機器上運行多個進程將提供中獲益,您應該齊齊單核機而不是多核機器。

原因:

隔離故障域

向外擴展而不是向上做的比較好,當可能的,因爲它自然隔離故障。如果你的一個小節點崩潰,那隻會影響一個進程。如果一個大型節點崩潰,多個進程就會停止。

負載均衡

Windows Azure的,像任何多租戶系統,是一種共享資源。這意味着您可能會與其他工作負載競爭CPU週期。擁有小型虛擬機讓您有更好的機會讓它們分佈在數據中心內的物理服務器上,這些物理服務器在配置機器時具有最佳的資源狀況(您希望確保在再次啓動虛擬機之前先停止和釋放VM) Azure佈局佈局算法來選擇最佳主機)。如果您使用的是大型虛擬機,那麼找到合適主機的可能性就越小,以適應多個虛擬內核。

虛擬處理器調度

它不甚瞭解如何調度虛擬CPU不是調度物理上的不同,但它是值得一讀了上。要記住的主要問題是,像VMware ESXi和Hyper-V(運行Azure)的虛擬機管理程序將多個虛擬內核調度在一起,而不是單獨調度。因此,如果您擁有一個8核VM,則物理主機在允許虛擬CPU運行之前,必須同時擁有8個物理核心。虛擬內核越多,主機在任何給定時間都將擁有足夠的物理內核的可能性越小(即使7個物理內核是空閒的,VM也不能運行)。這可能會導致一個矛盾的結果,即隨着更多的虛擬CPU核心添加到虛擬機中,虛擬機的性能會變差。 http://www.perfdynamics.com/Classes/Materials/BradyVirtual.pdf

簡而言之,單個vCPU機器比8個vCPU機器更有可能獲得物理處理器的份額,其他條件相同。

我同意定價基本上是一樣的,除了存儲許多小型虛擬機而不是大型虛擬機的存儲成本稍微增加之外。但是,Azure的存儲比計算要便宜得多,所以可能不會產生任何經濟規模。

希望有所幫助。

+3

在我們的負載測試中,我們觀察到這種「矛盾效應」 – zebra

+0

您是否指的是幫派調度?還是修補?我認爲Hyper-V從來沒有遭受過這個問題,VMWare似乎已經放鬆了很長一段時間。看到這個:http://www.virtuallycloud9.com/index.php/2013/08/virtual-processor-scheduling-how-vmware-and-microsoft-hypervisors-work-at-the-cpu-level/換句話說,這種「矛盾效應」更可能是由上下文切換或其他開銷引起的,而不是VM調度程序本身造成的。 – jhexp