Building an Automatically Scaling Web Application

浅笑心柔2發表於2024-03-26

2024年春季雲端計算課業1:構建一個自動伸縮的Web應用程式
截止日期:2024年4月15日,星期一
1目標和範圍
在這項任務中,我們將為(非常)瑣碎的Web構建一個小型的自動伸縮測試平臺應用任務的目標是熟悉伸縮Web的各個方面應用程式,這將提高您對低階/基本實現的理解
雲系統的詳細資訊。正如我們在課堂上所討論的,我們可以部署這樣一個web應用程式在虛擬機器內或在容器內。為了在單個工作站上保持事情的可管理性,或者膝上型電腦,我們將把自己限制在一臺主機上,並使用容器。為了模擬飽和的伺服器,Web應用程式將是單執行緒的,並且可以在意圖請注意,可以使用虛擬機器類似地實現此分配,並且也可以容易地擴充套件到由多個主機組成的分散式系統。這兩者都是但不在此任務範圍內。正如在講座中所討論的,建立自動縮放Web應用程式。這些組成部分彙總如下圖所
例項
將在容器引擎中執行可以看出,分配以部署在容器中的Web應用程式為中心,當傳入負載需要時,可以按比例縮小。負載平衡器用於平衡Web應用程式的多個例項(或單個例項,如果這足以維持負載)。縮放控制器負責監控輸入負載並在需要時按比例縮小或按比例縮小。負載發生器用於實驗評估系統。
2要求
此任務的目標是建立上圖所示的設定,並執行許多實驗。在提交時必須附帶的報告中,您的設定需要必須有充分的文件,必須描述體系結構,並且必須包括已經進行了。作為一個實際的Web應用程式,您將獲得一個和瑣碎物件儲存API。此應用程式為單執行緒應用程式,可根據需要進行速率限制並且可以在服務HTTP請求中插入隨機延遲以模擬負載下的伺服器(兩者都是其是可配置的)。詳見附錄A。在本任務中,您將使用podman作為容器引擎。如上所述,我們選擇使用容器進行此分配,因為它比完全成熟的虛擬機器管理程式,並且需要(顯著)更少的記憶體和磁碟空間用於託管所開發的Web應用程式的多個例項。代 寫Building an Automatically 使用podman的一些技巧見附錄B。縮放控制器和演算法將由您設計和開發。你有空dom在縮放演算法設計中的應用。該演算法可以是基於規則的、基於迴歸的,或者使用滑動視窗等。我們建議您進行一些“校準”實驗iments與縮放演算法的開發(另請參閱列舉在下面透過校準獲得的資訊應用於設計和調整縮放縮放控制器的演算法。例如,用於縮放決策的設計規則/閾值。首先設定一個特定的目標響應時間可能是得的,以便制定服務級別協議,您也希望在不斷增加的客戶端負載下實現。最後,該專案是最後透過一組實驗來評估縮放控制器的有效性。下表總結了有關不同系統元件的要求:部件要求
Brightspace上提供的Web應用程式。必須使用集裝箱發動機吊艙。需要負載平衡器。您可以編寫自己的(簡單的)負載均衡器,但是也可以自由地選擇現有的一個,例如HAProxy。需要負載發電機。您可以編寫自己的請求生成器或者使用現有的(例如,jMeter(基於Java)或Locust(Python基於))。我們強烈建議您首先設計實驗然後檢視是否可以使用現有專案來執行實驗。需要縮放控制器。您必須編寫自己的縮放控制器。Informa要從負載平衡器和/或Web應用程式收集例項。縮放決策是透過執行podman來執行的命令或API呼叫。另請參見附錄D。此縮放控制器將以所選擇的程式語言來實現。關於將在專案內進行的實驗,以及報告中討論了:
實驗說明
功能測試對負載執行功能實驗(或整合測試)發電機和集裝箱發動機。這是為了確保工作良好。校準經驗ments必修的。進行一些校準實驗。你很可能希望在進行這些實驗的同時開發縮放演算法。(a) 確定單個容器的飽和點。以速率播放限制和隨機延遲,看看這對響應有什麼影響時間(延遲)、請求吞吐量、CPU利用率等。
2.(b) 一個類似的實驗,使用不同數量的容器演出規模的印象。(c) 確定生成新容器所需的時間。
需要最後的實驗。進行兩次有意義的最終實驗,評估並展示自動縮放的有效性已經實施。這些實驗必須調查反系統對不斷增加和減少的客戶端請求的響應
以證明該系統將自動向外擴充套件和向內擴充套件。調查縮放系統的響應時間並嘗試改進這表明可以最大限度地減少失敗請求的數量,或者(最好)完全取消,以便遵守某些SLA實驗包括更改所使用的縮放決策的規則透過比例控制器,最佳化產卵的方法或時間新容器(這樣它們可以在更短的時間內繁殖),減少振盪等。
3發展環境
要完成此任務,您需要對Linux安裝進行管理(root)訪問。這可以是您自己的膝上型電腦或工作站,但我們強烈建議建立一個專用的此分配的虛擬機器。您可以使用與家庭課業1的設定類似的設定。確保為該虛擬機器分配多個核心,這對實驗很重要。虛擬機器所需的磁碟空間取決於要在中使用的作業系統容器。在小型Alpine作業系統的情況下,4到5 GB應該足夠了,否則請考慮10 GB。記錄報告中使用的Linux發行版。
4提交和評估
團隊最多可由兩人組成。在一個由兩名成員組成的團隊中,我們期望兩個成員都為系統的實施和實驗。截止日期為2024年4月15日,星期一。根據提交課業
說明如下。如果團隊工作出現問題,請透過電子郵件與講師聯絡。作為報告的一部分,您必須列出每個團隊成員對專案的貢獻。可以獲得的最大等級是10。等級是括號的總和。什麼時候對每個元件進行評分,我們將考慮功能是否完整和有效明顯超出任務要求的自己的倡議和想法。
❼ [4(滿分10)]提交的完整性和功能性。
❼ [2(滿分10)]報告內容和佈局的質量。
❼ 【十分之一】校準實驗(設計和報告)。
❼ [3(滿分10)]評估有效性的實驗質量和深度
縮放控制器的。這包括實驗設計、必要的負載生成器,報告和解釋結果。課業必須透過Brightspace提交。對於每個團隊,提交一份預期。請在提交網站的文字框中註明您的姓名和學生證。確保提交的所有檔案都包括姓名和學生ID。需要提交以下內容:Web應用程式❼ 用於生成con的命令或Containerfile/Dockerfile的列表web應用程式的容器影像。
❼ Web應用程式源,如果進行了修改。負載平衡器❼ 配置檔案。
❼ 如果是自己開發的:原始碼。
❼ 如果在容器中執行,則列出命令或Containerfile或Dockerfile生成此容器映像。縮放控制器❼ 原始碼。生成器❼ 如果是自己開發的:生成器的原始碼。
❼ 配置檔案和相關擴充套件模組的原始碼如果需要。報告PDF格式的報告(請不要使用Word檔案),其中包括
描述:
❼ 實現的體系結構的描述和解釋。
❼ 包括您自己的系統圖,反映您的設計和實現的體系結構。
❼ 開發環境的描述(例如哪個Linux發行版tion已在您的虛擬機器中使用)。
❼ 在實施過程中做出的選擇。
❼ 對縮放策略設計的清晰解釋。使用圖表或
在您的解釋中列出簡潔的虛擬碼。
❼ 關於“校準”實驗的設計和結果的報告。
以下URL返回機器可讀的CSV輸出,這對您的縮放非常有用控制器:http://10.0.3.6:9999/stats;csv。縮放控制器的注意事項縮放控制器由兩個部分組成,可以獨立程式設計(使使用您團隊的資源)。監控部分應監控負載平衡器和/或執行web應用程式的容器例項。它需要檢索做出擴充套件決策所需的資訊(我們應該向上擴充套件還是向下擴充套件?如果是,透過如何擴充套件許多例項?)。請注意,這指的是MAPE反饋迴路。如果您選擇使用HAProxy,您可以監視HAProxy守護程序可以選擇為您提供統計資訊podman部分需要能夠建立新的容器例項、停止例項,列出所有例項(及其IP地址)和所有其他容器管理實用程式需要使縮放控制器工作。這是的(最後)執行階段
MAPE迴圈。podman命令或API呼叫可能在預設情況下被阻塞,在這種情況下想要研究非同步呼叫或多執行緒,以便製作縮放控制器響應能力更強。透過這種方式,您可以繼續監視,同時podman命令正在在不同的執行緒中執行。在指示podman啟動或停止容器後,您還需要更新配置負載平衡器的。具體應該如何完成取決於負載平衡器
選擇使用。在HAProxy的情況下,沒有明確的執行時API來更新伺服器。實現這一點最簡單的方法是重新生成縮放控制器HAProxy配置檔案,將此配置傳送到負載平衡器容器(或使用卷裝載?)並重新載入HAProxy。Hacky,但它有效,而且似乎在實踐中使用!).podman可以透過shell命令進行控制,也可以透過其RESTful API進行控制本API詳細記錄如下:https://docs.podman.io/en/v3.2.3/_static/api.html.雖然您可以直接將此RESTful API作為目標,但幸運的是
最少Python和Go。我們給出了一個Python API的小例子。在您可以使用此API之前,該模組需要使用pip3安裝podman進行安裝。獲取已定義容器的名稱列表:
從podman匯入PodmanClient
client=PodmanClient(base_url=“unix:///run/podman/podman.sock")
l=[c.client.counters.list()中c的c.name]獲取容器的控制代碼,如果它正在執行,則列印此容器的IP地址3:
從podman匯入PodmanClient
client=PodmanClient(base_url=“unix:///run/podman/podman.sock")
c=客戶端.容器.獲取(“testcontainer”)
如果c.status==“正在執行”:
print(c.attrs[‘NetworkSettings’][‘Networks’][’podman’]['IPAddress’])
可以使用.stop()方法停止容器。方法.wait(條件=“正在執行”)等待(阻塞),直到容器正在執行。3字典中的podman access是預設容器網路的名稱,請參閱命podmanthon模組有大量文件,在互動式Python中使用help命令殼我們在網上找不到此文件。
測試系統
為了測試完整的系統,您需要使用HTTP負載生成器。選項包括自己寫這樣一個生成器,jMeter,Locust或其他你認為合適的東西。對於你的實驗重要的是首先設計你的實驗,然後決定負載或要使用的流量模式生成器。你不想在實驗中受到之前的限制
選定的負載生成器。Locust是基於Python的,可以作為命令列實用程式使用。首先,您需要編寫一個蝗蟲檔案(參考網站https://docs.locust.io/en/stable/quickstart.html例如)。之後,您可以開始蝗蟲:蝗蟲-f mylocustfile.py--無頭-u 10-t 300s-r 0.5
其中-u配置(併發)使用者的數量,-t配置實驗的執行時間-r配置生成客戶端的速率。引數的值為以上只是一些例子,你應該建立自己的實驗。

相關文章