設計準則
性能是系統的一個重要指標,如果性能無法達到用戶預期,會造成大量的用戶流失。而很多時候性能問題和系統最初的架構設計相關(當然系統架構是可以持續演進和迭代的),任何架構設計都必須考慮可能帶來的性能問題。
因為性能問題幾乎無處不在,所以優化性能的手段也非常多,從用戶瀏覽器到數據庫,影響用戶請求的所有應用相關環節都可以進行性能優化。隨著云計算在IT支出占比的不斷提升,越來越多的用戶核心業務系統跑在云上,云的架構設計和選型也對性能非常重要?;谠频奶攸c,云架構中有關性能設計的方面,有以下注意事項和基本原則:
有效的云資源選型
作為一個軟件系統,應用層面有很多性能優化和架構設計的考慮點,但是一個系統的性能基石其實是底層計算和存儲資源的性能,這個是原子能力。當系統使用的計算和存儲資源性能越好,越有利于上層應用進行整體性能調優和優化,所謂“工欲善其事必先利其器”。
在大規模分布式系統不斷發展的趨勢下,計算場景和對算力的需求越來越豐富。比如在很多通用計算的場景下,最關心的其實是計算集群的規模,對計算節點本身的單節點能力并沒有高要求(比如短時大量計算請求的峰值場景);而在現在火熱的AI模型訓練場景下,則必須使用類似A100 GPU計算卡的裸金屬機器來快速滿足大規模AI訓練的要求。同時云資源大都是按可用區維度進行部署的,一旦選擇可用區進行大量資源部署后遷移和改造成本會很高,因此選擇有效的可用區也非常重要。在選擇可用區時,需要綜合考慮延時,庫存,資源類型等因素。
即在場景越來越豐富的情況下,云資源的資源選型從一開始就能很大程度影響最終的系統性能。因此從云架構的實際角度來看,云資源的選型非常重要,具體選型的原則可以參考評估合適的云服務。
可伸縮、可擴展的云架構
大型系統需要面對大量用戶的高并發訪問和存儲海量數據,不可能只用固定數量的服務器來處理全部用戶請求,這樣既不經濟,也沒有辦法有效應對靈活的業務訪問。通過集群的方式將計算資源和存儲資源等組成一個整體提供服務,在需要的場景下,可以及時通過調整計算和存儲資源來緩解高并發帶來的計算和存儲壓力,從而實現在訪問峰值場景下可以向用戶有效提供穩定的服務,在訪問低谷的時期又可以釋放不必要的資源或保持系統的低位運行來節省IT支出。
對于一個嚴格設計的系統來說,存在不同功能的計算節點,如應用服務器集群、緩存服務器集群、數據庫集群等。應用服務器集群如果是無狀態的場景下(數據保存在另外的節點上),那么伸縮機器是比較簡單直接的;對于緩存服務器集群來說,新加入的計算節點則需要進行相關緩存刷新或預熱等來保證數據的可訪問性;對于數據庫來說,實時的伸縮是比較困難的,需要提前做好數據備份和數據同步等方式,輔助路由手段等提升數據庫集群的整體可用性和性能。
云上架構設計的部分最佳實踐
在云計算高度發展的今天,公共云上已經運行了大量的核心業務系統。這些業務系統從設計到邏輯等方面都考慮了云本身帶來的便利性,同時公共云的發展也不斷吸取這些業務系統的需求來不斷優化自身的產品設計,并推出更適配業務需求的云產品。因此,在一些比較有特點的場景下形成了最佳實踐,借助這些最佳實踐預期可以有效提升云架構設計初期的架構設計能力,提升系統整體性能,具體可以參考每個云產品文檔中的最佳實踐相關內容,以及阿里云的最佳實踐頻道。
關注架構設計的注意事項
性能并不需要盲目地追求極致,在高性能架構設計的過程中,還需要關注性能設計中的一些挑戰和注意事項,避免引起不必要的資源浪費和研發投入。具體可以參考挑戰和注意事項。