將Web服務從單體架構演化為彈性高可用架構
隨著業務增長,單體架構的Web服務的業務負載也逐漸增加,導致系統穩定性降低。此時,您可以將單體架構演化為彈性高可用架構,通過伸縮組水平擴充伺服器來分攤負載,從而增強系統穩定性和響應速度。
為什麼使用彈性高可用架構?
單體架構的問題一種常見的單體架構,所有的資源部署在一台ECS執行個體中,使用者通過網域名稱(或IP)直接存取到單一伺服器中的服務。該架構存在兩方面的問題:
| 彈性高可用架構特點彈性高可用架構使用者通過網域名稱訪問商務服務叢集時,請求會通過負載平衡器,分攤到叢集的各個商務服務執行個體上的商務服務進行處理。該架構特點如下:
|
如何將單體架構演化為彈性高可用架構?
如圖所示,將左側單體架構演化為彈性高可用架構需要經歷兩個階段。
階段一:分離資料存放區與商務邏輯
由於彈性高可用架構是以ECS執行個體為單元進行複製,因此在實施彈性高可用架構時,需要確保ECS執行個體(包含其中的商務服務)的資料存放區與商務邏輯分離,即無狀態化,避免因橫向擴充執行個體而導致的資料一致性問題。
例如,在複製ECS執行個體時,應確保不會複製資料庫,從而防止叢集使用多個不同的資料來源。通過將資料存放區從ECS中抽離出來,確保所有執行個體共用同一資料來源,保持資料的一致性。
如果在您的實際業務中,出現了以下幾種常見的情況時,您需要評估該情況是否會對您的業務造成影響,從而改進業務架構。
階段二:將架構演化為彈性高可用架構
在將ECS執行個體中的資料存放區與商務邏輯分離之後,可以通過棄置站台的方式進行橫向擴充ECS執行個體(包含其中商務服務)。
此時將服務叢集遷移至伸縮組,利用其彈效能力快速建立服務的副本,使用負載平衡器作為服務叢集的訪問入口,分攤業務負載,確保系統的穩定和高效。
快速遷移以實現彈性高可用
方案介紹
如果您已經完成資料存放區與商務邏輯的分離(無狀態化),您可以通過以下步驟快速將單體架構服務遷移到伸縮組實現彈性高可用架構。
部署樣本網站(準備執行個體)。本方案會類比一個已經完成無狀態化的樣本Web服務執行個體,以該執行個體為例,示範遷移過程。您也可以使用現有執行個體進行操作。
構建包含商務服務的執行個體鏡像。該鏡像之後會作為您叢集執行個體的啟動鏡像,執行個體啟動時自動啟動商務服務。
建立管理服務叢集的伸縮組。之後會通過該伸縮組快速複製執行個體(橫向擴充)。
為叢集設定統一訪問入口。關聯負載平衡器實現統一訪問的入口。
擴充執行個體(驗證)。快速複製執行個體(橫向擴充),訪問負載平衡器以驗證叢集正常工作。
1. 部署樣本網站
首先您需要準備能夠代表生產環境的應用執行個體,用於後續的複製和自動化部署。
本教程為您提供一個樣本網站服務,您可以使用該服務體驗遷移過程。單擊一鍵部署樣本服務完成樣本服務的搭建。
該樣本網站服務包含一個Web服務軟體包及其運行環境和自啟動指令碼,且該執行個體已經完成資料存放區與商務邏輯的分離,即無狀態化。
如果您的商務服務執行個體已經無狀態化,且具備以上條件(軟體包、環境、自啟動指令碼),您也可以使用您的實際商務服務代替該執行個體進行後續的遷移操作。
2. 構建包含商務服務的執行個體鏡像
為確保後續您新擴充的執行個體中部署有商務服務和設定好的自啟動指令碼,您需要先以該執行個體為基礎建立自訂鏡像,後續建立的執行個體會以該鏡像作為基礎鏡像,在執行個體啟動時,您的商務服務也隨之啟動。
進入ECS管理主控台,將地區切換到您在步驟1中準備的執行個體的地區。
找到步驟1中準備好的ECS執行個體,在右側操作列,選擇。
在彈出的建立自訂鏡像對話方塊中,記錄鏡像名稱,方便後續尋找,單擊確認按鈕,等待鏡像建立完成。您可以在ECS控制台左側導覽列單擊查看鏡像建立進度。
3. 建立管理服務叢集的伸縮組
彈性高可用架構的核心是通過伸縮組管理您的服務叢集,您可以通過伸縮組快速複製執行個體,建立並啟用伸縮組具體操作如下:
進入伸縮組管理頁。
如果您是第一次使用Auto Scaling,請根據介面提示開通Auto Scaling的許可權。具體操作,請參見服務關聯角色。
- 在左側導覽列中,單擊伸縮組管理。
- 在頂部功能表列處,選擇地區。
建立伸縮組。
在伸縮組管理頁面,單擊建立伸縮組按鈕進入建立伸縮組頁面。
在頁面中完成如下配置。表中未涉及的配置項保持預設即可。
配置項
說明
伸縮組名稱
根據介面提示輸入。本樣本伸縮組名稱為ess-demo。
伸縮群組類型
選中ECS。
組內執行個體配置資訊來源
選中選擇已有執行個體。
選擇已有執行個體
選擇在步驟1中準備的ECS執行個體。
組內最小執行個體數
伸縮組中執行個體數的最小值,當伸縮組執行個體數低於該值時,會自動觸發擴充。本樣本最小執行個體數為0。
組內最大執行個體數
伸縮組中執行個體數的最大值,當伸縮組執行個體數高於該值時,會自動觸發收縮。本樣本最大執行個體數為10。
專有網路、選擇交換器
這兩個配置項會根據您選擇的ECS執行個體,自動填滿。
重要建議您建立並選擇多個可用性區域的交換器,避免出現單一可用性區域執行個體庫存不足導致擴容失敗,建立交換器,請參見建立交換器。
選擇開啟。開啟該功能之後,可以通過設定期望執行個體數自動擴縮容。
輸入0即可,表示先建立一個空的伸縮組。
選中執行個體狀態檢查和負載平衡健全狀態檢查,啟用該功能後,系統會根據健全狀態檢查的結果,確保伸縮組中的所有執行個體及其商務服務正常運行。一旦探索服務異常,將及時用新執行個體替換故障執行個體。
單擊建立按鈕,等待伸縮組建立完成。
修改伸縮配置中的執行個體鏡像。
在通過選擇已有執行個體建立伸縮組後,會根據ECS的原始鏡像建立一個伸縮配置,通過步驟1建立的執行個體中,原始鏡像不包含後續部署好的商務服務軟體包。因此需要將步驟2中新建立的鏡像覆蓋伸縮配置的基礎鏡像。
在伸縮組管理頁,找到剛剛建立的伸縮組,在右側操作列下,單擊查看詳情進入該伸縮組的詳情頁。
在頁簽下,單擊唯一的伸縮配置操作列下的修改鏡像。
在彈出的修改鏡像的彈框中,選擇自訂鏡像,根據介面提示,選擇步驟2中建立的鏡像。單擊確認按鈕完成修改。
啟用伸縮組。
在伸縮組管理頁,點擊右上方的啟用按鈕,伸縮組開始工作。
4. 為叢集設定統一訪問入口
當您將執行個體從1台擴充到多台時,需要為多台執行個體組成的叢集設定統一的訪問入口。您需要為伸縮組建立並關聯負載平衡器,使使用者請求通過負載平衡器自動分攤到叢集的各台ECS執行個體,從而平衡負載,最大化資源使用率。本樣本使用應用型負載平衡(ALB)作為負載平衡器,具體操作如下:
4.1 建立負載平衡器
在執行個體頁面,單擊建立應用型負載平衡。
在應用型負載平衡(隨用隨付)國際站購買頁面。根據介面提示完成應用型負載平衡的建立。
本樣本以下配置,未提及配置項保持預設。
配置項
說明
地區
關聯與步驟1中執行個體的地區保持一致。
執行個體網路類型
選擇公網。
VPC
選擇步驟1中準備執行個體的VPC。
可用區
至少選擇兩個,如果選擇的可用性區域沒有交換器,需要根據介面提示建立對應可用性區域的交換器。建立交換器的操作說明,請參見建立交換器。
4.2 為業務叢集建立後端伺服器組
此後端伺服器組將會關聯到伸縮組,伸縮組建立的執行個體會自動添加到該後端伺服器組,通過負載平衡器對外提供服務。
在應用型負載平衡ALB控制台。選擇地區。
單擊左側導覽列的伺服器組進入伺服器組頁面,單擊建立伺服器組按鈕,根據介面提示完成後端伺服器組的建立。
本樣本使用以下配置,未提及配置項保持預設。
配置項
說明
伺服器群組類型
選擇伺服器類型。
伺服器組名稱
根據介面提示輸入,本樣本以ess-test-server-group為例。
VPC
選擇步驟1中準備的執行個體的VPC。
4.3 為負載平衡器配置監聽
建立一個HTTP監聽來轉寄來自HTTP協議的請求,Server Load Balancer執行個體在監聽到HTTP請求時,可以將請求轉寄到後端伺服器組的ECS執行個體中。
在應用型負載平衡ALB控制台。選擇地區。
單擊左側導覽列的執行個體,找到步驟4.1建立的負載平衡器,在右側操作列下單擊建立監聽,根據介面提示完成監聽的建立。
本樣本使用以下配置,未提及配置項保持預設。
配置項
說明
選擇監聽協議
選擇HTTP。
監聽連接埠
負載平衡對外提供服務的連接埠,本樣本服務的使用80,代表監聽訪問該負載平衡器80連接埠的請求。
選擇伺服器組
選擇步驟4.2建立的伺服器組。
4.4 為伸縮組關聯負載平衡器
在伸縮組管理頁,找到步驟3中建立的伸縮組,在右側操作列下,單擊查看詳情進入該伸縮組的詳情頁。
在基本資訊頁簽下,找到關聯負載平衡ALB、NLB伺服器組,單擊添加關聯負載平衡ALB、NLB伺服器組,在彈出的對話方塊中單擊添加伺服器組,根據介面提示,關聯步驟4.2建立的後端伺服器組。完成配置後,單擊確認按鈕完成關聯負載平衡器的操作。
重要該配置項中的連接埠設定為您的商務服務對外提供服務的連接埠,本樣本的商務服務使用80連接埠。
5. 開始擴充執行個體(驗證)
在準備好伸縮組並已關聯負載平衡器之後,此時可以開始擴充執行個體,驗證叢集是否可以正常工作。
觸發伸縮組的擴容操作,伸縮組將自動建立執行個體。
您可以通過修改伸縮組期望執行個體數觸發擴容操作。具體操作步驟如下:
在伸縮組管理頁,找到剛剛建立的伸縮組,在右側操作列下,單擊查看詳情進入該伸縮組的詳情頁。
在基本資訊頁簽下,找到執行個體伸縮概覽,單擊
,在彈出的修改執行個體伸縮概覽彈框中,修改組內期望執行個體數,從0修改為3(代表叢集需要3台ECS執行個體對外提供服務),單擊確認完成修改。等待執行個體建立完成,完成後會在伸縮組下建立3個ECS執行個體,您可以在執行個體列表頁簽下查看執行個體的建立情況。
訪問負載平衡器的地址,驗證請求可以負載平衡到新建立的執行個體。
找到步驟4.1中建立的負載平衡器,在DNS名稱下,找到訪問的網址。
多次訪問該網址,可以看到不同的IP地址,證明可以通過負載平衡器訪問到不同的伺服器。
6. (可選)資源清理
如果您不再需要該叢集,您可以通過以下流程清理資源。
後續使用建議
用於生產環境之前
為了確保該彈性高可用方案在生產環境中穩定運行,建議您在用於生產環境前,完成以下操作:
完善伸縮組配置
實現多可用性區域容災:您可以為伸縮組配置多個可用性區域的交換器,並設定均衡分布策略,這樣伸縮組可以在多個可用性區域建立執行個體,並將商務服務執行個體均衡分布在各個可用性區域,提升叢集的擴容成功率和容災能力。具體操作,請參見擴縮容策略。
選擇多個執行個體規格提高擴容成功率:單一執行個體規格在庫存不足時也會出現擴容失敗的現象,您可以選擇多個執行個體規格建立執行個體,以提高擴容成功率。具體操作,請參見建立伸縮配置(ECS執行個體)。
充分測試
如果將該彈性高可用方案應用於生產環境,建議您在叢集搭建完成後,進行測試工作,確保您的服務複製為多個時不會出現問題,同時也可以對叢集進行壓測,來預估您的資源需求。