2012-06-04 53 views
6

我已經閱讀了幾乎所有的AWS AS API API文檔,以瞭解所有AS的內容。適用於作業服務器的亞馬遜Auto Scaling API

但是我仍然想知道(沒有真正使用API​​,因爲我想先從某人那裏找到這個),如果我的場景對於AS來說是可行的。

假設我在一個AS組中安裝了一堆工作服務器,每個工作都在一個工作上,並突然發生(我不知道AVG CPU是大於還是小於80%)上或下。

我最擔心的是當前正在進行的工作中的損失。也許這將用一個例子來更好地解釋:

  • 我啓動5個作業服務器與他們晚五組的工作
  • 作業結束上一個和亞馬遜API
  • 亞馬遜談到在觸發一個分頻觸發規模下來
  • 我輸了,實際上是當前正在運行作業的作業服務器(90%完成得重新開始)

考慮到這一點是對我來說最好只使用Amazon現貨實例/ EC2 API和公正管理我自己的擴展,或者我缺少關於Amazon API如何判斷服務器端口的信息?

說實話,我寧願擴展到SQS等待的時間超過了服務器上的一些健康數字量:

  • ,每100封郵件的20%

等待增加羣集容量但這並不對於AS來說似乎也是可行的。

那麼AWS AS API不是正確的解決方案,還是我錯過了一些關於它如何工作的重要信息?

感謝,

+0

從理論上講,如果你編寫腳本以一種乾淨的方式完成所有的工作,然後把它放在/ etc/rc0.d中,它不應該工作嗎?我僅將AS用於Web服務器實例,因爲這些問題並不重要,所以我不確定。 –

+0

有趣的,所以你說我可以通過添加一個RC來阻止AWS關閉,甚至可能我要檢查 – Sammaye

+0

雖然從根本上說,如果它確實有效的話,這可能是一個嚴酷的修復,也許我會更好地管理自己的縮放找工作?正如你所說,你通常只將它用於網絡服務器實例 – Sammaye

回答

7

一些搜索後我發現有兩個公認的方法來管理AS API或作爲一般的工作:

一種方法是直接操縱一臺服務器的健康狀況,從內工人本身。這是很多網站所做的工作,並且它是有效的,當您的工作人員在系統中檢測到沒有更多工作或冗餘時,就會將其標記爲不健康的服務器。這樣AS API就會出現並在一段時間後自動關閉。

因此,使用這種方法,您可以根據您的SQS隊列大小在一段時間內實現擴展策略(例如,每5分鐘SQS消息超過100個添加2臺服務器;每隔10分鐘SQS消息超過500倍的網絡容量減少50%)。縮小比例將由代碼而不是活動策略處理。

這種方法也可以在零集羣上工作,因此您可以在不使用服務器的情況下一直關閉集羣,使其非常經濟。

優點:

  • 易於安裝
  • 使用AWS API函數
  • 也許是最快的設置
  • 使用AWS管理API來管理羣集的大小爲您

缺點:

  • 如果不使用完整的AWS API,很難進行管理,即在創建新服務器時,如果不執行完整的API命令返回所有實例id,就無法獲取它的實例id。在其他情況下,如果您希望通過集羣自我控制的元素,AWS AS API可以讓您的生活變得更加艱難。
  • 依靠亞馬遜來了解您的錢包最適合您。您依靠亞馬遜API來正確擴展,這對許多人來說是一個優勢,但對一些人來說卻是不利的。
  • 工作人員必須保存一些服務器池代碼,這意味着該工作人員不是通用的,並且不能在沒有一些配置更改的情況下立即將其移動到另一個羣集。

考慮到這一點,有第二個選擇,DIY。您可以使用EC2競價型實例和按需實例API根據您的自定義規則製作您自己的AS API。這是很簡單的解釋:

  • 你有一個命令行腳本運行的開始,比如,10臺服務器當
  • 你有一個cronjob,當檢測到符合某些條件,起伏的服務器或UPS更多

