AWS的雲端架構框架-成本優化篇
無法控制價格,就必須控制成本。
這一篇我們概述AWS提倡的雲端架構框架的第五個面向 — 成本優化.所謂成本優化是指“我們用最低的價格的資源來達到我們要達成的商業價值”.然而更多的雲端成本優化知識可參考本部落格的FinOps文章.
在成本優化的部分, AWS給了我們設計原則的概觀,最佳實踐以及在這個過程中我們需要回答的問題.
五個設計原則
AWS在雲端的成本優化層面上提出了五個設計原則,它們分別是:
- 設置雲端財務管理: 為了在雲端中實現良好的財務管理並加速業務價值的實現,我們需要投資在雲端的財務管理與成本優化。 我們的組織需要投入時間和資源來建立這個新的技術與流程的管理能力。 與我們的資安或卓越運營能力類似,我們需要通過建立知識、計劃、資源和流程,來讓我們的雲端支出是具成本效益。
- 適應雲端的消費模式:雲端的消費模式跟我們用家裡的水電一樣,只在使用時付費,而這樣就能根據我們業務需求(企業通常都有營業的淡旺季分別)增加或減少資源使用量,而不是永遠都不準的forcast來進行預測。 例如,開發和測試環境通常在每天只有上班8小時會使用。 我們可以在沒上班時停止使用這些資源,從而節省 75% 的潛在成本(一週上班40 小時與 一週有168 小時的時間差)。
- 衡量整體效率:衡量我們系統服務的業務產出以及與交付這些產出相關的成本。 用這種度量方式來了解我們從增加產量和降低成本的相比中獲得的收益。
- 在大家都會做的苦力工作上停止花錢:AWS 像擰毛巾一樣榨乾資料中心的資源使用,例如機架和為服務器供電。 它還可以不用讓我們的IT人員操作OS和應用程式的工作負擔。 這使我們的IT團隊專注於我們的客戶和業務項目,而不是 IT 基礎設施。因為這樣的事所有的企業都會做,然而卻沒有太大的價值產出.
- 歸因與分析雲端的支出:雲端讓企業內的每一個單一系統或服務更容易準確地識別使用成本,然後讓我們將成本進行showback 或 chargeback回到每一個系統或服務擁有者身上。 這有助於我們的ROI,並為系統的擁有者提供優化資源和降低成本的機會。
五個最佳實踐
- 實踐雲端財務管理
- 成本支出和資源使用的認知
- 資源使用是具成本是具成本效益的
- 管理資源的需求與供給
- 隨時間優化
只要是關乎架構設計就需要有權衡取捨,例如,是加入上線速度還是優化成本。這取決於組織的業務偏好,但在這事事講求速度的時代,對速度進行優化常會是第一個選擇.因為組織需要快速進入市場、發布新功能或只是滿足大老闆的上線期限 — — 而不是投資於前期成本優化,因為這可以在有市佔率後再去做。
設計決策有時是由人的主觀認知而不是資料決定的,並且總是存在過度補償“以防萬一”的心態,而不是花時間進行基準測試以獲得最成本優化的部署。這可能會導致過度配置和優化不足的系統部署。但是,當我們需要將資源從地端環境“lift and shift”到雲端中然後進行優化時,這是一個合理的選項。
事先在成本優化策略上投入適量的人力資源與時間,通過確保始終如一地遵守最佳實踐並避免不必要的過度資源配置,我們可以更輕鬆地實現雲端運算的經濟效益。
實踐雲端財務管理
使用雲端運算會讓組織縮短了審核、採購和部署基礎設施的時間,技術團隊可以更快地進行創新。實現業務價值和良好的財務管理需要一種新的雲端財務管理方法,現在稱為FinOps(更多的Finops資料可參考本部落格的FinOps文章)。
許多組織事由很多個不同大小單位所組成。使我們的組織與一組規定好的財務目標保持一致並為我們的組織提供實現這些目標的機制與能力將會建立一個更高效的組織。一個有高效的組織的創新和建構能力會更快速,更加敏捷並適應任何內部或外部因素。
AWS 提供了Cost Explorer 以及與其整合的的Athena 和 QuickSight 以及CUR(Cost and Usage Report),以便在整個組織中提供成本支出和資源使用情況的認知。 AWS Budgets 提供有關成本支出和資源使用情況的主動通知。
以下問題是我們在考量成本優化層面時需要回答一些問題:
Q1: 我們如何實踐良好的雲端財務管理?
實施雲端財務管理使組織能夠在 AWS 上優化成本、資源使用和資源擴展時實現業務價值和成功的財務管理。
最佳的實踐方式有:
- 定義成本優化的功能
- 建立財務部門與技術部門的合作關係
- 訂立雲端成本的預算與預測
- 在組織的作業流程中對人員建立成本認知
- 報告與通告成本優化的成果與目標
- 主動的成本監控
- 持續關注新的雲端服務可能帶來的成本優化
在建構成本優化功能時,我們需要有相關的成員與團隊(通常是FinOps團隊)。 而現有團隊成員將了解組織當前的作業方式以及如何快速實施改進。 還可以考慮新增一些專家成員到FinOps團隊,例如財務分析和專案管理。
在您的組織中實施成本認知時,我們應該是修改或建立在現有組的的計劃和流程的基礎上。 加到東西到現有的基礎上比構建新的流程和程序要快得多。 這可以讓我們更快的取得成果。
成本支出和資源使用的認知
雲端運算帶來的更高的靈活性和敏捷性來鼓勵創新和使用快節奏的開發和部署。它消除了與需要預先建置地端機房設施相關的人工流程和時間,包括要協商什麼機器規格、協商報價、管理採購訂單、安排出貨以及部署資源。然而,簡單且幾乎無限的按現行系統所需容量來建立我們的系統服務需要一種新的成本支出思維方式,從CapEX變成OpEx。
許多組織的業務由不同團隊運行的多個系統組成。將資源成本細化到每個資源使用單位的能力推動了有效的資源使用行為並有助於減少浪費。準確的成本分配可以讓我們知道哪些產品是真正有利可圖的,並可以讓我們就預算分配做出更明智的抉擇。
在 AWS 中,我們可以使用 AWS Organizations 或 AWS Control Tower 建立一個account structure,它可以切分我們的分配成本和資源使用量。我們還可以使用resource tag將屬於組織的業務和資訊套用在我們的資源使用情況和成本。使用 AWS Cost Explorer 了解我們的成本和使用狀況,或使用 Amazon Athena 和 Amazon QuickSight 刻一個屬於我們自己的財務面板。通過 AWS budget notification和使用 AWS IAM和 Service Quotas 控制成本和資源使用狀況。
Q2: 我們如何管理我們的雲端資源使用?
組織建立政策和機制,以確保在實現目標的同時產生成本是符合我們預估的。 通過採用制衡方法,我們可以在成本不超支的情況下進行創新。
最佳的實踐方式有:
- 基於組織的需求發展相關使用政策
- 實行目的與目標管理
- 實行AWS帳號架構
- 用groups與roles進行管理
- 進行成本管控
- 追蹤組織在雲端各項專案/團隊/環境中的生命週期
Q3: 我們如何監控資源使用與成本?
制定政策和程序來監控和適當分配成本。 這讓我們可以衡量和提高這個系統服務的成本效益。
最佳的實踐方式有:
- 設定詳細的資訊來源
- 辨認成本歸類
- 設定組織對各項系統的指標要求
- 設定帳單與成本管理工具
- 將組織的相關業務資訊加入到成本與資源使用量資訊中
- 根據系統指標或業務成果分配成本
Q4: 我們如何移除已不需要的資源?
從專案的開始到生命週期結束期間實施變更控制和資源管理。 這可確保我們關閉或停止未使用的資源來減少浪費。
最佳的實踐方式有:
- 追蹤資源的使用生命週期
- 實行移除流程
- 手動或自動的移除不需要使用的資源
我們可以使用cost allocation tags來分類和追踪我們的系統服務在 AWS的 使用狀況和成本。當我們將標籤貼在 AWS 資源(例如 EC2 或 S3 bucket)時,AWS 會產生一個含有我們的資源使用情況和標籤的成本和資源使用情況報告。我們可以依這些自訂的標籤將成本定位成不同單位的花費(例如成本中心、系統名稱或業務單位)。
確保我們在成本和使用狀況報告和監控中使用正確的詳細程度和精細度。如需high level insights and trends,需要使用 AWS Cost Explorer 的daily granularity。要進行更深入的分析和檢查,就要用AWS Cost Explorer 中的hourly granularity,或用Athena 和 QuickSight 看觀看hourly granularity的 CUR 。
將有標籤的資源與實際的生命週期追蹤(如系統、專案)相結合,可以識別不再為組織創造業務價值並應該停止使用的資源或專案。
資源使用是具成本是具成本效益的
為我們的系統服務使用適當的資源是節省成本的關鍵。例如,產財務報告用小台的伺服器需要8個小時,但在成本高出一倍的大型伺服器上運作只要一小時就好。兩台伺服器都提供相同的結果,這節省了雲端成本卻增加了組織的時間成本。
架構良好的系統服務使用最具成本效益的資源,因為這可以產生重大而積極的經濟效果。我們可以使用託管服務來降低成本。例如,您可以使用按每則訊息收費的服務,而不是維護伺服器來傳訊息。
AWS 提供了多種靈活且具有成本效益的定價選項來從 AWS得到資源
以最適合我們需求的方式提供 VM和其他服務。On-Demand instance讓我們用按小時為運算資源付費,不用承諾長租這項資源。 Savings Plans 和RI的長租方案則比On-Demand則省75%的成本。借由 Spot instance,我們可以利用AWS還沒有使用的 EC2 容量並提供高達 90% 的On-Demand discount。 Spot instance適用於系統可以容忍使用單一伺服器可以開開關關的一群伺服器的情況,例如stateless Web server、batch processing或HPC 還有大數據時。
選對AWS的服務也可以減少資源使用和成本;例如 CloudFront 以最大限度地減少資料傳輸,或完全消除成本,或使用 RDS 的 Aurora 來降低商業資料庫成本。
Q5: 我們在選擇AWS服務時如何評估其成本?
EC2、EBS 和 S3 是建立 AWS 服務的區塊(如同樂高積木般的區塊)。 託管服務(例如 RDS 和 DynamoDB)是更高等級或應用程式等級的 AWS 服務。 通過選擇適當的積木和託管服務,我們可以優化系統服務的成本。 例如,使用託管服務,我們可以減少或消除大部分管理人力和維運成本,讓我們有時間處理應用程式和跟業務相關的活動。
最佳的實踐方式有:
- 辨認組織對其成本的要求是什麼
- 針對系統會用到的雲端服務組件進行分析
- 對每個雲端組件進行全面性的分析
- 選擇 CP高的商業軟體
- 根據組織優先等級來選擇系統的雲端組件進行成本優化
- 隨著時間的推移對不同的使用情況進行成本分析
Q6: 當我們選擇資源的類型,大小,數量時,我們如何符合我們的目標成本?
確保為手上的作業選擇適當的資源大小和資源數量。 通過選擇最具成本效益的類型、大小和數量,我們可以最大程度的資源減少浪費。
最佳的實踐方式有:
- 做一個成本模型
- 根據資料的型態選擇資源的類型與大小
- 可以根據指標自動的調整資源的類型與大小
Q7: 我們如何使用定價模型來減少成本?
使用最適合我們所需資源的定價模型以最大程度的減少成本。
最佳的實踐方式有:
- 進行定價模型分析
- 根據成本將服務放置不同的區域
- 選擇具有成本效益條款的第三方協議
- 為系統服務用到的所有雲端組件實施定價模型
- 在管理帳號進行定價模型分析
Q8: 我們如何規劃資料在傳輸的過程中產生的費用?
確保我們計劃內與監控資料傳輸費用,以便我們可以做出架構決策以最大程度的降低成本。 隨著時間的推移,一個小型而有效的架構變更可以大大降低我們的維運成本。
最佳的實踐方式有:
- 做一個資料傳輸模型
- 選擇正確的雲端組件來優化資料傳輸的成本
- 實行額外的雲端服務來優化資料傳輸的成本
通過在選擇AWS各項服務時的成本考量,並使用 Cost Explorer 和 Trusted Advisor 等工具定期檢視我們的 AWS 資源使用情況,我們可以主動監控資源使用率並相應的調整我們的資源部署。
管理資源的需求與供給
當系統遷移到雲端時,我們只需為所需的資源來付費。 我們可以在有資源需求時提供資源以匹配系統服務的需求,這樣就不用啟用過大的資源進而產生成本浪費。 我們還可以修改需求,使用throttle、buffer或queue來撫平資源需求並以更少的資源為其提供服務,從而降低成本,或者在之後進行批次處理。
在 AWS 中,我們可以自動預設資源啟用以匹配系統服務需求。 使用On-Demand或time-based方法的 Auto Scaling 允許我們根據系統所需添加和刪除資源。 如果我們可以預測資源需求變化,我們可以節省更多成本並確保我們的資源滿足系統服務需求。我們可以使用 API Gateway 進行一些限制,或使用 SQS 在我們的系統服務中加上Queue的方式。 這些都將允許我們修改對系統服務組件的需求。
Q9: 我們如何管理系統的需求與供給?
對於在我們的系統服務的成本和效能取得平衡,我們需要確定我們付錢的資源都是有被使用的,並避免資源使用率變差。 無論是維運成本(由於過度使用導致效能下降),還是浪費成本(資源開太大),太傾向任何一邊都會對組織產生不良的影響。
最佳的實踐方式有:
- 根據系統服務的需求進行分析
- 根據系統需求設置buffer 或throttle機制
- 資源可以動態的提供
在設計中修改資源的需求和供應時,我們需要主動考量資源的使用模式、提供新的資源所需的時間以及資源需求模式的可預測性。 管理資源需求時,我們需要有正確大小的queue或buffer,並且在所需的時間內回應系統服務所需資源。
隨時間優化
隨著 AWS 不斷有新的服務和功能,最佳實踐是檢視我們現有的架構決策,以確保它們持續有著成本效益。 隨著系統服務的需求發生變化,我們需要積極淘汰不再需要的資源、整個服務和系統。
實施新功能或資源類型可以逐步優化我們的系統服務,同時最大程度的減少進行變更所產生的工作量。 這可以隨著時間的推移不斷提高效率,並確保我們始終用到最新的技術來降低維運成本。 我們還可以使用新服務更換或加新組件到工作負載。 這可以顯著提高效率,因此我們必須定檢視我們的系統服務,並實施新的服務和功能。
Q10: 我們如何評估AWS推出的新功能與服務?
隨著 AWS 推出新的服務和功能,最佳實踐是檢視我們現有的架構決策,以確保它們持續著最具成本效益。
最佳的實踐方式有:
- 發展系統服務的回顧與檢視流程
- 定期針對系統服務進行檢視與分析
在定期檢視我們的部署時,評估推出的新服務如何可以再幫我們節省成本。 例如,RDS Aurora 可以降低商業型的關聯式資料庫的成本(不過可能會被AWS給綁住)。 使用 Lambda這一類的serverless的服務可以消除維運和管理底層機組設施的需求。