IaaS本身還是在盡量追求與傳統物理環境近乎零差異的運轉環境,這無疑給云計算用戶帶來了很大的好處——切換成本低,甚至無需另行開發。同時,應用能更好地利用云計算達到既定的成本目標、性能目標和運維目標。
總結我們長時間積累的經驗和一系列客戶遷移的實踐,我們發現從傳統模式轉型到云計算模式下,需要直面一些云計算環境下的問題。
云計算環境下數據安全的問題:數據是否有冗余備份、數據是否會被竊取窺視。
多用戶環境下,網絡、CPU、I/O性能隔離問題。
云計算必然在物理環境下疊加更多的軟件來實現云計算的目標,從而導致軟件路徑增多,故障率上升的問題。
云計算環境下多用戶分享所需資源,不存在絕對的順序I/O。
應用系統想要獲得更高的性價比無非就是充分利用云計算的優勢、規避云計算的劣勢。本文將從運營和研發兩個方面提出一些實踐建議。
三字秘訣
拆
一般來講,應用的各模塊的核心資源需求如下。
應用程序——CPU敏感型。
Cache——內存敏感型。
數據庫——I/O敏感型。
如圖1左半部分所示,在傳統模式下,應用程序、Cache和數據庫都安裝在一臺服務器上,由于應用程序需要高CPU,Cache需要高內存,數據庫需要高 I/O,因此IT部門必須買一臺“三高”服務器:高CPU、高內存、高I/O。業務稍微有增長,這臺服務器就會出現瓶頸,必須再提高配置。
如圖1右半部分所示,在利用云計算的情況下,我們通過拆的方法,用不同配置的云主機去匹配專向的需求,用高CPU的云主機去滿足應用程序的需求,用16GB 內存的云主機去滿足Cache的需求,用SSD硬盤的云主機去滿足數據庫的需求。當其中某個模塊成為瓶頸時,更容易定位問題并及時擴容。
彈
由于我們做了第一步拆的工作,架構變得很清晰,所以在資源出現瓶頸時,能迅速擴展相應的模塊。如圖2所示,當一臺應用程序滿足不了需求時,我們可以橫向擴展2臺、3臺,甚至更多。
要滿足彈的能力,需要注意兩個問題:1. 應用程序務必做到無狀態,否則無法很快地進行擴容,簡單地說,無狀態就是不存儲任何數據,應用程序做純粹的邏輯;2. 用Cache的條帶化或者合適的Hash算法,來確保內存更大限度地發揮作用。
云
在使用“彈”字訣后,很快就會發現,隨著業務的增長,數據庫在這種模式下將是最大的障礙。這就需要用“云”字訣。
通過將Cache和數據庫“云化”來獲得云計算對于彈性擴展、容災、數據備份的支持,解決應用程序中幾乎所有的單點問題。
我們提供了UMEM和UDB兩個云產品來解決云端Cache和云端DB的問題。數據庫的彈性擴展非常值得用一個專題來討論,這里先簡要列舉一些方法供參考。
將更多的SQL變為KEY/VALUE,在不依賴大于、小于和模糊匹配的情況下,數據擴展更為容易并且性能會得到極大的提升。對于復雜的排序和關系型事物,可通過建立外部獨立索引的方式進行實現。
在應用程序與DB間引入DBServer對分庫分表進行管理,需要應用程序將自己的表結構訪問關系梳理清楚。這樣,數據庫擴容就會成為可能。
Online Migration。
除了以上3字訣之外,還有一些廣泛適應的方法可供參考。
動態資源和靜態資源的訪問分離。
靜態資源的CDN加速。
核心數據和外圍數據的訪問分離及異步加載。
全異步編程,異步網絡交互、異步磁盤I/O。
減少進程數量,降低CPU的開銷。
應用系統運營遷移云計算的建議
初始時不要采購過多、過大的機型,因為云計算的擴容時間是以分鐘計算的,所以沒必要提前花掉不必要的錢。
選擇一個中立的沒有業務競爭關系的云計算供應商,就有希望從源頭避免數據私密性的問題。
核心數據額外多采用一些備份機制,不要完全信任云計算供應商的方案。
多一些小型服務器,優于少數大型服務器,規避單點故障對業務系統的影響。
減少非必要的外網IP,從而降低被入侵的風險。
善于運用云計算廠商的專業技術人才協助解決一些疑難雜癥。
規模較大時考慮多家云計算共存的方式規避供應商風險。
不要迷信順序I/O帶來的性能優化,在云計算環境下不存在絕對的順序I/O,利用云計算的存儲服務將能更簡單地獲得想要的效果。