優點:

  • 簡單,清洗容易管理您的最終
  • 可以使普通工人
  • 服務器池可以開始管理多個集羣
  • 您可以在AWS從指標的規則並沒有什麼真的很複雜的人物獲得並使用他們的比較和時間範圍來理解,如果事情應該改變。

缺點:

  • 很難得到多區域(沒有那麼壞SQS因爲SQS是單區)
  • 難以對付的區域能力的錯誤和工作量
  • 你必須依靠自己的服務器正常運行時間和自己的代碼來確保cronjob按照它應該運行的方式運行,並按需要配置服務器,並在應該時將其分解。

所以真的這似乎是一個最終用戶更舒適的戰鬥。我個人正在仔細研究這兩者,並創建了一個可以爲我工作的小型自託管服務器池,但同時我也試圖讓它在AWS自己的API上運行。

希望這有助於人,

編輯:注意使用這些方法,你仍然需要在你身邊的函數來預測你應該如何出價,因爲這樣你就需要調用出價記錄API您現貨型(EC2型)並計算如何出價。

另一個編輯:在系統中自動檢測冗餘的另一種方法是檢查SQS隊列的空響應度量。這是您的工作人員排隊並沒有收到回覆的次數。如果您在工作人員的持續時間內在您的應用中使用排他鎖,這非常有效。

+0

對於第一種解決方案,您如何處理自動縮放組的所需容量?事實上,如果有自動縮放操作(放大),則所需容量設置爲2.如果我們只關閉實例,則自動縮放組將重新創建一個新實例。 –

+0

@TalalMAZROUI事實上,它不會管理您的自動縮放大小,只有哪些服務器需要關閉。如果你創建一個工作隊列,我發現了一個更好的方法,儘管它沒有選擇性地控制如何關閉服務器。您可以使用Amazon SQS的大小來了解是否應縮小比例組的大小,查看我用於分佈式視頻編碼器的模板:https://github.com/Sammaye/vidcoder_cloudformation您將看到我如何在隊列上使用自動縮放屬性來確定自動縮放組的大小。 – Sammaye

+0

@TalalMAZROUI只需重新閱讀我的答案,第一個方案就包括服務器健康和SQS。我也意識到你說的是「理想的容量」,在這種情況下,AWS會盡可能地嘗試並分配兩臺服務器,即使你的規模策略說不要。如果您希望它與基於零的羣集一起工作,那麼您需要將期望的羣集大小定義爲0. – Sammaye

1

我剛剛遇到了同樣的問題,我和一位跟我談論終止保護的亞馬遜人聊過。 實際上,如果一個實例已經啓動了終止保護,那麼不能終止。當縮小比例被觸發時,應用程序將從自動縮放組中移除,但不會被終止。 要終止它,您必須禁用終止保護,然後終止它(例如,您可以在作業結束時執行此操作)。

綜上所述,你所要做的是:

  • 加入啓動腳本在您的AMI啓動終止保護
  • 保持你的自動縮放規則(放大和縮小)
  • 在運行的情況下,一旦它是安全的終止實例工作(2008年末,...),禁用終止保護和終止實例

可以全部使用AWS做API。

+0

也就是說終止保護旨在防止終止。事實上,自動縮放的目的是在沒有終端保護的情況下工作,因爲根據服務器上的某些參數等情況,應該創建和終止實例,因此使用具有自動縮放的終止保護是有點不利的。 – Sammaye

+0

是的,但由於自動縮放不允許我們在某些情況下終止實例,因此我們必須找到解決方法 –

+1

這是不正確的,根據: http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide /AS_Concepts.html#AutoScalingBehavior.InstanceTermination ------------------------ 「如果您在您的按需實例中啓用了實例終止保護屬性Auto Scaling組,Auto Scaling將覆蓋該屬性並終止實例。「 – robbyt