雲計算(Cloud Computing)被業界看做繼大型計算機、我的計算機、互聯網以後的第四次IT產業革命,正日益成爲將來互聯網與移動技術相結合的一種新興計算模式。雲計算提供了IT基礎設施和平臺服務的新模式,順應了當前全球範圍內整合計算資源和服務能力的需求,知足了高速處理海量數據的需求,爲高效、可擴展與易用的軟件開發和使用提供了支持和保障。雲計算的核心價值在於提供了新的應用開發和運營模式,是下一代互聯網、物聯網和移動互聯網的基礎,全球信息領域的主要廠商都在圍繞雲計算從新佈局,並必將影響到全社會的方方面面。
能夠將「雲」看做一個易於使用與訪問的巨大虛擬資源池(如硬件、開發平臺或服務等),這些資源能夠根據負載(規模)的變化而動態配置,以最優地利用資源
[1]。雲計算主要具備如下一些特色:
大規模:雲計算服務一般由運行在多個數據中心的集羣系統提供,每一個數據中心節點可達到上萬臺,爲各類不一樣的應用提供海量計算和存儲資源。
低成本:雲計算經過資源虛擬化的方式爲用戶提供可伸縮的資源,支持各類不一樣類型的應用同時在系統中運行,提升總體的資源利用率,從而下降成本。
高可靠:雲計算可多份存儲用戶數據,任意一臺物理機的損壞都不丟失用戶數據,多數據中心的設計也知足了災備的需求。
目前,業界雲計算最領先的是Amazon和Google,其中,Amazon真正實現了計算的Utility化,而Google真正從技術上實現了大規模的計算。XX雲的戰略是實現Amazon Google並有所超越,成爲中國擁有最大計算能力的公司。爲此,XX雲開放了包括彈性計算服務(Elastic Compute Service,ECS)
[2]、開放存儲服務(Open Storage Service,OSS)
[3]、關係型數據庫服務(Relational Database Service,RDS)
[4]、開放結構化數據服務(Open Table Service,OTS)
[5]、開放數據處理服務(Open Data Processing Service,ODPS)
[6]、負載均衡(Server Load Balance,SLB)
[7]、雲盾
[8]、雲監控
[9]等在內的一批雲計算服務,本文將重點介紹ECS及與之相關的SLB和雲盾服務。
ECS以XX雲自主研發的飛天分佈式計算系統爲基礎,基於先進的虛擬化、分佈式存儲等雲計算技術,將計算和存儲的基礎資源整合在一塊兒,並以Web方式爲用戶提供計算能力。ECS的體系結構如圖1所示。
在數據中心中,大量的計算節點和存儲節點經過飛天分佈式計算系統將物理資源整合爲一個總體,上層經過XEN虛擬化技術,對外提供彈性計算服務。ECS包含兩個重要模塊:計算資源模塊和存儲資源模塊。ECS的計算資源指CPU、內存、帶寬等資源,主要經過將物理服務器(即宿主機)上的計算資源虛擬化,而後再分配給雲服務器使用。一臺雲服務器的計算資源只能位於一臺物理服務器上,當一臺物理服務器上資源耗盡時,系統將在其餘物理服務器上建立雲服務器。雲服務器的存儲資源採用了飛天的大規模分佈式文件系統(盤古),將整個集羣中的存儲資源虛擬化後對外提供服務。用戶數據在盤古集羣中存儲三份副本,任意一份副本損壞後系統均可以自動恢復到三份副本,使用戶數據達到99.9999999%的可靠性。用戶可使用SSH (ECS爲Linux系統)或者遠程桌面(ECS爲Windows系統)直接遠程登陸並管理雲服務器。
在大規模集羣中,小几率的硬件故障將成爲必然事件。當宿主物理機發生故障時,ECS可以自動遷移雲服務器,而且將其數據恢復到最後一刻的狀態,既爲用戶屏蔽了硬件故障,又能保障用戶業務的連續性。
ECS支持快照(Snapshot)功能,除第一次快照爲全本快照外,以後均爲增量快照。用戶能夠根據業務須要,設置建立快照的策略,系統天天也會自動爲用戶建立快照。有了快照以後,用戶能夠方便地將雲服務器快速回滾到以前的任一快照版本。經過快照功能,用戶能夠將某一臺雲服務器上的當前快照做爲自定義鏡像,並基於此快速恢復基礎環境或者批量部署集羣,提升運維效率。
ECS提供了安全組(Security Group)的機制,用來隔離不一樣用戶的雲服務器或同一用戶的多個雲服務器,能夠有效阻止僞造MAC、僞造IP、ARP欺騙等攻擊。同一安全組內的雲服務器之間的網絡是互通的,但不一樣安全組的雲服務器之間是相隔離的。用戶可對某個安全組配置防火牆規則,也可經過自定義防火牆規則容許各安全組之間的流量。一個安全組能夠包含多臺雲服務器,一臺雲服務器也能夠隸屬於至多5個安全組。
除了以上特色,雲服務器的優點還體如今可與其它雲產品與服務(如SLB和雲盾)透明無縫的集成上,多種雲計算產品與服務的聯合使用,遠較單一化的虛擬機服務更爲安全、可靠、有效和經濟。這也是雲服務器與VPS的顯著不一樣之一。
SLB經過設置虛擬IP,將位於同一數據中心的多臺雲服務器虛擬成一個高性能、高可用的應用服務池,再根據應用特性,未來自客戶端的網絡請求按策略分發到雲服務器池中,從而實現負載均衡。SLB支持四層和七層協議的負載均衡,且採用分佈式架構,具備高度的可靠性和冗餘性。SLB會檢查池中雲服務器的健康狀態,自動隔離異常狀態雲服務器,從而解決單臺服務器在處理性能、擴展性、穩定性方面的問題。同時,SLB還可加強雲服務器池的抗攻擊能力,安全隔離應用和雲服務器。
雲盾爲雲服務器提供一站式安全增值服務,包括安全體檢(網頁漏洞檢測、網頁掛馬檢測)、安全管家(防DDoS攻擊、端口安全檢測、網站後門檢測、異地登陸提醒、主機密碼暴力破解防護)等功能,適用於使用雲服務器搭建的社區網站、企業官網、門戶網站、電子商務網站、遊戲等SaaS應用網站。尤爲是雲盾能夠自動檢測DDoS攻擊特徵,並根據攻擊規模和策略設置進行流量清洗或者黑洞處理,這就大大增強了用戶應用的安全性和抗攻擊能力,是傳統IDC服務所遠遠不能匹及的。
雲產品與服務是以雲計算基礎平臺的方式對外開放的,所以除了Web方式的管理控制檯,用戶可經過ECS RESTful API和多種語言版本的SDK,來配置、管理、升級、監控雲服務器,從而大大下降維護成本,提升運維響應速度,使得雲計算真正成爲一種服務,用戶能自由地按需使用、按需付費,在雲計算的平臺上構建安全可靠、豐富多樣、功能強大的應用,爲海量用戶提供優質的服務。
前不久,Facebook宣佈投資10億美圓收購僅成立15個月的移動照片分享應用Instagram,消息傳出時,人們不只驚歎於這筆鉅額的交易,更爲這支13我的的小團隊感到難以想象。Instagram的Android版客戶端發佈時,24小時內下載量超過100萬,高峯期達到每分鐘2000次,是下載量最大的Android應用之一。到底是什麼緣由讓這支團隊在很短的時間內一舉成名?又是什麼技術讓他們在巨大的下載量下頂住了壓力?
讓咱們回顧一下Instagram開發團隊奉行的3大原則:
一、Keep it very simple(極簡主義);
二、Don't re-invent the wheel (不重複發明輪子);
三、Go with proven and solid technologies when you can (能用就用靠譜的技術);
總而言之,專一於本身的業務和擅長領域,其它事情讓更專業的人去作。Instagram選擇了美國的亞馬遜雲計算平臺做爲基礎設施提供商,他們部署了數以百計的雲服務器和存儲服務,卻只有區區3名工程師負責維護,不須要任何現場人員支持。若是依賴於傳統的IDC服務,光是把這幾百臺服務器託管到IDC機房,就須要數天時間和大量的人力成本。每當發佈一個新版本時,Instagram所要作的只是在雲計算平臺上開啓更多的服務器,即可穩坐釣魚臺,看着本身應用的下載量節節攀升了。
XX雲彈性計算平臺(Elastic Compute Service,簡稱ECS)面向中國互聯網開發者和站長,致力於爲中國的Instagram提供靠譜的互聯網基礎服務。它基於底層的飛天分佈式計算系統,結合高性能虛擬化技術,實現了計算、存儲和網絡資源的統一調度和彈性分配。在具體的產品形式上,客戶接觸的是最簡單的雲服務器,與物理機無二,沒有任何的使用門檻。因爲採用了雲計算技術,相比傳統的IDC託管服務,彈性計算在自助管理、資源組合靈活性、基礎環境定製化、數據安全性及硬件資源利用率上都有不小的優點。
在本文中,咱們將和你們分享在雲計算平臺上構建高可用、可擴展應用的一些進階技巧。考慮到有些讀者還沒有接觸過ECS,因此在進入正題以前,讓咱們簡單瀏覽一下ECS的各項特性。
自助管理
ECS在aliyun.com的控制檯中提供了多種用戶自助的操做,例如最爲常見的建立、啓動、關閉雲服務器,未來還會陸續推出比較高級的快照、自定義鏡像(Image)等功能。回想咱們之前遇到服務器不可訪問時,提交工單、電話催促,在經歷漫長等待以後,也未必可以獲得一個滿意的答覆。如今,咱們能夠在控制檯中全程監控和管理每一臺服務器的運行狀況,從而作出快速的決定--重啓或者部署新的服務器。
ECS支持目前主流的Windows和Linux系列操做系統。用戶不只可使用這些標準的鏡像,還能夠在此基礎上修改配置、安裝軟件,建立出本身的鏡像,當要快速恢復基礎環境或者批量部署集羣時,自定義鏡像將成爲提升運維效率的利器。
下圖簡單地描述了一個自定義鏡像的生產過程:
一、使用標準鏡像建立一臺雲服務器;
二、用戶登陸雲服務器,安裝本身所需的軟件,配置好系統參數;
三、安全關機,而後將雲服務器當前狀態存爲一個自定義鏡像;
四、隨後,用戶就可使用剛建立的自定義鏡像啓動更多的雲服務器了;
數據可靠性
對於寫入VM磁盤的數據,ECS會實時地在不一樣的交換機下同步3份拷貝,當集羣中的磁盤損壞時,後臺進程也會自動地重建故障磁盤的數據。相比常見的RAID硬件方案,這種分佈式存儲系統可以提供更高的數據安全保障,由於它不受單臺服務器可用性的限制,而且,因爲多臺服務器能夠併發處理,數據恢復的時間更短。
ECS提供的在線快照功能能夠完美地替代傳統的複製備份,它採用先進的增量數據算法,確保作到備份空間和時間的最優化。當用戶數據被誤刪或者系統被病毒破壞時,只須要一個簡單操做就能夠瞬間恢復環境。
自動故障恢復
有了分佈式存儲的支持,ECS能夠提供比傳統主機或VPS服務更高的可用性指標。當一臺物理機損壞時,ECS會自動監測到硬件故障,在第一時間內把雲服務器遷移到新的宿主機上,同時硬盤數據保持最後一刻的狀態。
從以上介紹能夠知道,託管在彈性計算平臺上的應用能夠得到更多的保障,但咱們是否能夠認爲,將應用搬到雲計算平臺以後,它就能跑得歡快、永不宕機,還能自動擴展了?答案是NO!
每時每刻,硬盤、主板、電源或者網絡設備均可能忽然損壞,甚至整個數據中心發生停電。雲計算技術沒有辦法解決全部硬件問題,只是下降了某些故障的發生概率,例如:
•普通SATA的年損壞率在2~4%,但使用分佈式存儲的年損壞率在1‰如下;
•自動故障恢復只是減小了服務器的宕機時間,但不能防止宕機;
若是咱們的應用只能跑在單臺服務器上,只能依賴單臺設備的硬件升級才能應付日益增加的訪問量,那麼這種應用的宕機是早晚的事。我 們須要從部署架構和應用架構兩個方面來破解這個難題。
部署架構
既然沒有什麼硬件是永不損壞的,咱們是否能夠用多份冗餘的硬件來下降故障的機率?若是挨在一塊兒的服務器被一把火燒掉的可能性太大,咱們是否能夠把它們分散在不一樣的集羣?若是數據可能被破壞,是否要常常作些備份?… …
把各類故障因素都考慮一遍,咱們就得出了一個大體的部署框架:
一、以集羣方式提供服務
Web服務器、緩存服務器都是很是適合部署爲集羣的,單臺服務器損壞不會影響整個網站的訪問。數據庫服務器稍難一些,但它們也提供了主從複製、讀寫分離的解決方案。
二、 將雲服務器分佈在不一樣的可用區(Zone)下
不一樣的可用區表明數據中內心的不一樣物理位置,同一可用區內的服務器可能同時遭遇網絡設備、電力等故障,所以,把一個集羣內的雲服務器分散到不一樣的可用區甚至不一樣的數據中心(Region)是個明智的選擇。
三、 爲Web服務集羣配置負載均衡與DNS輪詢
多臺Web服務器能夠經過配置負載均衡或者DNS輪詢提供對外服務。
相比DNS輪詢,負載均衡方式會更加靈活,由於它對外屏蔽了服務器的真實IP,當負載均衡資源池內增長或減小服務器時,對客戶是透明的。而DNS存在時延的問題,集羣發生調整後,頗有可能形成部分用戶在很長一段時間內沒法正常訪問網站。
另外,負載均衡可以跟蹤後端應用服務器的健康狀態,自動排除有故障的節點,避免出現服務時斷時續的問題。
對於特別大的應用,咱們推薦使用負載均衡 DNS輪詢的方式,只是這裏的DNS輪詢域名指向的是負載均衡的VIP。
四、 實現動態部署
爲了應對常常性的業務推廣和可能的DDOS網絡攻擊,實現系統與應用程序的一鍵部署很重要。系統管理員能夠根據應用的當前狀態(CPU、內存使用率、HTTP的響應時間等)做出判斷,即時增長服務器,而且快速部署應用程序,頂住突增的業務流量。若是實現得更智能一些,能夠在應用服務器內部部署一些監控程序,由主控程序判斷當前整個集羣的負載狀況,調用ECS API自動增減服務節點。
用一臺主控機去批量操做其它雲服務器時,應該儘可能地使用一些便捷工具,例如SSH密鑰對,它實現了受權服務器間的免登陸,使得集羣管理更加簡單。
五、定時備份很重要
前面說到,沒有什麼技術能夠保證100%的數據安全,你的數據始終面臨誤刪文件、病毒破壞、程序寫錯、硬件損壞等種種可能的風險。若是你的數據很是重要,請按期備份!在彈性計算平臺上,這件事情相對簡單,快照功能自動完成增量數據備份。然而,單個物理位置的存儲始終會面臨地震、火災等災難的威脅,若是你以爲還不夠安全,或者有異地使用的須要,且可以承受異地備份帶來的存儲、帶寬等成本,能夠自行拷貝數據文件。彈性計算平臺也正在考慮跨機房的容災方案。
六、 將應用程序配置爲自恢復的
單臺服務器的硬件故障是常見現象,以現有的雲計算技術能力,尚沒法作到不影響雲服務器的運行,但ECS能夠快速檢測到故障特徵,而且將雲服務器自動遷移到新的宿主機上。這裏存在一個問題,雖然雲服務器從新啓動了,並且硬盤數據恢復到最後一刻的狀態,可是原先正在運行的應用程序停止了。爲了讓你的服務中斷時間儘可能地縮短,避免人工的介入,強烈建議將應用程序及相關服務設置爲開機自啓動,這樣,你就能夠高枕無憂地睡大覺,不用半夜起來恢復應用,儘管只是幾個點擊或者命令操做。
七、加固系統
安全也是高可用的重要前提之一。放在IDC機房中的服務器時時面臨各類惡意攻擊,下圖是咱們偶然截取的一個攻擊片斷:
圖4 端口掃描攻擊
這臺服務器在循環探測機房中每一臺機器的1433端口,有經驗的讀者很快猜出來了,它是在試探SQLServer服務,一旦SQLServer被攻破,再利用SQLServer管理員的系統權限漏洞,立刻就有一些機器淪爲肉雞。
XX雲彈性計算服務在平臺層面就屏蔽了一些影響範圍很大的惡意攻擊,例如篡改MAC、僞造IP、發送ARP欺騙包等,但用戶的系統仍是要遵循一些安全最佳實踐,才能讓本身的系統更加穩固:
一、關閉沒必要要的系統服務
越多的服務意味着越多的漏洞,特別是Windows共享文件夾、遠程修改註冊表項等服務都存在巨大的風險,若是你的工做不須要這些服務,請立刻關閉。
二、及時升級系統補丁
前段時間爆出的微軟高危RDP漏洞讓不少用戶深受其害,經過一個簡單的Python腳本,黑客就能夠直接獲取系統管理員權限或者直接把服務器打至藍屏。不要忽略操做系統廠商的安全警告,一旦遭遇攻擊,將形成不可挽回的損失。
三、開啓系統防火牆
採用白名單控制策略,只開放最小集合的端口。對於數據庫服務器,更要設置IP白名單,僅容許前端的Web服務器訪問;對於Web服務器,只對外開放80端口。
四、修改常見服務的端口
從剛纔的攻擊示例看出,黑客雖然漫無目的地掃描同一網段的IP,但攻擊的目標端口只有一個1433,這是SQLServer的默認配置。爲了減小這類攻擊,最有效的方式就是修改數據庫、FTP這類常見服務的默認端口,增長黑客掃描的難度。
五、加密數據傳輸
筆者曾經遇到過一個很奇怪的現象,在一臺Windows 2003服務器上,應用的負載很低,但CPU利用率達到了99%,從任務管理器中看到,有無數個winlogon.exe進程瘋狂消耗CPU,當時百思不得其解。一天以後,這臺服務器就淪陷了,我才恍然大悟,必定是攻擊者在嘗試破解密碼。對於這類攻擊,即便調整密碼長度增長破解難度也收效不大,由於攻擊過程會消耗大量的系統資源,正常的業務根本沒法進行。況且,如今的服務器計算能力愈來愈強,一個密碼的安全性實在過低了。
一些加密傳輸方式可以有效地抵禦這類攻擊,也減小傳輸過程當中的敏感信息泄露問題。Windows能夠配置遠程桌面服務使用SSL傳輸,要求客戶端必須持有證書登陸。Linux則可使用SSH登陸密鑰對。結合修改默認端口的方式,將使你的系統安全性提升一個層次。
友情提醒:若是你開啓了防火牆,又修改了默認的遠程桌面或者SSH端口,請務必在防火牆中設置這些服務的白名單,不然就悲劇了。
應用架構
要支持上述高可用、可擴展的部署架構,應用程序也要作相應的調整。例如:
•Web應用的無狀態設計
Web應用的諸多因素可能形成系統沒法擴展:本地存放的上傳文件、進程內的Session等。以上傳文件爲例,假設使用了本地存儲,用戶第一個請求上傳了一個頭像文件,存放在Web-A服務器上,接着刷新頁面,但這個請求被髮送到Web-B服務器上,他驚奇地發現:上傳的頭像文件不見了!要解決這個問題,必須把上傳文件存放到共享的文件夾,Web服務器不能保留任何本身的數據(即無狀態)。而對於Session數據,通常的建議是用Cookie代替,或者存放到共享的Session服務器或者數據庫中。
•用分佈式服務代替單點的服務
單點就意味着故障,不只有可用性的風險也有性能瓶頸的問題。常見的單點通常出如今共享文件服務器、Session服務器、緩存服務器、數據庫服務器。阿里雲計算平臺提供了一系列分佈式服務,是這些單點服務的可行替代方案:
•須要無空間和訪問頻率限制的小文件存儲?用開放存儲服務(OSS)。
•須要可彈性分配存儲空間和IO能力的數據庫?用關係型數據庫服務(RDS)。
•須要海量結構化數據存儲服務?用開放數據表服務(OTS)。
對於平臺暫時不提供的分佈式緩存服務,業界也提供了一些解決方案,例如Memcached集羣技術,但這也對應用程序的設計提出了更高的要求,開發者必須清楚各類服務的HA原理,還須要瞭解一致性哈希算法等細節的實現。
■應用的安全不容忽視
安全不只是操做系統配置的問題,堡壘更容易從內部被攻破,而這個內鬼頗有可能就是咱們的應用。從機率上說,一個複雜程序會比一個簡單程序多不少漏洞,而Web應用涉及數據庫、應用服務器、緩存等諸多組件,稍有不慎,攻擊的後門就會向黑客敞開。
常見的Web服務漏洞有:
■XSS跨站腳本攻擊
這類Web攻擊最爲廣泛,通常發生在容許用戶輸入內容的頁面,尤爲是提供富文本編輯的模塊。幾乎全部的網站都會被XSS攻擊光顧,但防護這類攻擊也是最爲簡單的:限制用戶輸入,而且在頁面輸出內容時對敏感字符進行編碼,相對來講,後者更爲重要一些。PHP語言的htmlspecialchars函數、Java Jakarta commons的StringEscapeUtils類都是實現編碼功能的快捷工具。
■SQL注入攻擊
只要應用代碼中存在這樣的SQL:
sql = "select * from User where name='" name
"' and password='" password "'";
那麼這個應用距離淪陷也就不遠了,攻擊者只要輸入一個值爲
」’ or 1=1 or name=’」’ or 1=1 or name=’」’ or 1=1 or name=’」’ or 1=1 or name=’
的name就能夠輕易進入你的應用系統。杜絕這類問題的方法有2種:
對輸入的特殊字符進行轉義,例如PHP的mysql_real_escape_string函數;
或者採用參數化的SQL,例如:
[table=100%,,,0]
[tr]
[td]sql = "select * from User where name=? and password=?";
result = query(sql, name, password);
[/td]
[/tr]
[/table]
後者實現更加優雅,絕對避免了SQL注入的風險,並且在提高數據庫的查詢性能上也會有所幫助。
■ 上傳文件漏洞
這是最爲危險的應用級漏洞,特別容易出如今容許用戶上傳內容的網站中。假設一個tomcat搭建的Web網站容許用戶上傳附件,卻忘了限制上傳目錄的可執行權限,攻擊者就能夠上傳一個帶webshell的jsp文件,經過訪問這個上傳文件的URL就能夠徹底控制網站服務器。
必定要取消上傳文件的可執行權限,另外,毫不容許這類文件被看成服務端腳本解析。趕忙爲你的網站實施安全策略吧!
■Cookie與傳輸加密
只要會用HttpWatch、Firebug等開發工具,你們均可以看到各大網站的Cookie數據,而這些Cookie正是網站用於鑑別用戶身份的憑證。經過分析Cookie構成,黑客有可能猜想出網站的鑑權策略。要想讓你的應用更安全,能夠對Cookie等敏感數據進行加密。若是你的網站還包含在線支付功能,部署帶受權證書的HTTPS是必不可少的,這也是不少第三方支付平臺的強制要求。
綜上所述,雖然雲計算平臺提供了更靈活、更穩定的基礎服務保障,但它不足以解決應用的高可用性和可擴展性問題,應用自身必須在架構設計和部署上 充分考慮各類意外狀況,才能實現真正意義上的高可用、可擴展 。